Introducción
Integra tu sistema contable o ERP con Facturación Electrónica. La aplicación Link de Dátil te permite emitir todos los tipos de comprobantes electrónicos: facturas, retenciones, notas de crédito, notas de débito, guías de remisión y liquidaciones de compra.
Link se instala como un servicio del sistema operativo. De esta manera se mantiene en ejecución permanente para revisar periódicamente la base de datos en busca de comprobantes a emitir.
¿Cómo funciona?
- Link consulta los documentos utilizando las sentencias SQL de los archivos de configuración.
- Registra los nuevos documentos detectados en una tabla de Control.
- La tarea de emisión de Link toma de la tabla de Control el ID del documento (id_local) en las tablas o vistas del ERP y consulta toda la información de todas las tablas/vistas relacionadas establecidas en la configuración.
- Si el intento de emisión del documento fue exitoso, Link actualiza la tabla de Control con el estado RECIBIDO
- La tarea de consulta de resultado consulta al servicio de Dátil el estado de autorización del documento hasta obtener un estado final (AUTORIZADO, NO AUTORIZADO o DEVUELTO).
Compatibilidad
Sistema Operativo
Link es compatible con los siguientes sistemas operativos:
Windows
Disponible para 32 y 64 bits
- Windows Server 2003
- Windows Server 2008
- Windows Server 2012
- Windows XP
- Windows Vista
- Windows 7
- Windows 8
Para saber si la versión de su equipo es de 32 o 64 bits en Windows, sigue los pasos del siguiente enlace.
Linux (próximamente)
- CentOS
Bases de Datos
Link utiliza ODBC para interactuar con la base de datos, por lo que si el sistema de base de datos que utiliza tu sistema tiene un controlador ODBC Link debería funcionar sin problemas.
Consulta la documentación del driver ODBC que utilizas para construir la cadena de conexión (connection string). El sitio web www.connectionstrings.com también puede ser de utilidad. Este sitio tiene documentación sobre varios motores de base de datos y drivers ODBC.
Link ha sido probado y es utilizado en producción en estos motores de base de datos.
SQL Server
- SQL Server 2000
- SQL Server 2005
- SQL Server 2008
- SQL Server 2012
- SQL Server 2014
Sybase
ORACLE
MySQL
Descargas
Integra Dátil a tu sistema en minutos.
Más reciente (6.4.1)
Notas de la versión
6.4.1
Enero 11, 2023
Corregido
Se agregaron nuevas entradas a la configuración de ats_retention.ini que permite emitir Comprobantes de Retención versión 2.0.0 de Exportaciones y otros Ingresos del Exterior:
- Tipo de Sujeto Retenido
- Tipo de Régimen Fiscal
- País
- Aplica Convenio de Doble Tributación
- Pago Exterior
- Pago Régimen Fiscal
6.4.0
Notas de la versión
6.4.0
Noviembre 15, 2022
Nuevo
Emitir Comprobantes de Retención versión 2.0.0
6.2.4
Notas de la versión
6.2.4
Enero 31, 2020
Nuevo
Emitir liquidaciones de compra a través de archivos XML
Corregido
Error al emitir documentos a través de archivos XML
Versiones anteriores
6.2.3
Notas de la versión
6.2.3
Enero 15, 2020
Corregido
Error al momento de emitir una liquidación de compra.
6.2.2
Notas de la versión
6.2.2
Enero 3, 2020
Corregido
Mejora en información de pagos para compatibilidad con Oracle.
6.2.1
Notas de la versión
6.2.1
Diciembre 24, 2019
Corregido
Error al momento de obtener información de una liquidación de compras sin que ésta tenga registrada una máquina fiscal.
6.2.0
- Windows 32 bits
- Windows 64 bits
Notas de la versión
6.2.0
Octubre 30, 2019
Nuevo
Soporte para Microsoft Access.
6.1.0
Notas de la versión
6.1.0
Octubre 24, 2019
Nuevo
Soporte para poder liquidaciones de compra
Corregido
Corrige error de regresión en la tarea sync_company_resources
5.0.1
Notas de la versión
5.0.1
Enero 5, 2018
Corregido
La longitud máxima para el nombre de una columna en versiones de ORACLE menores
a la 12 es de 30 caracteres. Por esto agregamos alias más cortos para parámetros
que exceden esta longitud, como fecha_emision_documento_sustento -> fecha_emi_doc_sustento
,
numero_autorizacion_documento_sustento -> num_aut_doc_sustento
5.0.0
Notas de la versión
5.0.0
Enero 5, 2018
Nuevo
Soporte para ORACLE.
Personalización del formato de fecha utilizado como literal de fecha utilizando
la nueva entrada de configuración datetime_format
.
Removido
La tarea sync_resources
fue removida completamente en favor de tarea más
reciente resource_sync
.
4.7.0
Notas de la versión
4.7.0
Octubre 19, 2017
Nuevo
Emisión de facturas de reembolso. Se agregaron tres nuevas entradas al archivo
de configuración config/receipts/invoice.ini
: invoice_reimbursement,
invoice_reimbursement_document, invoice_reimbursement_document_tax
Instalación
Descarga Link e instalalo siguiendo el asistente de instalación.
Preparando el ambiente
Link utiliza dos tablas indispensables para su operación: Control y Mensaje. En la tabla de Control registra los documentos que debe procesar y el estado de cada uno de ellos. Puedes crear estas tablas en la misma base de datos de tu ERP o en una distinta.
Crea la tabla de control y mensaje, y agrega los siguientes índices
CREATE TABLE Control (
id_control bigint IDENTITY(1,1) NOT NULL PRIMARY KEY,
tipo_comprobante int NOT NULL,
id_local varchar(100) NOT NULL,
numero_comprobante varchar(20) NOT NULL,
estado varchar(13),
numero_autorizacion varchar(100),
fecha_autorizacion datetime,
fecha_emision datetime,
fecha_ingreso datetime,
fecha_ultimo_envio datetime,
clave_acceso varchar(50),
id_externo varchar(40),
company_name varchar(40),
CONSTRAINT ix_tipo_idlocal UNIQUE (tipo_comprobante, id_local, numero_comprobante, company_name)
)
CREATE TABLE
Mensaje(
id_control bigint,
identificador varchar(5) NOT NULL,
mensaje TEXT NOT NULL,
tipo varchar(50) NOT NULL,
fecha_creacion datetime NOT NULL,
CONSTRAINT pk_comprobante_identificador PRIMARY KEY (id_control, identificador),
CONSTRAINT fk_control_id FOREIGN KEY (id_control) REFERENCES Control(id_control)
);
CREATE NONCLUSTERED INDEX estado ON Control
(
tipo_comprobante ASC,
estado ASC,
company_name ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
ALTER TABLE Control ADD CONSTRAINT ix_tipo_idlocal UNIQUE NONCLUSTERED
(
tipo_comprobante ASC,
id_local ASC,
numero_comprobante ASC,
company_name ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
CREATE NONCLUSTERED INDEX IX_Control_tipo_fecha ON Control
(
tipo_comprobante ASC,
fecha_emision ASC,
company_name ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
Información de los Comprobantes
En esta sección utilizamos DDL en dialecto SQL Server para describir la estructura de las tablas o vistas que deben existir para que Link pueda obtener la información completa del comprobante y emitirlo.
Facturas
A continuación están detalladas todas las estructuras disponibles para emitir una factura. Las únicas que deben contener información son: facturas.factura, facturas.item, facturas.item_impuesto, y facturas.total_impuesto
CREATE SCHEMA facturas
DROP TABLE [facturas].[pago_propiedad]
DROP TABLE [facturas].[pago]
DROP TABLE [facturas].[item_impuesto]
DROP TABLE [facturas].[item_detalle_adicional]
DROP TABLE [facturas].[item]
DROP TABLE [facturas].[total_impuesto]
DROP TABLE [facturas].[informacion_adicional]
DROP TABLE [facturas].[factura]
CREATE TABLE [facturas].[factura](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL, -- (OPCIONAL) el ambiente se toma del archivo de configuración de Link App.
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[moneda] [varchar](15) NOT NULL, -- USD para dólares
[guia_remision] [varchar](17),
[clave_acceso] [varchar](49) NULL,
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_matriz] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- COMPRADOR
[email_comprador] [varchar](254) NULL,
[identificacion_comprador] [varchar](20) NULL,
[tipo_identificacion_comprador] [varchar](2) NULL,
[razon_social_comprador] [varchar](200) NULL,
[direccion_comprador] [varchar](200) NULL,
[telefono_comprador] [varchar](200) NULL,
-- TOTALES
[total_sin_impuestos] [decimal](14,2) NULL,
[importe_total] [decimal](14,2) NULL,
[propina] [decimal](14,2) NULL,
[descuento] [decimal](14,2) NULL,
[descuento_adicional] [decimal](14,2) NULL,
-- CREDITO
[monto_credito] [decimal](14,2) NULL,
[fecha_vencimiento_credito] [date] NULL,
-- VALORES RETENIDOS
[valor_retenido_iva] [decimal](14,2) NULL,
[valor_retenido_renta] [decimal](14,2) NULL,
)
-- FACTURA: ITEMS
CREATE TABLE [facturas].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[cantidad] [decimal](14,2) NOT NULL,
[codigo_principal] [varchar](50) NULL,
[codigo_auxiliar] [varchar](50) NULL,
[precio_unitario] [decimal](14,2) NOT NULL,
[descripcion] [varchar](300) NOT NULL,
[precio_total_sin_impuestos] [decimal](14,2) NOT NULL,
[descuento] [decimal](14,2) NULL,
[unidad_medida] [varchar](50) NULL
)
-- FACTURA: IMPUESTOS DE ITEMS
CREATE TABLE [facturas].[item_impuesto](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [facturas].[item](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL,
[tarifa] [decimal](14,2) NOT NULL, -- porcentaje
CONSTRAINT PK_item_impuesto PRIMARY KEY (id_item, codigo, codigo_porcentaje)
)
-- FACTURA: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [facturas].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [facturas].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY (id_item, nombre)
)
-- FACTURA: IMPUESTOS TOTALES
CREATE TABLE [facturas].[total_impuesto](
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL
CONSTRAINT PK_total_impuesto PRIMARY KEY (id_factura, codigo, codigo_porcentaje)
)
-- FACTURA: INFORMACION ADICIONAL DE LA FACTURA
CREATE TABLE [facturas].[informacion_adicional](
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_factura, nombre)
)
-- FACTURA: PAGOS
CREATE TABLE [facturas].[pago](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[fecha] [datetime] NOT NULL,
[medio] [varchar](100) NOT NULL,
[notas] [varchar](max) NOT NULL,
[monto] [decimal](14, 2) NOT NULL
)
-- FACTURA: PROPIEDADES DE PAGOS
CREATE TABLE [facturas].[pago_propiedad](
[id_pago] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[pago](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL,
CONSTRAINT PK_pago_propiedad PRIMARY KEY (id_pago, nombre)
)
-- FACTURA: CREDITO
CREATE TABLE [facturas].[credito](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[monto] [decimal](14,2) NOT NULL,
[fecha_vencimiento] [varchar](10) NOT NULL
)
-- FACTURA: COMPENSACION SOLIDARIA
CREATE TABLE [facturas].[compensacion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[codigo] [int] NOT NULL,
[tarifa] [int] NOT NULL,
[valor] [decimal](14,2) NOT NULL
)
-- FACTURA: EXPORTACION
CREATE TABLE [facturas].[exportacion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[incoterm_termino] [varchar](10) NULL,
[incoterm_lugar] [varchar](300) NULL,
[incoterm_total_sin_impuestos] [varchar](10) NOT NULL,
[codigo_pais_origen] [varchar](2) NULL,
[codigo_pais_destino] [varchar](2) NULL,
[codigo_pais_adquisicion] [varchar](2) NULL,
[puerto_origen] [varchar](300) NULL,
[puerto_destino] [varchar](300) NULL,
[total_flete_internacional] [decimal](14,2) NOT NULL,
[total_seguro_internacional] [decimal](14,2) NOT NULL,
[total_gastos_aduaneros] [decimal](14,2) NOT NULL,
[total_otros_gastos_transporte] [decimal](14,2) NOT NULL
)
Consulta la documentación de nuestro servicio web para obtener más información sobre cada uno de los parámetros.
Comprobantes de Retención ATS
A continuación están detalladas todas las estructuras disponibles para emitir un comprobante de retención ATS. Las únicas que deben contener información son: retenciones_ats.retencion_ats, retenciones_ats.documentos_soporte
CREATE SCHEMA retenciones_ats
DROP TABLE [retenciones_ats].[info_adicional]
DROP TABLE [retenciones_ats].[documentos_soporte]
DROP TABLE [retenciones_ats].[impuestos_documentos_soporte]
DROP TABLE [retenciones_ats].[retenciones_documentos_soporte]
DROP TABLE [retenciones_ats].[dividendos_retenciones]
DROP TABLE [retenciones_ats].[reembolsos_documentos_soporte]
DROP TABLE [retenciones_ats].[impuestos_reembolsos]
DROP TABLE [retenciones_ats].[pagos_documentos_soporte]
DROP TABLE [retenciones_ats].[retencion_ats]
CREATE TABLE [retenciones_ats].[retencion_ats](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL, -- (OPCIONAL) el ambiente se toma del archivo de configuración de Link App.
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[clave_acceso] [varchar](49) NULL,
[periodo_fiscal] [varchar](7),
[tipo_sujeto_retenido] [varchar](2) NULL,
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_matriz] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- SUJETO RETENIDO
[email_sujeto] [varchar](254) NULL,
[identificacion_sujeto] [varchar](20) NULL,
[tipo_identificacion_sujeto] [varchar](2) NULL,
[razon_social_sujeto] [varchar](200) NULL,
[direccion_sujeto] [varchar](200) NULL,
[telefono_sujeto] [varchar](200) NULL,
)
-- RETENCION ATS: INFORMACION ADICIONAL
CREATE TABLE [retenciones_ats].[info_adicional](
[id_retencion_ats] bigint NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[retencion_ats](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional_retencion_ats PRIMARY KEY (id_retencion_ats, nombre)
)
-- RETENCION ATS: DOCUMENTOS_SOPORTE
CREATE TABLE [retenciones_ats].[documentos_soporte](
-- DOCUMENTO SOPORTE
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_retencion_ats] bigint NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[retencion_ats](id),
[codigo_sustento] [varchar](2) NULL,
[tipo_documento] [varchar](2) NULL,
[numero] [varchar](17) NULL,
[fecha_emision] [DATETIME] NULL,
[fecha_registro_contable] [DATETIME] NULL,
[numero_autorizacion] [varchar](300) NULL,
[tipo_pago] [varchar](2) NULL,
[total_sin_impuestos] [DECIMAL](14,2) NOT NULL,
[total] [DECIMAL](14,2) NOT NULL,
[tipo_regimen_fiscal] [varchar](2) NULL,
[pais] [varchar](2) NULL,
[aplica_convenio] [varchar](2) NULL,
[pago_exterior] [varchar](2) NULL,
[pago_regimen_fiscal] [varchar](2) NULL,
-- DATOS REEMBOLSO
[codigo] [varchar](2) NULL,
[subtotal] [DECIMAL](14,2) NOT NULL,
[total_reembolso] [DECIMAL](14,2) NOT NULL,
[total_impuestos] [DECIMAL](14,2) NOT NULL
)
-- RETENCION ATS: IMPUESTOS DOCUMENTOS SOPORTE
CREATE TABLE [retenciones_ats].[impuestos_documentos_soporte](
[id_documento_soporte] [bigint] NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[documentos_soporte](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL,
[tarifa] [decimal](14,2) NOT NULL,
CONSTRAINT PK_impuesto_documento_soporte PRIMARY KEY (id_documento_soporte, codigo, codigo_porcentaje)
)
-- RETENCION ATS: RETENCIONES DOCUMENTOS SOPORTE
CREATE TABLE [retenciones_ats].[retenciones_documentos_soporte](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_documento_soporte] [bigint] NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[documentos_soporte](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](3) NOT NULL,
[base_imponible] [DECIMAL](14,2) NOT NULL,
[tarifa] [DECIMAL](14,2) NOT NULL,
[valor_retenido] [DECIMAL](14,2) NOT NULL
)
-- RETENCION ATS: DIVIDENDOS RETENCIONES
CREATE TABLE [retenciones_ats].[dividendos_retenciones](
[id_retencion_documento_soporte] [bigint] NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[retenciones_documentos_soporte](id),
[fecha_pago] [DATETIME] NOT NULL,
[impuesto_renta] [DECIMAL](14,2) NOT NULL,
[annio_fiscal] [bigint] NOT NULL,
CONTRAINT PK_dividendo_retencion PRIMARY KEY
(id_retencion_documento_soporte, fecha_pago, annio_fiscal)
)
-- RETENCION ATS: REEMBOLSO DOCUMENTOS SOPORTE
CREATE TABLE [retenciones_ats].[documentos_reembolso](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_documento_soporte] [bigint] NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[documentos_soporte](id),
[codigo_establecimiento] [varchar](3) NOT NULL,
[codigo_punto_emision] [varchar](3) NOT NULL,
[fecha_emision] [DATETIME] NOT NULL,
[identificacion_proveedor] [varchar](13) NOT NULL,
[numero_autorizacion] [varchar](300) NOT NULL,
[pais_origen_proveedor] [varchar](2) NOT NULL,
[secuencia] [bigint] NOT NULL,
[tipo] [varchar](2) NOT NULL,
[tipo_identificacion_proveedor] [varchar](2) NOT NULL,
[tipo_proveedor] [varchar](2) NOT NULL
)
-- RETENCION ATS: IMPUESTOS REEMBOLSO
CREATE TABLE [retenciones_ats].[impuestos_reembolsos](
[id_documento_reembolso] [bigint] NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[documentos_reembolso](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL,
[tarifa] [decimal](14,2) NOT NULL,
CONSTRAINT PK_impuesto_reembolso PRIMARY KEY (id_documento_reembolso, codigo, codigo_porcentaje)
)
-- RETENCION ATS: PAGOS DOCUMENTOS SOPORTE
CREATE TABLE [retenciones_ats].[pagos_documentos_soporte](
[id_documento_soporte] [bigint] NOT NULL FOREIGN KEY REFERENCES [retenciones_ats].[documentos_soporte](id),
[tipo_pago] [varchar](2) NOT NULL,
[total] [DECIMAL](14,2) NOT NULL,
CONSTRAINT PK_pagos_documento_soporte PRIMARY KEY (id_documento_soporte, tipo_pago)
)
Consulta la documentación de nuestro servicio web para obtener más información sobre cada uno de los parámetros.
Comprobantes de Retención
A continuación están detalladas todas las estructuras disponibles para emitir una comprobante de retención. Las únicas que deben contener información son: retenciones.retencion, retenciones.item
CREATE SCHEMA retenciones
DROP TABLE [retenciones].[item]
DROP TABLE [retenciones].[informacion_adicional]
DROP TABLE [retenciones].[retencion]
CREATE TABLE [retenciones].[retencion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[clave_acceso] [varchar](49) NULL,
[periodo_fiscal] [varchar](7),
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_matriz] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- SUJETO RETENIDO
[email_sujeto] [varchar](254) NULL,
[identificacion_sujeto] [varchar](20) NULL,
[tipo_identificacion_sujeto] [varchar](2) NULL,
[razon_social_sujeto] [varchar](200) NULL,
[direccion_sujeto] [varchar](200) NULL,
[telefono_sujeto] [varchar](200) NULL,
)
-- RETENCION: ITEMS
CREATE TABLE [retenciones].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_retencion] bigint NOT NULL FOREIGN KEY REFERENCES [retenciones].[retencion](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](5) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[fecha_emision_documento_sustento] [datetime] NULL,
[numero_documento_sustento] [varchar](17) NULL,
[tipo_documento_sustento] [varchar](2) NULL,
[porcentaje] [decimal](14,2) NULL,
[valor_retenido] [decimal](14,2) NULL,
)
-- RETENCION: INFORMACION ADICIONAL DE LA RETENCION
CREATE TABLE [retenciones].[informacion_adicional](
[id_retencion] bigint NOT NULL FOREIGN KEY REFERENCES [retenciones].[retencion](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_retencion, nombre)
)
Consulta la documentación de nuestro servicio web para obtener más información sobre cada uno de los parámetros.
Notas de Crédito
A continuación están detalladas todas las estructuras disponibles para emitir una nota de crédito. Las únicas que deben contener información son: notas_de_credito.nota_de_credito, notas_de_credito.item, notas_de_credito.item_impuesto, y notas_de_credito.total_impuesto
CREATE SCHEMA notas_de_credito
DROP TABLE [notas_de_credito].[item_impuesto]
DROP TABLE [notas_de_credito].[item_detalle_adicional]
DROP TABLE [notas_de_credito].[item]
DROP TABLE [notas_de_credito].[total_impuesto]
DROP TABLE [notas_de_credito].[informacion_adicional]
DROP TABLE [notas_de_credito].[nota_de_credito]
CREATE TABLE [notas_de_credito].[nota_de_credito](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[moneda] [varchar](15) NOT NULL,
[clave_acceso] [varchar](49),
-- DOCUMENTO MODIFICADO
[fecha_emision_documento_modificado] [datetime] NULL,
[numero_documento_sustento] [varchar](17) NULL,
[tipo_documento_modificado] [varchar](2) NULL,
[motivo] [varchar](300) NULL,
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_matriz] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- COMPRADOR
[email_comprador] [varchar](254) NULL,
[identificacion_comprador] [varchar](20) NULL,
[tipo_identificacion_comprador] [varchar](2) NULL,
[razon_social_comprador] [varchar](200) NULL,
[direccion_comprador] [varchar](200) NULL,
[telefono_comprador] [varchar](200) NULL,
-- TOTALES
[total_sin_impuestos] [decimal](14,2) NULL,
[importe_total] [decimal](14,2) NULL,
)
-- NOTA DE CRÉDITO: ITEMS
CREATE TABLE [notas_de_credito].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_nota_credito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[nota_de_credito](id),
[cantidad] [decimal](14,2) NOT NULL,
[codigo_principal] [varchar](50) NULL,
[codigo_auxiliar] [varchar](50) NULL,
[precio_unitario] [decimal](14,2) NOT NULL,
[descripcion] [varchar](300) NOT NULL,
[precio_total_sin_impuestos] [decimal](14,2) NOT NULL,
[descuento] [decimal](14,2) NULL
)
-- NOTA DE CRÉDITO: IMPUESTOS DE ITEMS
CREATE TABLE [notas_de_credito].[item_impuesto](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[item](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL,
[tarifa] [decimal](14,2) NOT NULL, -- porcentaje
CONSTRAINT PK_item_impuesto PRIMARY KEY (id_item, codigo, codigo_porcentaje)
)
-- NOTA DE CRÉDITO: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [notas_de_credito].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY (id_item, nombre)
)
-- NOTA DE CRÉDITO: IMPUESTOS TOTALES
CREATE TABLE [notas_de_credito].[total_impuesto](
[id_nota_credito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[nota_de_credito](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL
CONSTRAINT PK_total_impuesto PRIMARY KEY (id_nota_credito, codigo, codigo_porcentaje)
)
-- NOTA DE CRÉDITO: INFORMACION ADICIONAL DE LA NOTA DE CRÉDITO
CREATE TABLE [notas_de_credito].[informacion_adicional](
[id_nota_credito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[nota_de_credito](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_nota_credito, nombre)
)
Consulta la documentación de nuestro servicio web para obtener más información sobre cada uno de los parámetros.
Notas de Débito
A continuación están detalladas todas las estructuras disponibles para emitir una nota de débito. Las únicas que deben contener información son: notas_de_debito.nota_de_debito, notas_de_debito.totales_impuestos y notas_de_debito.items
CREATE SCHEMA notas_de_debito
CREATE TABLE [notas_de_debito].[nota_de_debito] (
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[moneda] [varchar](15) NOT NULL,
[clave_acceso] [varchar](49),
-- DOCUMENTO MODIFICADO
[fecha_emision_documento_modificado] [datetime] NULL,
[numero_documento_modificado] [varchar](17) NULL,
[tipo_documento_modificado] [varchar](2) NULL,
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_emisor] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- COMPRADOR
[email_comprador] [varchar](254) NULL,
[identificacion_comprador] [varchar](20) NULL,
[tipo_identificacion_comprador] [varchar](2) NULL,
[razon_social_comprador] [varchar](200) NULL,
[direccion_comprador] [varchar](200) NULL,
[telefono_comprador] [varchar](200) NULL,
-- TOTALES
[total_sin_impuestos] [decimal](14,2) NULL,
[importe_total] [decimal](14,2) NULL,
)
-- NOTA DE DÉBITO: TOTALES IMPUESTOS
CREATE TABLE [notas_de_debito].[totales_impuestos] (
[id_nota_debito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_debito].[nota_de_debito](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL,
[tarifa] [decimal](14,2) NOT NULL,
CONSTRAINT PK_total_impuesto PRIMARY KEY (id_nota_debito, codigo, codigo_porcentaje)
)
-- NOTA DE DÉBITO: ITEMS
CREATE TABLE [notas_de_debito].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_nota_debito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_debito].[nota_de_debito](id),
[cantidad] [decimal](14,2) NOT NULL,
[codigo_principal] [varchar](50) NULL,
[codigo_auxiliar] [varchar](50) NULL,
[precio_unitario] [decimal](14,2) NOT NULL,
[descripcion] [varchar](300) NOT NULL,
[precio_total_sin_impuestos] [decimal](14,2) NOT NULL,
[descuento] [decimal](14,2) NULL,
[motivo] [varchar](300) NOT NULL,
[valor] [varchar](300) NOT NULL,
)
-- NOTA DE DEBITO: INFORMACIÓN ADICIONAL
CREATE TABLE [notas_de_debito].[informacion_adicional](
[id_nota_debito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_debito].[nota_de_debito](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_nota_debito, nombre)
)
Consulta la documentación de nuestro servicio web para obtener más información sobre cada uno de los parámetros.
Guías de Remisión
A continuación están detalladas todas las estructuras disponibles para emitir una guía de remisión. Las únicas que deben contener información son: guia_remision.guia_remision, guia_remision.destinatario, guia_remision.item
CREATE SCHEMA guias_de_remision
DROP TABLE [guias_de_remision].[guia_remision]
DROP TABLE [guias_de_remision].[destinatario]
DROP TABLE [guias_de_remision].[item]
DROP TABLE [guias_de_remision].[item_detalle_adicional]
DROP TABLE [guias_de_remision].[informacion_adicional]
CREATE TABLE [guias_de_remision].[guia_remision](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_inicio_transporte] [datetime] NULL,
[fecha_fin_transporte] [datetime] NULL,
[direccion_partida] [varchar](200) NULL,
[clave_acceso] [varchar](49),
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [int] NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- TRANSPORTISTA
[email_comprador] [varchar](254) NULL,
[identificacion_comprador] [varchar](20) NULL,
[tipo_identificacion_comprador] [varchar](2) NULL,
[razon_social_comprador] [varchar](200) NULL,
[direccion_comprador] [varchar](200) NULL,
[telefono_comprador] [varchar](200) NULL,
[placa] [varchar](200) NULL
)
-- GUIA DE REMISION: DESTINATARIOS
CREATE TABLE [guias_de_remision].[destinatario](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_destinatario] bigint NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[guia_remision](id),
[email] [varchar](254) NULL,
[identificacion] [varchar](20) NULL,
[tipo_identificacion] [varchar](2) NULL,
[razon_social] [varchar](200) NULL,
[direccion] [varchar](200) NULL,
[telefono] [varchar](200) NULL,
[fecha_emision_documento_sustento] [datetime] NULL,
[numero_documento_sustento] [varchar](17) NULL,
[tipo_documento_sustento] [varchar](2) NULL,
[numero_autorizacion_documento_sustento] [varchar](300) NULL,
[ruta] [varchar](300) NULL,
[motivo_traslado] [varchar](300) NULL,
[documento_aduanero_unico] [varchar](300) NULL,
[codigo_establecimiento_destino] [varchar](3) NULL
)
-- GUIA DE REMISION: ITEMS
CREATE TABLE [guias_de_remision].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_destinatario] bigint NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[destinatario](id),
[cantidad] [decimal](14,2) NOT NULL,
[codigo_principal] [varchar](50) NULL,
[codigo_auxiliar] [varchar](50) NULL,
[descripcion] [varchar](300) NOT NULL
)
-- GUIA DE REMISION: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [guias_de_remision].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY(id_item, nombre)
)
-- GUIA DE REMISION: INFORMACION ADICIONAL DE LA GUIA DE REMISION
CREATE TABLE [guias_de_remision].[informacion_adicional](
[id_guia_remision] bigint NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[guia_remision](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_guia_remision, nombre)
)
Consulta la documentación de nuestro servicio web para obtener más información sobre cada uno de los parámetros.
Liquidaciones de Compra de Bienes y Prestación de Servicios
A continuación están detalladas todas las estructuras disponibles para emitir una liquidacion. Las únicas que deben contener información son: liquidaciones_compra.liquidacion, liquidaciones_compra.item, liquidaciones_compra.item_impuesto, liquidaciones_compra.pago, y liquidaciones_compra.total_impuesto
CREATE SCHEMA liquidaciones_compra;
CREATE TABLE [liquidaciones_compra].[liquidacion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[clave_acceso] [VARCHAR](49) NULL,
[fecha_emision] [DATETIME] NULL,
[moneda] [VARCHAR](15) NOT NULL,
[codigo_documento] [VARCHAR](2) NOT NULL,
-- EMISOR
[ruc] [VARCHAR](13) NULL,
[obligado_contabilidad] [VARCHAR](10) NULL,
[contribuyente_especial] [VARCHAR](13) NULL,
[nombre_comercial] [VARCHAR](300) NULL,
[razon_social] [VARCHAR](300) NULL,
[direccion_matriz] [VARCHAR](300) NOT NULL,
[codigo_establecimiento] [VARCHAR](3) NULL,
[punto_emision] [VARCHAR](3) NULL,
[direccion_establecimiento] [VARCHAR](300) NULL,
-- PROVEEDOR
[tipo_identificador_proveedor] [VARCHAR](2) NULL,
[razon_social_proveedor] [VARCHAR](300) NOT NULL,
[identificador_proveedor] [VARCHAR](20) NOT NULL,
[direccion_proveedor] [vARCHAR](300) NULL,
-- TOTALES
[total_sin_impuestos] [DECIMAL](14, 2) NOT NULL,
[descuento] [DECIMAL](14, 2) NOT NULL,
[importe_total] [DECIMAL](14, 2) NOT NULL,
-- REEMBOLSO
[codigo_documento_reembolso] [VARCHAR](2) NOT NULL,
[total_comprobante_reembolso] [DECIMAL](14, 2) NOT NULL,
[total_base_imponible_reembolso] [DECIMAL](14, 2) NOT NULL,
[total_impuesto_reembolso] [DECIMAL](14, 2) NOT NULL,
)
-- LIQUIDACION: ITEMS
CREATE TABLE [liquidaciones_compra].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[codigo_principal] [VARCHAR](25) NOT NULL,
[codigo_auxiliar] [VARCHAR](25) NULL,
[descripcion] [VARCHAR](300) NOT NULL,
[unidad_medida] [VARCHAR](50) NULL,
[cantidad] [DECIMAL](14,6) NOT NULL,
[precio_unitario] [DECIMAL](18,6) NOT NULL,
[descuento] [DECIMAL](14,2) NULL,
[precio_total_sin_impuestos] [DECIMAL](14,2) NOT NULL,
)
-- LIQUIDIACION: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [liquidaciones_compra].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY (id_item, nombre)
)
-- LIQUIDACION: IMPUESTOS DE ITEMS
CREATE TABLE [liquidaciones_compra].[item_impuesto](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[item](id),
[codigo] [VARCHAR](2) NOT NULL,
[codigo_porcentaje] [VARCHAR](2) NOT NULL,
[base_imponible] [DECIMAL](14,2) NOT NULL,
[valor] [DECIMAL](14,2) NOT NULL,
[tarifa] [DECIMAL](5,2) NOT NULL, -- porcentaje
CONSTRAINT PK_item_impuesto PRIMARY KEY (id_item, codigo, codigo_porcentaje)
)
-- LIQUIDACION: IMPUESTOS TOTALES
CREATE TABLE [liquidaciones_compra].[total_impuesto](
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[codigo] [VARCHAR](2) NOT NULL,
[codigo_porcentaje] [VARCHAR](2) NOT NULL,
[descuento_adicional] [DECIMAL](14, 2) NULL,
[base_imponible] [DECIMAL](14,2) NOT NULL,
[tarifa] [DECIMAL](14, 2) NOT NULL,
[valor] [DECIMAL](14,2) NOT NULL
CONSTRAINT PK_total_impuesto PRIMARY KEY (id_liquidacion, codigo, codigo_porcentaje)
)
-- LIQUIDIACION: PAGOS
CREATE TABLE [liquidaciones_compra].[pago](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[forma_pago] [VARCHAR](2) NOT NULL,
[total] [DECIMAL](14, 2) NOT NULL,
[plazo] VARCHAR(50) NOT NULL,
[unidad_tiempo] VARCHAR(50) NOT NULL
)
-- LIQUIDACION: REEMBOLSOS
CREATE TABLE [liquidaciones_compra].[reembolso](
[id_reembolso] bigint IDENTITY(1,1) PRIMARY KEY,
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[tipo_id_proveedor_reembolso] [VARCHAR](2) NOT NULL,
[id_proveedor_reembolso] [VARCHAR](20) NOT NULL,
[codigo_pais_pago_proveedor_reembolso] [VARCHAR](2) NOT NULL,
[tipo_proveedor_reembolso] [VARCHAR](2) NOT NULL,
[codigo_documento_reembolso] [VARCHAR](3) NOT NULL,
[codigo_establecimiento_reembolso] [DECIMAL](3) NOT NULL,
[punto_emision_reembolso] [VARCHAR](3) NOT NULL,
[secuencial_reembolso] [bigint] NOT NULL,
[fecha_emision_reembolso] [DATETIME] NOT NULL,
[numero_autorizacion_reembolso] [VARCHAR](49) NOT NULL
)
-- LIQUIDACION: REEMBOLSO IMPUESTOS
CREATE TABLE [liquidaciones_compra].[reembolso_tax](
[id_reembolso] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[reembolso](id_reembolso),
[codigo] [VARCHAR](2) NOT NULL,
[codigo_porcentaje] [VARCHAR](2) NOT NULL,
[tarifa] [DECIMAL](14, 2) NOT NULL,
[base_imponible] [DECIMAL](14,2) NOT NULL,
[impuesto_reembolso] [DECIMAL](14, 2) NOT NULL
)
-- LIQUIDACION: MAQUINA FISCAL
CREATE TABLE [liquidaciones_compra].[maquina_fiscal](
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[marca] [VARCHAR](100) NOT NULL,
[modelo] [VARCHAR](100) NOT NULL,
[serie] [VARCHAR](100) NOT NULL,
CONSTRAINT pk_maquina_fiscal PRIMARY KEY (id, marca)
)
-- LIQUIDACION: INFO ADICIONAL
CREATE TABLE [liquidaciones_compra].[info_adicional](
[id_liquidacion] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar(100)] NOT NULL,
CONSTRAINT pk_info_adicionales PRIMARY KEY (id_liquidacion, nombre)
)
Consulta la documentación de nuestro servicio web para obtener más información sobre cada uno de los parámetros.
Configuración
Link utiliza archivos de configuración en formato .ini que contienen todos los
parámetros que se pueden ajustar. Puesto que los archivos de configuración se
encuentran en la carpeta de C:\Archivos de Progama\Datil\Link\config
para
editarlos debes abrir siempre tu editor con permisos de administrador.
Los archivos INI están compuestos por secciones y cada sección puede tener varias claves y valores.
Base de datos
Cómo lo describimos en la sección de Introducción Link utiliza una tabla de control para mantener un registro de los documentos que ya ha procesado. Este registro contiene información como el estado, la fecha de registro en la tabla de control, la fecha y el número de autorización y el ID (id_externo) del documento en Datil.
En el archivo environment.ini va la configuración de la conexión a la base donde se encuentran las tablas de control y mensaje. En el archivo companies/my company.ini debes configurar la conexión a la base de datos donde están las tablas/vistas desde las que Link extraerá la información de los documentos.
Esta separación permite a Link funcionar en estos escenarios: - Emitir documentos de más de una compañía en un sistema ERP que almacena los documentos de cada compañía en una base de datos diferente. - Mantener la base de datos en la que puede escribir Link completamente aislada de la base de datos de la que sólo puede leer Link.
A partir de la versión 6.0.0 existen dos maneras de especificar los parámetros de conexión a la base de datos:
Simplificada
Link tiene la capacidad de construir la cadena de conexión para los siguientes drivers ODBC: SQL Anywhere 11, Microsoft ODBC for Oracle, Oracle in OraClient11g_home1, Microsoft ODBC Driver for Oracle, SQL Server y Access ODBC Driver. Si utilizas alguno de estos drivers debes especificar los siguientes parámetros:
Parámetros | |
---|---|
driver | Controlador cuando se establece una conexión por ODBC. |
server | Dirección o nombre del servidor |
name | Nombre de la base de datos |
user | Nombre de usuario. |
password | Contraseña del usuario de la base de datos |
version requerido |
Versión del motor de base de datos que se utiliza para constriur SQL dependiendo de la versión |
connection_string | Permite especificar la cadena de conexión ODBC para conectarse a la base. Si especificas este parámetro todos los otros parámetros de conexión como driver, server, name, user y password serán ignorados. Debes especificar este parámetro o el conjunto de parámetros driver, server, name, user, password. |
api requerido |
Puede ser odbc o adodb |
data_source requerido |
Utilizado para conexiones tipo adodb |
provider requerido |
Utilizado para conexiones tipo adodb |
datetime_format | Formato de la representación literal de un SQL_TIMESTAMP. Por ejemplo en SQL Server el literal de un DATETIME es %Y-%m-%d %H:%M:%S |
Cadena de conexión (connection string) explícita
La nueva manera a partir de la versión 6.0.0 de conexión sólo requiere que se
especifique el parámetro connection_string
. Así es posible utilizar cualquier
motor de base de datos o controlador no soportado por la manera simplificada de
conexión.
Esta es la manera de conexión recomendada a partir de la versión 6.0.0 de Link.
Ejemplos
Ejemplos de configuración para sistemas de base de datos más comunes
SQL Server
driver = SQL Server
server = ADMIN\SQLEXPRESS.
name = DATIL
user = link
password = Link007
version = 2012
api = odbc
datasource = None
provider = None
Oracle
[DatabaseSource]
driver = Microsoft ODBC for Oracle
server = mydbserver
name =
user = link
password = datil
version = 10
api = odbc
data_source = None
provider = None
datetime_format = %Y-%m-%d %H:%M:%S.%f'
MySQL
[DatabaseSource]
connection_string = DRIVER={MySQL ODBC 8.0 ANSI Driver};SERVER=localhost;DATABASE=datil;USER=link;PASSWORD=Link007;OPTION=3
driver =
server =
name =
user =
password =
version = 8.0
api = odbc
data_source = None
provider = None
Consulta la documentación del driver ODBC que utilizas, o busca en la sitio web www.connectionstrings.com la documentación del motor de base de datos que utilizas.
environment.ini
La configuración general de la aplicación Link-App se guardan en el archivo de configuración environment.ini
.
A continuación se describen las configuraciones de ambiente necesarias para el correcto funcionamiento de Link-app.
[General]
Parámetros | |
---|---|
timezone requerido |
Zona horaria |
issue_receipts_from_database requerido |
Habilitar la emisión de documentos desde la base de datos |
issue_receipts_from_xml requerido |
Habilitar la emisión de documentos desde archivos en formato xml |
update_control_table requerido |
Habilitar el control de los documentos emitidos desde la tabla de Control |
[DatabaseSource]
Revisa la sección de configuración de base de datos para más información
[Log]
Esta configuración permite el registro de actividades dentro de la aplicación.
Parámetros | |
---|---|
level requerido |
Nivel de los registros (En el caso de que se esté configurando por primera vez la aplicación se recomienda mantener el nivel de DEBUG )Valores posibles: INFO , DEBUG y ERROR . |
interval requerido |
Intervalo de tiempo en horas que se genera un nuevo archivo de registros |
backup_count requerido |
Cantidad de archivos de registros guardados |
[Sync]
Esta configuración hace referencia a la sincronización de documentos de forma general en la aplicación.
Parámetro | |
---|---|
enabled requerido |
Habilitar la sincronización de documentos |
update_tables | Habilitar la actualización de tablas cuando se sincronicen los documentos |
download_files | Habilitar la descarga de archivos cuando se sincronicen los documentos |
[EventTypeCodes]
Para esta configuración se debe especificar el nombre del documento con el evento y como valor se le asigna el código numérico del evento.
Ejemplo:
invoice.issued = 21
invoice.received = 11
requerido
[Scheduler]
Las tareas de emisión, consulta y sincronización se ejecutan al iniciar el servicio y luego esperan el tiempo establecido por estos parámetros antes de volver a ejecutarse. Todos estos valores se especifican en segundos.
Parámetros | |
---|---|
issue_receipts_interval requerido |
Intervalo para la tarea de emisión de documentos. |
read_receipts_interval requerido |
Intervalo para la tarea de consulta de estado de documentos. |
issue_receipts_from_xml_interval requerido |
Intervalo para la tarea de emisión por xml. |
send_status_interval requerido |
Intervalo para la tarea de reporte de estado (aun no utilizada) |
sync_resources_interval requerido |
Intervalo para la tarea de sincronización de recursos. |
[Constraints]
Restricciones para la consulta de documentos.
Parámetros | |
---|---|
issue_limit requerido |
Número máximo de documentos que la tarea de emisión de documentos toma cada vez que se ejecuta. Existe un problema conocido en bases de datos ORACLE que impide establecer este parámetro en un valor diferente a uno. |
issue_order requerido |
Determina el ordenamiento de los documentos consultados para emitir. Puede ser ASC o DESC |
get_info_limit requerido |
Número máximo de documentos que la tarea de consulta de estado de documentos toma cada vez que se ejecuta. |
get_info_order requerido |
Determina el ordenamiento de los documentos consultados para obtener su estado. Puede ser ASC o DESC |
first_receipt_date requerido |
Establece la fecha a partir de la cual necesitas emitir documentos. La fecha debe tener el formato YYYY-mm-dd hh:MM:SS ejemplo: 2002-09-12 13:40:00 para el 12 de septiembre del año 2002 a las trece horas con cuarenta minutos y cero segundos. |
max_days_to_query requerido |
El número máximo de días previos a consultar a partir de la fecha actual. Normalmente se configura con 30 puesto que es el límite de fecha de emisión establecido por el SRI para emitir un documento electrónico. |
new_receipts_limit requerido |
Número máximo de documentos que la tarea de control inserta a la tabla de Control cada vez que se ejecuta. |
companies/my_company.ini
Recomendamos renombrar este archivo con un nombre
corto de tu empresa, sobretodo si vas a utilizar una instalación de Link para
varias empresas. Link utiliza el nombre de este archivo para garantizar que los
registros en la tabla de control sean únicos para cada compañía, esto es lo
que verás en el campo company_name
una vez que Link empiece a funcionar e
inserte registros en la tabla de control.
Utiliza sólo letras, números, guiones o sub-guiones para el nombre del archivo.
Ejemplo: acme_inc
[General]
En la sección [General]
configura el parámetro ruc
con el ruc de la empresa.
Parámetros | |
---|---|
enabled requerido |
Habilitar la emisión de documentos para la compañía |
ruc requerido |
RUC de la compañía que emitirá los documentos |
[Api]
En la sección [Api]
configuran los siguientes parámetros:
Parámetro | Tipo | Descripción |
---|---|---|
xkey requerido |
string | API Key para emitir documentos. Esta información se encuentra en la configuración de la compañía en el portal web |
xpassword requerido |
string | Contraseña del certificado de firma electrónica |
environment requerido |
integer | Pruebas: 1 .Producción 2 . |
[IssueFromDatabase]
Los parámetros de esta sección te permiten encender o apagar la tarea de emisión
desde la base de datos para cada tipo de comprobante para esta compañía. Los
posibles valores para estos parámetros son yes
o no
. El valor yes
le
indica a Link que debe encender la tarea y no
que debe apagarla.
Ejemplo: credit_note = yes
[IssueFromXml]
Estos parámetros permiten encender o apagar la tarea de emisión por xml desde archivos con el formato XML para cada tipo de comprobante para esta compañía. Los posibles valores para estos parámetros son yes
o no
. El valor yes
le
indica a Link que debe encender la tarea y no
que debe apagarla.
Ejemplo: invoice = yes
[Read]
Estos parámetros permiten encender o apagar la tarea de consulta de autorización.
[DatabaseSource]
Revisa la sección de configuración de base de datos para más información.
[XmlSource]
Configuración de las rutas de los directorios donde se encuentran los archivos
XML. Esto aplica para la emisión por XML. Para esta configuración se debe especificar el nombre del documento y como valor se le asigna la ruta en la que se encuentra el tipo de documento.
Ejemplo: invoice = C:\\Program Files\Facturas
[XmlSourcePattern]
Configuración del patrón del nombre de los archivos XML que contienen la información de los documentos a emitirse. Para esta configuración se debe especificar el nombre del documento y como valor la asignación del prefijo asociado al archivo XML.
Ejemplo: invoice = FA
Sincronización y Eventos
Link tiene la habilidad de suscribirse a eventos emitidos por Datil y ejecutar sentencias SQL y descargar archivos. Cualquier atributo del evento que contenga la dirección a un recurso (URI) válido puede ser descargado y almacenado en un directorio del sistema.
El nombre de la sección para cada configuración es el nombre del evento, de esta manera podrás tener configuraciones diferentes para cada evento.
Estos son los parámetros de configuración para cada evento:
Parámetros | |
---|---|
download_files requerido |
Activa o inactiva el proceso de descarga de archivos. Puede ser yes o no |
update_tables requerido |
Activa o inactiva el proceso de ejecución de SQL. Puede ser yes o no |
formats_to_download requerido |
Especifica este valor si download_files está activo. Puede ser una lista de valores separados por coma o la palabra reservada all. Si utilizas la palabra all intentará descargar los archivos detallados en este mismo parámetro en la sección [Sync] del archivo environment.ini |
download_path | Ruta del directorio donde se descargará los archivos. Requerido si download_files está activo. |
download_path_[ATRIBUTO] | Ruta del directorio donde se descargarán los archivos para el atributo "ATRIBUTO". Puedes personalizar esta ruta utilizando condicionales, lazos, macros, bloques, variables, etiquetas disponibles en Jinja2. |
update_tables_sentences | Sentencias SQL a ejecutar cuando el evento sea recibido. Puedes personalizar este SQL utilizando condicionales, lazos, macros, bloques, variables disponibles en Jinja2. Requerido si update_tables está activo. |
Ejemplo de descarga en un solo directorio
[invoice.received]
download_files = yes
update_tables = yes
formats_to_download = printable_version_url, electronic_document_url
download_path = C:/Documentos Recibidos/
update_tables_sentences = UPDATE factura
SET numero_autorizacion = '{{ authorization.number }}'
WHERE numero = '{{ number }}'
De esta manera podrías, por ejemplo, actualizar información en una tabla de tu
base de datos y descargar el PDF (printable_version_url
) y el documento
electrónico XML (electronic_document_url
) cada vez que en tu cuenta Dátil
recibas una factura de compra (invoice.received). La configuración luciría así:
Ejemplo de descarga con un directorio diferente para cada archivo
[invoice.received]
download_files = yes
update_tables = yes
formats_to_download = printable_version_url, electronic_document_url
download_path_printable_version_url = C:/Documentos Recibidos/{{ issue_date_date.year }}/{{ issue_date_month_name }}/pdf/
download_path_electronic_document_url = C:/Documentos Recibidos/{{ issue_date_date.year }}/{{ issue_date_month_name }}/xml/
update_tables_sentences = UPDATE factura
SET numero_autorizacion = '{{ authorization.number }}'
WHERE numero = '{{ number }}'
Si quisieras almacenar los archivos en directorios separados podrías configurar el evento de esta manera.
Actualización de estados
Link es capaz de ejecutar sentencias SQL basado en el estado de autorización del comprobante. Se puede de configurar el query on_status_update
dentro del archivo de configuración del comprobante para almacenar información de autorización u otra información que se desee del documento en la base de datos. Este query se ejecutará cada vez que el comprobante esté en estado POR AUTORIZAR
y RECIBIDO
.
Ejemplo para guardar información de autorización para facturas
on_status_update=INSERT INTO dbo.RESPUESTA_SRI_FACTURAS (
id,
numero_documento,
clave_acceso,
fecha_autorizacion
) VALUES (
{{ id }},
{{ autorizacion.numero }},
{{ clave_acceso }},
{{ autorizacion.fecha }}
)
Operación
En el menú Inicio
buscar el Simbolo del Sistema
, darle click derecho y escoger la opción Ejecutar como administrador
.
Luego para iniciar el servicio ejecutar el comando:
net start datilink
Enter.
Si desea detener el servicio, ejecutar:
net stop datilink
Actualización
Para actualizar el programa Link de Dátil
- Abra el terminal de windows y detenga el servicio:
net stop datilink
- Respalde la carpeta de configuración
config
Windows: C:\Archivos de Programa\Datil\Link\config
.
- Doble click en el desinstalador:
Windows: C:\Archivos de Programa\Datil\Link\unins
Dentro del directorio de instalación solo debe quedar la carpeta logs
. Si otro
archivo o carpeta sigue existiendo, borrarlo.
Instalar la nueva versión ejecutando el instalador de Link
Reemplazar la carpeta config recién instalada con la carpeta config respaldada previamente
Iniciar el servicio con el comando:
net start datilink
Configuración avanzada
Tablas o Vistas
Para que la aplicación Link se conecte a su ERP o sistema contable se deben configurar los queries para extraer información directamente de las tablas de su base de datos.
Si no desea que Link consulte directamente sus tablas puede crear vistas con la información de los comprobantes a emitir.
Formato
Los queries se guardan siguiendo el formato de archivos .ini
. en el directorio
C:/Archivos de Programa/Datil/Link/config/.
En cada archivo .ini
cada query está asignado a una variable.
Si aún no ha instalado Link, puede crear un archivo .ini
de respaldo con los queries configurados.
Ver ejemplos de archivos de configuración
Nombres de tablas y columnas
Sea directamente o por medio de vistas, dependiendo de su sistema, deberá cambiar los nombres de las tablas al configurar los queries.
Los nombres de las columnas en las tablas de su sistema pueden ser distintos pero el resultado de cada query debe tener los nombres establecidos en esta documentación.
Queries opcionales
Algunos queries son opcionales porque la información que extraen no es obligatoria para el SRI, en este caso la variable que se configura en el archivo .ini
debe tener asignada el valor de None
.
Ejemplo:
invoice_additional_information = None
item_details = None
Facturas
Los queries para la emisión electrónica de facturas se guardan en el archivo de configuración invoice.ini
.
Ejemplo de archivo invoice.ini
Cabecera
Obtiene información de la cabecera de la factura.
headers = SELECT
id_factura id_local,
secuencial,
fecha_emision,
guia_remision,
moneda,
clave_acceso,
tipo_emision
FROM
DocElectronicoFactura.cabecera
WHERE
info.id_factura in (:sequence)
ORDER BY id_factura :order
Campo | Tipo | Descripción |
---|---|---|
id_local | int o string | Identifica de manera única la factura. Requerido |
secuencial | string | Número de secuencia de la factura. Requerido |
fecha_emision | datetime | Fecha de emisión Requerido |
guia_remision | string | Número de guía de remisión asociada a esta factura en formato 001-002-000000003 ([0-9]{3}-[0-9]{3}-[0-9]{9}) |
moneda | string | Código ISO de la moneda. Requerido |
clave_acceso | string | La clave de acceso representa un identificador único del comprobante. Si esta información no es provista, Dátil la generará. ¿Cómo generar la clave de acceso? |
tipo_emision | integer | Emisión normal: 1 .Emisión por indisponibilidad: 2 Requerido |
Emisor
Obtiene información del vendedor en la factura
invoice_seller = SELECT
ruc,
obligado_contabilidad,
contribuyente_especial,
nombre_comercial,
razon_social,
direccion_establecimiento,
direccion_emisor,
codigo,
punto_emision
FROM
DocElectronicoFactura.cabecera
WHERE
id_factura = ?
Campo | Tipo | Descripción |
---|---|---|
ruc | string | Número de RUC de 13 caracteres. Requerido |
obligado_contabilidad | string | 'SI' si está obligado a llevar contabilidad. 'NO' si no lo está. |
contribuyente_especial | string | Número de resolución. En blanco '' si no es contribuyente especial. |
nombre_comercial | string | Nombre comercial. Máximo 300 caracteres Requerido |
razon_social | string | Razón social. Máximo 300 caracteres Requerido |
direccion_establecimiento | string | Dirección registrada en el SRI. Máximo 300 caracteres. Requerido |
direccion_emisor | string | Dirección del punto de emisión. Máximo 300 caracteres. Requerido |
codigo | string | Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001 Requerido |
punto_emision | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001 . Requerido |
Comprador
Obtiene información del comprador en la factura
invoice_buyer = SELECT
identificacion,
tipo_identificacion,
razon_social,
direccion,
email,
telefono
FROM
FROM
DocElectronicoFactura.cabecera
WHERE
id_factura = ?
Campo | Tipo | Descripción |
---|---|---|
razon_social | string | Razón social. Máximo 300 caracteres. Requerido |
identificacion | string | De 5 a 20 caracteres. Requerido |
tipo_identificacion | string | Ver tabla de tipos de identificación Requerido |
string | Correo electrónico. Máximo 300 caracteres. Requerido | |
telefono | string | Teléfono |
direccion | string | Dirección |
Totales
Obtiene información de los valores totales de la facturas
invoice_totals = SELECT
total_sin_impuestos,
importe_total,
propina,
descuento
FROM
DocElectronicoFactura.cabecera
WHERE
id_factura = ?
Campo | Tipo | Descripción |
---|---|---|
total_sin_impuestos | float | Total antes de los impuestos. Requerido |
importe_total | float | Total incluyendo impuestos. Requerido |
propina | float | Propina total, llamado también servicio. Requerido |
descuento | float | Suma de los descuentos de cada ítem y del descuento adicional. Requerido |
Impuestos de totales
Obtiene información de los impuestos de los totales de la factura
invoice_totals_taxes = SELECT
codigo,
codigo_porcentaje,
base_imponible,
valor
FROM
DocElectronicoFactura.totales_impuestos
WHERE
id_factura = ?
Campo | Tipo | Descripción |
---|---|---|
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
Items
Obtiene todos los items de una factura
items = SELECT
id_detalle,
codigo_principal,
codigo_auxiliar,
descripcion,
cantidad,
precio_unitario,
descuento,
precio_total_sin_impuestos,
unidad_medida
FROM
DocElectronicoFactura.items
WHERE
id_factura = ?
Campo | Tipo | Descripción |
---|---|---|
id_detalle | string | Identifica de manera única el ítem o detalle de la factura. Si no hay un solo campo que lo identifique de manera única se debe usar la concatenación de varios.Requerido |
codigo_principal | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. Requerido |
codigo_auxiliar | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. |
descripcion | string | Descripción del ítem. Requerido |
cantidad | float | Cantidad de items. Requerido |
precio_unitario | float | Precio unitario. Requerido |
descuento | float | El descuento es aplicado por cada producto. Requerido |
precio_total_sin_impuestos | float | Precio antes de los impuestos. Se obtiene multiplicando la cantidad por el precio_unitario Requerido |
unidad_medida | string | Unidad de medida. Ejemplo: Kilos. Requerido para facturas de exportación |
Impuestos de items
Obtiene los impuestos de un item. Este query es opcional
item_taxes = SELECT
base_imponible,
valor,
tarifa,
codigo,
codigo_porcentaje
FROM
DocElectronicoFactura.items_impuestos
WHERE
id_detalle = ?
Campo | Tipo | Descripción |
---|---|---|
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
tarifa | float | Porcentaje actual del impuesto expresado por un número entre 0.0 y 100.0 Requerido |
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
Detalles adicionales de items
Obtiene los detalles adicionales de un ítem. Este query es opcional.
Los detalles adicionales de un ítem se manejan de la forma 'Clave':'Valor'. Ejemplo: 'Peso':'Kg'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con detalles adicionales del ítem:
columna_de_nombres | columna_de_valores |
---|---|
Peso | KG |
Color | Rojo |
Caducidad | 10 días |
item_details = SELECT
columna_de_nombres nombre,
columna_de_valores valor
FROM
DocElectronicoFactura.items_detalles_adicionales
WHERE
id_detalle = ?
Campo | Tipo | Descripción |
---|---|---|
nombre | string | Nombre del detalle adicional del ítem |
valor | string | Valor del detalle adicional del ítem |
Información adicional
Obtiene la información adicional de la factura. Este query es opcional
La información adicional de la factura se maneja de la forma 'Clave':'Valor'. Ejemplo: 'Tipo de pago':'Cheque'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con información adicional de la factura:
columna_de_nombres | columna_de_valores |
---|---|
Tipo de servicio | Avanzado |
Forma de pago | Cheque |
Periodo | 3 meses |
invoice_additional_information = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoFactura.informacion_adicional
WHERE
id_factura = ?
Campo | Tipo | Descripción |
---|---|---|
_nombre_ |
string | Nombre de la información adicional de la factura |
_valor_ |
string | Valor de la información adicional de la factura |
Pagos
Obtiene la información de los pagos aplicables a la factura.
payment_methods = SELECT
id_pago,
medio_pago medio,
total_pago total
FROM
DocElectronicoFactura.pagos
WHERE
id_factura = ?
Parámetro | Tipo | Descripción |
---|---|---|
id_pago | -- | Identificador único del pago, se usa para obtener las [propiedades |
del pago](Propiedades de Pagos), si no hay un identificador único del pago o no hay propiedades de pagos, se debe devolver el id_factura. medio | string | Código del tipo de forma de pago. Requerido total | float | Total aplicable a la forma de pago especificada. Requerido
Propiedades de Pagos
Obtiene la propiedades de los pagos de determinada factura. Este query es opcional
Las propiedades de los pagos se manejan de la forma 'Clave':'Valor'. Ejemplo: 'Plazo':'5'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con propiedades de los pagos:
columna_de_nombres | columna_de_valores |
---|---|
plazo | 9 |
unidad_tiempo | dias |
payment_method_properties = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoFactura.propiedades_pagos
WHERE
id_pago = ?
Campo | Tipo | Descripción |
---|---|---|
_nombre_ |
string | Nombre de la propiedad del pago |
_valor_ |
string | Valor de la propiedad del pago |
Para el Servicio de Rentas Internas de Ecuador (SRI), las únicas propiedades que se tomarán en cuenta son plazo
(especifica el plazo del tipo de pago) y unidad_tiempo
(especifica la unidad de tiempo en la cual se expresa el plazo).
Las demás propiedades que se especifiquen se registrarán en Dátil como parte del pago, pero no se reportarán al SRI.
Crédito
Crédito otorgado en la venta. Este query es opcional , en caso de que todos los pagos se realizan en el momento de la venta, es decir no hay crédito.
Campo | Tipo | Descripción |
---|---|---|
fecha_vencimiento | string | Fecha de vencimiento en formato AAAA-MM-DD, definido en el estándar ISO8601. Requerido |
monto | float | Monto otorgado de crédito. Requerido |
invoice_credit = SELECT
monto,
fecha_vencimiento
FROM
facturas.credito
WHERE
id_factura = ?
Compensación solidaria
Descuento otorgado a las provincias de Manabí y Esmeraldas. Obligatorio solo para estas provincias.
Campo | Tipo | Descripción |
---|---|---|
codigo | int | Código del porcentaje de IVA . Requerido |
tarifa | int | Porcentaje de compensación. Requerido |
valor | float | Valor de la compensación. Requerido |
invoice_compensation = SELECT
codigo,
tarifa,
valor
FROM
facturas.compensacion
WHERE
id_factura = ?
Exportación
Obligatorio solo para facturas de exportación
Campo | Tipo | Descripción |
---|---|---|
incoterm_termino | string | Código de 3 letras correspondiente al Incoterm . Requerido |
incoterm_lugar | string | Lugar Incoterm . Requerido |
incoterm_total_sin_impuestos | string | Total sin impuestos pagado por el incoterm. Requerido |
codigo_pais_origen | string | Código de dos letras del país origen según ISO_3166 . Requerido |
codigo_pais_destino | string | Código de dos letras del país origen según ISO_3166 |
codigo_pais_adquisicion | string | Código de dos letras del país origen segúnISO_3166 |
puerto_origen | string | Puerto de origen. Requerido |
puerto_destino | string | Puerto de destino. Requerido |
total_flete_internacional | float | Total del flete internacional |
total_seguro_internacional | float | Total del seguro internacional |
total_gastos_aduaneros | float | Total de los gastos aduaneros |
total_otros_gastos_transporte | float | Total de otros gastos de transporte |
invoice_export = SELECT
incoterm_termino,
incoterm_lugar,
incoterm_total_sin_impuestos,
codigo_pais_origen,
codigo_pais_destino,
codigo_pais_adquisicion,
puerto_origen,
puerto_destino,
total_flete_internacional,
total_seguro_internacional,
total_gastos_aduaneros,
total_otros_gastos_transporte,
FROM
facturas.exportacion
WHERE
id_factura = ?
Tablas recomendadas
Estructura recomendada para las tablas o vistas con información de la factura.
Ejemplo en SQL Server:
CREATE SCHEMA facturas
DROP TABLE [facturas].[pago_propiedad]
DROP TABLE [facturas].[pago]
DROP TABLE [facturas].[item_impuesto]
DROP TABLE [facturas].[item_detalle_adicional]
DROP TABLE [facturas].[item]
DROP TABLE [facturas].[total_impuesto]
DROP TABLE [facturas].[informacion_adicional]
DROP TABLE [facturas].[factura]
CREATE TABLE [facturas].[factura](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL, -- (OPCIONAL) el ambiente se toma del archivo de configuración de Link App.
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[moneda] [varchar](15) NOT NULL, -- USD para dólares
[guia_remision] [varchar](17),
[clave_acceso] [varchar](49) NULL,
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_matriz] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- COMPRADOR
[email_comprador] [varchar](254) NULL,
[identificacion_comprador] [varchar](20) NULL,
[tipo_identificacion_comprador] [varchar](2) NULL,
[razon_social_comprador] [varchar](200) NULL,
[direccion_comprador] [varchar](200) NULL,
[telefono_comprador] [varchar](200) NULL,
-- TOTALES
[total_sin_impuestos] [decimal](14,2) NULL,
[importe_total] [decimal](14,2) NULL,
[propina] [decimal](14,2) NULL,
[descuento] [decimal](14,2) NULL,
[descuento_adicional] [decimal](14,2) NULL,
-- CREDITO
[monto_credito] [decimal](14,2) NULL,
[fecha_vencimiento_credito] [date] NULL,
-- VALORES RETENIDOS
[valor_retenido_iva] [decimal](14,2) NULL,
[valor_retenido_renta] [decimal](14,2) NULL,
)
-- FACTURA: ITEMS
CREATE TABLE [facturas].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[cantidad] [decimal](14,2) NOT NULL,
[codigo_principal] [varchar](50) NULL,
[codigo_auxiliar] [varchar](50) NULL,
[precio_unitario] [decimal](14,2) NOT NULL,
[descripcion] [varchar](300) NOT NULL,
[precio_total_sin_impuestos] [decimal](14,2) NOT NULL,
[descuento] [decimal](14,2) NULL,
[unidad_medida] [varchar](50) NULL
)
-- FACTURA: IMPUESTOS DE ITEMS
CREATE TABLE [facturas].[item_impuesto](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [facturas].[item](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL,
[tarifa] [decimal](14,2) NOT NULL, -- porcentaje
CONSTRAINT PK_item_impuesto PRIMARY KEY (id_item, codigo, codigo_porcentaje)
)
-- FACTURA: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [facturas].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [facturas].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY (id_item, nombre)
)
-- FACTURA: IMPUESTOS TOTALES
CREATE TABLE [facturas].[total_impuesto](
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL
CONSTRAINT PK_total_impuesto PRIMARY KEY (id_factura, codigo, codigo_porcentaje)
)
-- FACTURA: INFORMACION ADICIONAL DE LA FACTURA
CREATE TABLE [facturas].[informacion_adicional](
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_factura, nombre)
)
-- FACTURA: PAGOS
CREATE TABLE [facturas].[pago](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[fecha] [datetime] NOT NULL,
[medio] [varchar](100) NOT NULL,
[notas] [varchar](max) NOT NULL,
[monto] [decimal](14, 2) NOT NULL
)
-- FACTURA: PROPIEDADES DE PAGOS
CREATE TABLE [facturas].[pago_propiedad](
[id_pago] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[pago](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL,
CONSTRAINT PK_pago_propiedad PRIMARY KEY (id_pago, nombre)
)
-- FACTURA: CREDITO
CREATE TABLE [facturas].[credito](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[monto] [decimal](14,2) NOT NULL,
[fecha_vencimiento] [varchar](10) NOT NULL
)
-- FACTURA: COMPENSACION SOLIDARIA
CREATE TABLE [facturas].[compensacion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[codigo] [int] NOT NULL,
[tarifa] [int] NOT NULL,
[valor] [decimal](14,2) NOT NULL
)
-- FACTURA: EXPORTACION
CREATE TABLE [facturas].[exportacion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_factura] bigint NOT NULL FOREIGN KEY REFERENCES [facturas].[factura](id),
[incoterm_termino] [varchar](10) NULL,
[incoterm_lugar] [varchar](300) NULL,
[incoterm_total_sin_impuestos] [varchar](10) NOT NULL,
[codigo_pais_origen] [varchar](2) NULL,
[codigo_pais_destino] [varchar](2) NULL,
[codigo_pais_adquisicion] [varchar](2) NULL,
[puerto_origen] [varchar](300) NULL,
[puerto_destino] [varchar](300) NULL,
[total_flete_internacional] [decimal](14,2) NOT NULL,
[total_seguro_internacional] [decimal](14,2) NOT NULL,
[total_gastos_aduaneros] [decimal](14,2) NOT NULL,
[total_otros_gastos_transporte] [decimal](14,2) NOT NULL
)
Comprobantes de Retención ATS
Los queries para la emisión electrónica de comprobantes de retención ats se guardan en el archivo de configuración
ats_retention.ini
.
Ejemplo de archivo ats_retention.ini
Retención ATS
Obtiene información de la información principal de la retención ats.
headers = SELECT
id id_local,
tipo_emision,
secuencial,
fecha_emision,
clave_acceso,
periodo_fiscal
FROM
retenciones_ats.retencion_ats
WHERE retenciones_ats.retencion_ats.id in (:sequence)
ORDER BY fecha_emision :order
Campo | Descripción | Valor de ejemplo |
---|---|---|
id_local | integer | Identifica de manera única la retención ats. Requerido |
secuencial | string | Número de secuencia de la retención ats. Requerido |
fecha_emision | datetime | Fecha de emisión Requerido |
clave_acceso | string | La clave de acceso representa un identificador único del comprobante. Si esta información no es provista, Dátil la generará. ¿Cómo generar la clave de acceso? |
tipo_emision | integer | Emisión normal: 1 .Emisión por indisponibilidad: 2 Requerido |
periodo_fiscal | string | Mes y año en el siguiente formato MM/AAAA. Ejm: 12/2015 Requerido |
Emisor
Obtiene la información del vendedor de la retención ats
issuer = SELECT
ruc,
obligado_contabilidad,
contribuyente_especial,
nombre_comercial,
razon_social,
direccion_establecimiento,
direccion_matriz,
codigo_establecimiento,
punto_emision
FROM
retenciones_ats.retencion_ats
WHERE
id = ?
Campo | Tipo | Descripción |
---|---|---|
ruc | string | Número de RUC de 13 caracteres. Requerido |
obligado_contabilidad | string | 'SI' si está obligado a llevar contabilidad. 'NO' si no lo está. |
contribuyente_especial | string | Número de resolución. En blanco '' si no es contribuyente especial. |
nombre_comercial | string | Nombre comercial. Máximo 300 caracteres Requerido |
razon_social | string | Razón social. Máximo 300 caracteres Requerido |
direccion_establecimiento | string | Dirección registrada en el SRI. Máximo 300 caracteres. Requerido |
direccion_matriz | string | Dirección del punto de emisión. Máximo 300 caracteres. Requerido |
codigo_establecimiento | string | Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001 Requerido |
punto_emision | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001 . Requerido |
Sujeto
Obtiene información del sujeto retenido en la retención
retention_recipient = SELECT
identificacion_sujeto,
tipo_identificacion,
razon_social,
direccion_sujeto,
email_sujeto,
telefono_sujeto
FROM
retenciones_ats.retencion_ats
WHERE
id = ?
Campo | Tipo | Descripción |
---|---|---|
identificacion_sujeto | string | De 5 a 20 caracteres. Requerido |
tipo_identificacion | string | Ver tabla de tipos de identificación Requerido |
razon_social | string | Razón social. Máximo 300 caracteres. Requerido |
direccion_sujeto | string | Dirección |
email_sujeto | string | Correo electrónico. Máximo 300 caracteres. |
telefono_sujeto | string | Teléfono |
Información Adicional de la Retención ATS
Información adicional adjunta al documento. Es utilizada para especificar cualquier detalle que no pueda ser descrito con los elementos que son parte del documento.
additional_information = SELECT
nombre,
valor
FROM
retenciones_ats.info_adicional
WHERE
id_retencion_ats = ?
Parámetro | Tipo | Descripción |
---|---|---|
nombre | string | Máximo 300 caracteres. Requerido |
valor | string | Máximo 300 caracteres. Requerido |
Documentos Soporte
Obtiene toda la información de los documentos de soporte de una retención ats
support_documents = SELECT
codigo_sustento,
tipo_documento,
numero,
fecha_emision,
numero_autorizacion,
total_sin_impuestos,
total
FROM
retenciones_ats.documentos_soporte
WHERE
id_retencion_ats = ?
Campo | Tipo | Descripción |
---|---|---|
codigo_sustento | string | Ver (tabla)(#tipos-de-sustento-de-comprobantes) de tipos de sustento de los comprobantes. Máximo 2 caracteres. Requerido |
tipo_documento | string | Ver códigos de tipos de documentos. Máximo 2 caracteres. Requerido |
numero | string | Número completo del documento asociado a la retención ATS. Máximo 17 caracteres. Requerido |
fecha_emision | string | Fecha de emisión en formato AAAA-MM-DDHoraZonaHoraria, definido en el estándar ISO8601. Requerido |
numero_autorización | string | Número de autorización del comprobante de venta. Máximo 300 caracteres. Requerido |
total_sin_impuestos | string | Total antes de los impuestos. Requerido |
total | string | Total incluyendo impuestos. Requerido |
Impuestos de Documentos de Soporte
Obtiene la información de los impuestos de un documento de soporte. Este query es opcional
taxes = SELECT
codigo,
codigo_porcentaje,
base_imponible,
valor,
tarifa
FROM
retenciones_ats.impuestos_documentos_soporte
WHERE
id_documento_soporte = ?
Campo | Tipo | Descripción |
---|---|---|
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
tarifa | float | Porcentaje actual del impuesto expresado por un número entre 0.0 y 100.0 Requerido |
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
Retenciones de Documentos de Soporte
Obtiene la información de los impuestos retenidos de un documento de soporte.
taxes_support_documents = SELECT
codigo,
codigo_porcentaje,
base_imponible,
tarifa,
valor_retenido
FROM
retenciones_ats.retenciones_documentos_soporte
WHERE
id_documento_soporte = ?
Campo | Tipo | Descripción |
---|---|---|
base_imponible | float | Suma de las bases imponibles de cada item para el tipo de impuesto y porcentaje. Requerido |
valor_retenido | float (hasta 2 cifras decimales) | Valor del impuesto. Requerido |
tarifa | float (hasta 2 cifras decimales) | Porcentaje actual del impuesto. Requerido |
codigo | string | Código del tipo de impuesto para la retención en la factura. Requerido |
codigo_porcentaje | string | Código del porcentaje del impuesto. Requerido |
Dividendos de Documentos de Soporte
Obtiene la información de los dividendos asociados a un documento de soporte.
dividends = SELECT
impuesto_renta,
fecha_pago,
annio_fiscal
FROM
retenciones_ats.dividendos_retenciones
WHERE
id_documento_soporte = ?
Campo | Tipo | Descripción |
---|---|---|
fecha_pago | string | Fecha de pago en formato AAAA-MM-DDHoraZonaHoraria, definido en el estándar ISO8601. Requerido |
impuesto_renta | string | Impuesto a la Renta pagado por la sociedad correspondiente al dividendo Requerido |
annio_fiscal | integer | Año en que se generaron las utilidades atribuibles al dividendo. Requerido |
Reembolso de Documentos de Soportes
Información del reembolso de un documento de soporte
reimbursement = SELECT
codigo,
subtotal,
total,
total_impuestos
FROM
retenciones_ats.documentos_soporte
WHERE
id_retencion_ats = ?
Campo | Tipo | Descripción |
---|---|---|
codigo | string | Código del tipo de documento de reembolso equivalente a 41. Requerido |
subtotal | float | Sumatoria de los subtotales de los documentos. Requerido |
total_impuestos | float | Sumatoria de los totales de impuestos de los documentos. Requerido |
total | float | Subtotal más total de impuestos. Requerido |
Documentos de Reembolso
Información de los documentos de reembolso
reimbursement_documents = SELECT
codigo_establecimiento,
codigo_punto_emision,
secuencia,
fecha_emision,
identificacion_proveedor,
tipo_identificacion_proveedor,
numero_autorizacion,
pais_origen_proveedor,
tipo,
tipo_proveedor
FROM
retenciones_ats.reembolsos_documentos_soporte
WHERE
id_reembolso = ?
Parámetro | Tipo | Descripción |
---|---|---|
codigo_establecimiento | string | Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001. Requerido |
codigo_punto_emision | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001.. Requerido |
secuencia | integer (min. 1 - max. 999999999 ) | Número de secuencia del documento. Requerido |
fecha_emision | string | Fecha de emisión en formato AAAA-MM-DDHoraZonaHoraria, definido en el estándar ISO8601. Requerido |
identificacion_proveedor | string | Identificación del proveedor. De 5 a 20 caracteres. Requerido |
tipo_identificacion_proveedor | string | Ver tabla de tipos de identificación Requerido |
numero_autorizacion | string | Número de autorización del documento. 10, 37 o 49 caracteres. Requerido |
pais_origen_proveedor | string | Código de dos caracteres del país origen según ISO_3166. Requerido |
tipo | string | Código de tipos de documentos. Requerido |
tipo_proveedor | string | Código de tipo de proveedor de reembolso. Requerido |
Impuestos de Reembolsos de los Documentos de Soporte
Información de los impuestos de los reembolsos de un documento de soporte.
reimbursement_taxes = SELECT
codigo,
codigo_porcentaje,
base_imponible,
valor,
tarifa
FROM
retenciones_ats.impuestos_reembolsos
WHERE
id_reembolso_documentos = ?
Campo | Tipo | Descripción |
---|---|---|
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
tarifa | float | Porcentaje actual del impuesto expresado por un número entre 0.0 y 100.0 Requerido |
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
Pagos de Documentos de Soporte
Información de los pagos asociados a un documento de soporte.
support_documents_payments = SELECT
tipo_pago,
total
FROM
retenciones_ats.pagos_documentos_soporte
WHERE
id_documento_soporte = ?
Notas de crédito
Los queries para la emisión electrónica de notas de crédito se guardan en el archivo de configuración credit_note.ini
.
Ejemplo de archivo credit_note.ini
Cabecera
Obtiene información de la cabecera de la nota de crédito
headers = SELECT
id_nota_credito id_local,
secuencial,
fecha_emision,
moneda,
clave_acceso,
tipo_emision,
fecha_emision_documento_modificado,
numero_documento_modificado,
tipo_documento_modificado,
motivo
FROM
DocElectronicoNotaCredito.cabecera
WHERE
id_nota_credito in (:sequence)
ORDER BY id_nota_credito :order
Campo | Descripción | Valor de ejemplo |
---|---|---|
id_local | int o string | Identifica de manera única la nota de crédito. Requerido |
secuencial | string | Número de secuencia de la nota de crédito. Requerido |
fecha_emision | datetime | Fecha de emisión Requerido |
moneda | string | Código ISO de la moneda. Requerido |
clave_acceso | string | La clave de acceso representa un identificador único del comprobante. Si esta información no es provista, Dátil la generará. ¿Cómo generar la clave de acceso? |
tipo_emision | integer | Emisión normal: 1 .Emisión por indisponibilidad: 2 Requerido |
fecha_emision_documento_modificado | datetime | Fecha de emisión en formato AAAA-MM-DDHoraZonaHoraria del documento modificado, definido en el estándar ISO8601. Requerido |
numero_documento_modificado | string | Número completo del documento que se está afectando. Normalmente facturas. Ejm: 001-002-010023098 Requerido |
tipo_documento_modificado | string | Códigos de tipos de documentos. Requerido |
motivo | string | Motivo de la operación. Ejm: Devolución de producto. Requerido |
Vendedor
Obtiene información del vendedor en la nota de crédito
credit_note_seller = SELECT
ruc,
obligado_contabilidad,
contribuyente_especial,
nombre_comercial,
razon_social,
direccion_establecimiento,
direccion_emisor,
codigo,
punto_emision
FROM
DocElectronicoNotaCredito.cabecera
WHERE
id_nota_credito = ?
Campo | Tipo | Descripción |
---|---|---|
ruc | string | Número de RUC de 13 caracteres. Requerido |
obligado_contabilidad | string | 'SI' si está obligado a llevar contabilidad. 'NO' si no lo está. |
contribuyente_especial | string | Número de resolución. En blanco '' si no es contribuyente especial. |
nombre_comercial | string | Nombre comercial. Máximo 300 caracteres Requerido |
razon_social | string | Razón social. Máximo 300 caracteres Requerido |
direccion_establecimiento | string | Dirección registrada en el SRI. Máximo 300 caracteres. Requerido |
direccion_emisor | string | Dirección del punto de emisión. Máximo 300 caracteres. Requerido |
codigo | string | Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001 Requerido |
punto_emision | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001 . Requerido |
Comprador
Obtiene información del comprador en la nota de crédito
credit_note_buyer = SELECT
identificacion,
tipo_identificacion,
razon_social,
direccion,
email,
telefono
FROM
DocElectronicoNotaCredito.cabecera
WHERE
id_nota_credito = ?
Campo | Tipo | Descripción |
---|---|---|
razon_social | string | Razón social. Máximo 300 caracteres. Requerido |
identificacion | string | De 5 a 20 caracteres. Requerido |
tipo_identificacion | string | Ver tabla de tipos de identificación Requerido |
string | Correo electrónico. Máximo 300 caracteres. | |
telefono | string | Teléfono |
direccion | string | Dirección |
Totales
Obtiene información de los valores totales de la nota de crédito
credit_note_totals = SELECT
total_sin_impuestos,
importe_total
FROM
DocElectronicoNotaCredito.cabecera
WHERE
id_nota_credito = ?
Campo | Tipo | Descripción |
---|---|---|
total_sin_impuestos | float | Total antes de los impuestos. Requerido |
importe_total | float | Total incluyendo impuestos. Requerido |
Impuestos de totales
Obtiene información de los impuestos de los totales de la nota de crédito
credit_note_totals_taxes = SELECT
codigo,
codigo_porcentaje,
base_imponible,
valor
FROM
DocElectronicoNotaCredito.totales_impuestos
WHERE
id_nota_credito = ?
Campo | Tipo | Descripción |
---|---|---|
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
Items
Obtiene todos los items de una nota de crédito
items = SELECT
id_detalle,
codigo_principal,
codigo_auxiliar,
descripcion,
cantidad,
precio_unitario,
descuento,
precio_total_sin_impuestos
FROM
DocElectronicoNotaCredito.items
WHERE
id_nota_credito = ?
Campo | Tipo | Descripción |
---|---|---|
id_detalle | string | Identifica de manera única el ítem o detalle de la nota de crédito. Si no hay un solo campo que lo identifique de manera única se debe usar la concatenación de varios.Requerido |
codigo_principal | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. Requerido |
codigo_auxiliar | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. |
descripcion | string | Descripción del ítem. Requerido |
cantidad | float | Cantidad de items. Requerido |
precio_unitario | float | Precio unitario. Requerido |
descuento | float | El descuento es aplicado por cada producto. Requerido |
precio_total_sin_impuestos | float | Precio antes de los impuestos. Se obtiene multiplicando la cantidad por el precio_unitario Requerido |
Impuestos de items
Obtiene los impuestos de un item
item_taxes = SELECT
base_imponible,
valor,
tarifa,
codigo,
codigo_porcentaje
FROM
DocElectronicoNotaCredito.items_impuestos
WHERE
id_detalle = ?
Campo | Tipo | Descripción |
---|---|---|
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
tarifa | float | Porcentaje actual del impuesto expresado por un número entre 0.0 y 100.0 Requerido |
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
Detalles adicionales de items
Obtiene los detalles adicionales de un ítem. Este query es opcional.
Los detalles adicionales de un ítem se manejan de la forma 'Clave':'Valor'. Ejemplo: 'Peso':'Kg'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con detalles adicionales del ítem:
columna_de_nombres | columna_de_valores |
---|---|
Peso | KG |
Color | Rojo |
Caducidad | 10 días |
item_details = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoNotaCredito.items_detalles_adicionales
WHERE
id_detalle = ?
Campo | Tipo | Descripción |
---|---|---|
nombre | string | Nombre del detalle adicional del ítem |
valor | string | Valor del detalle adicional del ítem |
Información adicional
Obtiene la información adicional de la nota de crédito.
La información adicional de la nota de crédito se maneja de la forma 'Clave':'Valor'. Ejemplo: 'Tipo de pago':'Cheque'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con información adicional de la nota de crédito:
columna_de_nombres | columna_de_valores |
---|---|
Tipo de servicio | Avanzado |
Forma de pago | Cheque |
Periodo | 3 meses |
credit_note_additional_information = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoNotaCredito.informacion_adicional
WHERE
id_nota_credito = ?
Campo | Tipo | Descripción |
---|---|---|
_nombre_ |
string | Nombre de la información adicional de la nota de crédito |
_valor_ |
string | Valor de la información adicional de la nota de crédito |
Detalles adicionales de items
Obtiene los detalles adicionales de un ítem. Este query es opcional.
Los detalles adicionales de un ítem se manejan de la forma 'Clave':'Valor'. Ejemplo: 'Peso':'Kg'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con detalles adicionales del ítem:
columna_de_nombres | columna_de_valores |
---|---|
Peso | KG |
Color | Rojo |
Caducidad | 10 días |
item_details = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoNotaCredito.items_detalles_adicionales
WHERE
id_detalle = ?
Campo | Tipo | Descripción |
---|---|---|
nombre | string | Nombre del detalle adicional del ítem |
valor | string | Valor del detalle adicional del ítem |
Tablas recomendadas
Estructura recomendada para las tablas o vistas con información de la nota de crédito.
Ejemplo en SQL Server:
CREATE SCHEMA notas_de_credito
DROP TABLE [notas_de_credito].[item_impuesto]
DROP TABLE [notas_de_credito].[item_detalle_adicional]
DROP TABLE [notas_de_credito].[item]
DROP TABLE [notas_de_credito].[total_impuesto]
DROP TABLE [notas_de_credito].[informacion_adicional]
DROP TABLE [notas_de_credito].[nota_de_credito]
CREATE TABLE [notas_de_credito].[nota_de_credito](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[moneda] [varchar](15) NOT NULL,
[clave_acceso] [varchar](49),
-- DOCUMENTO MODIFICADO
[fecha_emision_documento_modificado] [datetime] NULL,
[numero_documento_sustento] [varchar](17) NULL,
[tipo_documento_modificado] [varchar](2) NULL,
[motivo] [varchar](300) NULL,
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_matriz] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- COMPRADOR
[email_comprador] [varchar](254) NULL,
[identificacion_comprador] [varchar](20) NULL,
[tipo_identificacion_comprador] [varchar](2) NULL,
[razon_social_comprador] [varchar](200) NULL,
[direccion_comprador] [varchar](200) NULL,
[telefono_comprador] [varchar](200) NULL,
-- TOTALES
[total_sin_impuestos] [decimal](14,2) NULL,
[importe_total] [decimal](14,2) NULL,
)
-- NOTA DE CRÉDITO: ITEMS
CREATE TABLE [notas_de_credito].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_nota_credito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[nota_de_credito](id),
[cantidad] [decimal](14,2) NOT NULL,
[codigo_principal] [varchar](50) NULL,
[codigo_auxiliar] [varchar](50) NULL,
[precio_unitario] [decimal](14,2) NOT NULL,
[descripcion] [varchar](300) NOT NULL,
[precio_total_sin_impuestos] [decimal](14,2) NOT NULL,
[descuento] [decimal](14,2) NULL
)
-- NOTA DE CRÉDITO: IMPUESTOS DE ITEMS
CREATE TABLE [notas_de_credito].[item_impuesto](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[item](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL,
[tarifa] [decimal](14,2) NOT NULL, -- porcentaje
CONSTRAINT PK_item_impuesto PRIMARY KEY (id_item, codigo, codigo_porcentaje)
)
-- NOTA DE CRÉDITO: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [notas_de_credito].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY (id_item, nombre)
)
-- NOTA DE CRÉDITO: IMPUESTOS TOTALES
CREATE TABLE [notas_de_credito].[total_impuesto](
[id_nota_credito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[nota_de_credito](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](2) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[valor] [decimal](14,2) NOT NULL
CONSTRAINT PK_total_impuesto PRIMARY KEY (id_nota_credito, codigo, codigo_porcentaje)
)
-- NOTA DE CRÉDITO: INFORMACION ADICIONAL DE LA NOTA DE CRÉDITO
CREATE TABLE [notas_de_credito].[informacion_adicional](
[id_nota_credito] bigint NOT NULL FOREIGN KEY REFERENCES [notas_de_credito].[nota_de_credito](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_nota_credito, nombre)
)
Comprobantes de Retención
Los queries para la emisión electrónica de retención se guardan en el archivo de configuración retention.ini
.
Ejemplo de archivo retention.ini
Cabecera
Obtiene información de la cabecera de la retención
headers = SELECT
id_nota_credito id_local,
secuencial,
fecha_emision,
clave_acceso,
tipo_emision,
periodo_fiscal
FROM
DocElectronicoRetencion.cabecera
WHERE
id_retencion in (:sequence)
ORDER BY id_retencion :order
Campo | Descripción | Valor de ejemplo |
---|---|---|
id_local | int o string | Identifica de manera única la retención. Requerido |
secuencial | string | Número de secuencia de la retención. Requerido |
fecha_emision | datetime | Fecha de emisión Requerido |
clave_acceso | string | La clave de acceso representa un identificador único del comprobante. Si esta información no es provista, Dátil la generará. ¿Cómo generar la clave de acceso? |
tipo_emision | integer | Emisión normal: 1 .Emisión por indisponibilidad: 2 Requerido |
periodo_fiscal | string | Mes y año en el siguiente formato MM/AAAA. Ejm: 12/2015 Requerido |
Emisor
Obtiene información del vendedor en la retención
retention_seller = SELECT
ruc,
obligado_contabilidad,
contribuyente_especial,
nombre_comercial,
razon_social,
direccion_establecimiento,
direccion_emisor,
codigo,
punto_emision
FROM
DocElectronicoRetencion.cabecera
WHERE
id_retencion = ?
Campo | Tipo | Descripción |
---|---|---|
ruc | string | Número de RUC de 13 caracteres. Requerido |
obligado_contabilidad | string | 'SI' si está obligado a llevar contabilidad. 'NO' si no lo está. |
contribuyente_especial | string | Número de resolución. En blanco '' si no es contribuyente especial. |
nombre_comercial | string | Nombre comercial. Máximo 300 caracteres Requerido |
razon_social | string | Razón social. Máximo 300 caracteres Requerido |
direccion_establecimiento | string | Dirección registrada en el SRI. Máximo 300 caracteres. Requerido |
direccion_emisor | string | Dirección del punto de emisión. Máximo 300 caracteres. Requerido |
codigo | string | Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001 Requerido |
punto_emision | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001 . Requerido |
Sujeto retenido
Obtiene información del sujeto retenido en la retención
retention_recipient = SELECT
identificacion,
tipo_identificacion,
razon_social,
direccion,
email,
telefono
FROM
DocElectronicoRetencion.cabecera
WHERE
id_retencion = ?
Campo | Tipo | Descripción |
---|---|---|
identificacion | string | De 5 a 20 caracteres. Requerido |
tipo_identificacion | string | Ver tabla de tipos de identificación Requerido |
razon_social | string | Razón social. Máximo 300 caracteres. Requerido |
direccion | string | Dirección |
string | Correo electrónico. Máximo 300 caracteres. | |
telefono | string | Teléfono |
Impuestos de la retención
Obtiene información de los impuestos de la retención
retention_taxes = SELECT
codigo,
codigo_porcentaje,
porcentaje,
base_imponible,
valor_retenido,
tipo_documento_sustento,
numero_documento_sustento,
fecha_emision_documento_sustento
FROM
DocElectronicoRetencion.impuesto
WHERE
id_retencion = ?
Campo | Tipo | Descripción |
---|---|---|
codigo | string | Código de tipo de impuesto. Requerido |
codigo_porcentaje | string | Código del porcentaje a aplicar dentro del tipo de impuesto Requerido |
porcentaje | string | Porcentaje a retener Requerido |
base_imponible | float | Base imponible. Requerido |
valor_retenido | float | Valor retenido. Requerido |
tipo_documento_sustento | string | Códigos de tipos de documentos. Requerido |
numero_documento_sustento | string | Número completo del documento que se está afectando. Normalmente facturas. Ejm: 001-002-010023098 Requerido |
fecha_emision_documento_sustento | datetime | Fecha de emisión del documento sustento de la retención_Requerido_ |
Información adicional
Obtiene la información adicional de la retención.
La información adicional de la retención se maneja de la forma 'Clave':'Valor'. Ejemplo: 'Tipo de pago':'Cheque'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con información adicional de la retención:
columna_de_nombres | columna_de_valores |
---|---|
Tipo de servicio | Avanzado |
Forma de pago | Cheque |
Periodo | 3 meses |
retention_additional_information = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoRetencion.informacion_adicional
WHERE
id_retencion = ?
Campo | Tipo | Descripción |
---|---|---|
_nombre_ |
string | Nombre de la información adicional de la rentención |
_valor_ |
string | Valor de la información adicional de la retención |
Tablas recomendadas
Estructura recomendada para las tablas o vistas con información de la retención.
Ejemplo en SQL Server:
CREATE SCHEMA retenciones
DROP TABLE [retenciones].[item]
DROP TABLE [retenciones].[informacion_adicional]
DROP TABLE [retenciones].[retencion]
CREATE TABLE [retenciones].[retencion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_emision] [datetime] NULL,
[clave_acceso] [varchar](49) NULL,
[periodo_fiscal] [varchar](7),
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [varchar](10) NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion_matriz] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- SUJETO RETENIDO
[email_sujeto] [varchar](254) NULL,
[identificacion_sujeto] [varchar](20) NULL,
[tipo_identificacion_sujeto] [varchar](2) NULL,
[razon_social_sujeto] [varchar](200) NULL,
[direccion_sujeto] [varchar](200) NULL,
[telefono_sujeto] [varchar](200) NULL,
)
-- RETENCION: ITEMS
CREATE TABLE [retenciones].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_retencion] bigint NOT NULL FOREIGN KEY REFERENCES [retenciones].[retencion](id),
[codigo] [varchar](2) NOT NULL,
[codigo_porcentaje] [varchar](5) NOT NULL,
[base_imponible] [decimal](14,2) NOT NULL,
[fecha_emision_documento_sustento] [datetime] NULL,
[numero_documento_sustento] [varchar](17) NULL,
[tipo_documento_sustento] [varchar](2) NULL,
[porcentaje] [decimal](14,2) NULL,
[valor_retenido] [decimal](14,2) NULL,
)
-- RETENCION: INFORMACION ADICIONAL DE LA RETENCION
CREATE TABLE [retenciones].[informacion_adicional](
[id_retencion] bigint NOT NULL FOREIGN KEY REFERENCES [retenciones].[retencion](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_retencion, nombre)
)
Guías de Remisión
Los queries para la emisión electrónica de guías de remisión se guardan en el archivo de configuración waybill.ini
.
Ejemplo de archivo waybill.ini
Cabecera
Obtiene información de la cabecera de la guía de remisión
headers = SELECT
id_guia_remision id_local,
secuencial,
fecha_inicio_transporte,
fecha_fin_transporte,
direccion_partida,
clave_acceso,
tipo_emision
FROM
DocElectronicoGuiaRemision.cabecera
WHERE
id_guia_remision in (:sequence)
ORDER BY id_guia_remision :order
Campo | Descripción | Valor de ejemplo |
---|---|---|
id_local | int o string | Identifica de manera única la guía de remisión. Requerido |
secuencial | string | Número de secuencia de la retención. Requerido |
fecha_inicio_transporte | datetime | Fecha en la que inicia el transporte dada la guía de remisión Requerido |
fecha_fin_transporte | datetime | Fecha en la que termina el transporte dada la guía de remisión Requerido |
direccion_partida | string | Dirección de partida |
clave_acceso | string | La clave de acceso representa un identificador único del comprobante. Si esta información no es provista, Dátil la generará. ¿Cómo generar la clave de acceso? |
tipo_emision | integer | Emisión normal: 1 .Emisión por indisponibilidad: 2 Requerido |
Vendedor
Obtiene información del vendedor en la guía de remisión
waybill_seller = SELECT
ruc,
obligado_contabilidad,
contribuyente_especial,
nombre_comercial,
razon_social,
direccion_establecimiento,
direccion_emisor,
codigo,
punto_emision
FROM
DocElectronicoGuiaRemision.cabecera
WHERE
id_guia_remision = ?
Campo | Tipo | Descripción |
---|---|---|
ruc | string | Número de RUC de 13 caracteres. Requerido |
obligado_contabilidad | string | 'SI' si está obligado a llevar contabilidad. 'NO' si no lo está. |
contribuyente_especial | string | Número de resolución. En blanco '' si no es contribuyente especial. |
nombre_comercial | string | Nombre comercial. Máximo 300 caracteres Requerido |
razon_social | string | Razón social. Máximo 300 caracteres Requerido |
direccion_establecimiento | string | Dirección registrada en el SRI. Máximo 300 caracteres. Requerido |
direccion_emisor | string | Dirección del punto de emisión. Máximo 300 caracteres. Requerido |
codigo | string | Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001 Requerido |
punto_emision | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001 . Requerido |
Transportista
Obtiene información del transportista en la guía de remisión
waybill_shipper = SELECT
identificacion,
tipo_identificacion,
razon_social,
direccion,
email,
telefono
FROM
DocElectronicoGuiaRemision.cabecera
WHERE
id_guia_remision = ?
Campo | Tipo | Descripción |
---|---|---|
identificacion | string | De 5 a 20 caracteres. Requerido |
tipo_identificacion | string | Ver tabla de tipos de identificación Requerido |
razon_social | string | Razón social. Máximo 300 caracteres. Requerido |
direccion | string | Dirección |
string | Correo electrónico. Máximo 300 caracteres. | |
telefono | string | Teléfono |
Destinatarios
Obtiene información de los destinatarios en la guía de remisión
waybill_receivers = SELECT
id_destinatario receiver_id,
razon_social,
identificacion,
tipo_identificacion,
email,
telefono,
direccion,
ruta,
documento_aduanero_unico,
codigo_establecimiento_destino,
fecha_emision_documento_sustento,
numero_documento_sustento,
tipo_documento_sustento,
motivo_traslado,
numero_autorizacion_documento_sustento
FROM
DocElectronicoGuiaRemision.destinatario
WHERE
id_guia_remision = ?
Campo | Tipo | Descripción |
---|---|---|
receiver_id | string | Identifica de manera única al destinatario en la guía de remisión. Requerido |
razon_social | string | Razón social del destinatario. Máximo 300 caracteres Requerido |
identificacion | string | De 5 a 20 caracteres. Requerido |
tipo_identificacion | string | Ver tabla de tipos de identificación Requerido |
string | Correo electrónico del destinatario. Máximo 300 caracteres. | |
telefono | string | Teléfono del destinatario |
direccion | string | Dirección del destinatario |
ruta | string | Ruta de transporte. Máximo 300 caracteres. |
documento_aduanero_unico | string | Máximo 20 caracteres. |
fecha_emision_documento_sustento | datetime | Fecha de emisión del documento sustento de la guía de remisión, usualmente una factura. Requerido |
numero_documento_sustento | string | Número completo del documento que detalla la mercadería a transportar. Normalmente facturas. Ejm: 001-002-010023098 |
codigo_establecimiento_destino | string | Número establecimiento que recibe la entrega. Requerido |
numero_documento_sustento | string | Número completo del documento que detalla la mercadería a transportar. Normalmente facturas. Ejm: 001-002-010023098 Requerido |
tipo_documento_sustento | string | tipo_documento_sustento |
motivo_traslado | string | Motivo del traslado. Ejm: Entrega de mercadería. Requerido |
numero_autorizacion_documento_sustento | string | Autorización del documento de sustento. |
Items del destinatario
Obtiene la información de los items que recibirá el destinatario
waybill_receiver_items = SELECT
id_detalle,
descripcion,
codigo_principal,
codigo_auxiliar,
cantidad
FROM
DocElectronicoGuiaRemision.detalle
WHERE
id_destinatario = ?
Campo | Tipo | Descripción |
---|---|---|
id_detalle | string | Identifica de manera única el ítem o detalle de la factura. Si no hay un solo campo que lo identifique de manera única se debe usar la concatenación de varios.Requerido |
descripcion | string | Descripción del ítem. Requerido |
codigo_principal | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. Requerido |
codigo_auxiliar | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. |
cantidad | float | Cantidad de items. Requerido |
Detalles adicionales de items
Obtiene los detalles adicionales de un ítem. Este query es opcional.
Los detalles adicionales de un ítem se manejan de la forma 'Clave':'Valor'. Ejemplo: 'Peso':'Kg'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con detalles adicionales del ítem:
columna_de_nombres | columna_de_valores |
---|---|
Peso | KG |
Color | Rojo |
Caducidad | 10 días |
item_details = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoGuiaRemision.items_detalles_adicionales
WHERE
id_detalle = ?
Campo | Tipo | Descripción |
---|---|---|
nombre | string | Nombre del detalle adicional del ítem |
valor | string | Valor del detalle adicional del ítem |
Información adicional
Obtiene la información adicional de la guía de remisión.
La información adicional de la guía de remisión se maneja de la forma 'Clave':'Valor'. Ejemplo: 'Tipo de pago':'Cheque'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con información adicional de la guía de remisión:
columna_de_nombres | columna_de_valores |
---|---|
Tipo de servicio | Avanzado |
Forma de pago | Cheque |
Periodo | 3 meses |
waybill_additional_information = SELECT
columna_de_nombres _nombre_,
columna_de_valores _valor_
FROM
DocElectronicoRetencion.informacion_adicional
WHERE
id_retencion = ?
Campo | Tipo | Descripción |
---|---|---|
_nombre_ |
string | Nombre de la información adicional de la rentención |
_valor_ |
string | Valor de la información adicional de la retención |
Tablas recomendadas
Estructura recomendada para las tablas o vistas con información de la guía de remisión.
Ejemplo en SQL Server:
CREATE SCHEMA guias_de_remision
DROP TABLE [guias_de_remision].[guia_remision]
DROP TABLE [guias_de_remision].[destinatario]
DROP TABLE [guias_de_remision].[item]
DROP TABLE [guias_de_remision].[item_detalle_adicional]
DROP TABLE [guias_de_remision].[informacion_adicional]
CREATE TABLE [guias_de_remision].[guia_remision](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[fecha_inicio_transporte] [datetime] NULL,
[fecha_fin_transporte] [datetime] NULL,
[direccion_partida] [varchar](200) NULL,
[clave_acceso] [varchar](49),
-- EMISOR
[ruc] [varchar](13) NULL,
[obligado_contabilidad] [varchar](2) NULL,
[contribuyente_especial] [int] NULL,
[nombre_comercial] [varchar](300) NULL,
[razon_social] [varchar](300) NULL,
[direccion] [varchar](300) NULL,
[codigo_establecimiento] [varchar](3) NULL,
[punto_emision] [varchar](3) NULL,
[direccion_establecimiento] [varchar](300) NULL,
-- TRANSPORTISTA
[email_comprador] [varchar](254) NULL,
[identificacion_comprador] [varchar](20) NULL,
[tipo_identificacion_comprador] [varchar](2) NULL,
[razon_social_comprador] [varchar](200) NULL,
[direccion_comprador] [varchar](200) NULL,
[telefono_comprador] [varchar](200) NULL,
[placa] [varchar](200) NULL
)
-- GUIA DE REMISION: DESTINATARIOS
CREATE TABLE [guias_de_remision].[destinatario](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_destinatario] bigint NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[guia_remision](id),
[email] [varchar](254) NULL,
[identificacion] [varchar](20) NULL,
[tipo_identificacion] [varchar](2) NULL,
[razon_social] [varchar](200) NULL,
[direccion] [varchar](200) NULL,
[telefono] [varchar](200) NULL,
[fecha_emision_documento_sustento] [datetime] NULL,
[numero_documento_sustento] [varchar](17) NULL,
[tipo_documento_sustento] [varchar](2) NULL,
[numero_autorizacion_documento_sustento] [varchar](300) NULL,
[ruta] [varchar](300) NULL,
[motivo_traslado] [varchar](300) NULL,
[documento_aduanero_unico] [varchar](300) NULL,
[codigo_establecimiento_destino] [varchar](3) NULL
)
-- GUIA DE REMISION: ITEMS
CREATE TABLE [guias_de_remision].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_destinatario] bigint NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[destinatario](id),
[cantidad] [decimal](14,2) NOT NULL,
[codigo_principal] [varchar](50) NULL,
[codigo_auxiliar] [varchar](50) NULL,
[descripcion] [varchar](300) NOT NULL
)
-- GUIA DE REMISION: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [guias_de_remision].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY(id_item, nombre)
)
-- GUIA DE REMISION: INFORMACION ADICIONAL DE LA GUIA DE REMISION
CREATE TABLE [guias_de_remision].[informacion_adicional](
[id_guia_remision] bigint NOT NULL FOREIGN KEY REFERENCES [guias_de_remision].[guia_remision](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT PK_informacion_adicional PRIMARY KEY (id_guia_remision, nombre)
)
Liquidaciones de compra
Los queries para la emisión electrónica de liquidaciones de compra se guardan en el archivo de configuración purchase_settlement.ini
.
Ejemplo de archivo purchase_settlement.ini
Cabecera
Obtiene información de la cabecera de la liquidación de compra
headers = SELECT
id id_local,
secuencial,
fecha_emision,
moneda,
tipo_emision
FROM
liquidaciones_compra.liquidacion
WHERE
id in (:sequence)
ORDER BY id :order
Campo | Descripción | Valor de ejemplo |
---|---|---|
id_local | int o string | Identifica de manera única la liquidación de compra. Requerido |
secuencial | string | Número de secuencia de la liquidación. Requerido |
fecha_emision | datetime | Fecha en la que se emite la liquidación. |
moneda | string | Código ISO de la moneda. Requerido |
tipo_emision | int | Emisión normal: 1 .Emisión por indisponibilidad: 2 Requerido |
Emisor
Obitiene información del emisor de la liquidación de compra
purchase_settlement_buyer = SELECT
ruc,
obligado_contabilidad,
contribuyente_especial,
nombre_comercial,
razon_social,
direccion_establecimiento,
direccion_matriz direccion_emisor,
codigo_establecimiento codigo,
punto_emision
FROM
liquidaciones_compra.liquidacion
WHERE
id = ?
Campo | Descripción | Valor de ejemplo |
---|---|---|
ruc | string | Número de RUC de 13 caracteres. Requerido |
obligado_contabilidad | string | 'SI' si está obligado a llevar contabilidad. 'NO' si no lo está. |
contribuyente_especial | string | Número de resolución. En blanco '' si no es contribuyente especial. |
nombre_comercial | string | Nombre comercial. Máximo 300 caracteres Requerido |
razon_social | ||
direccion_establecimiento | string | Dirección registrada en el SRI. Máximo 300 caracteres. Requerido |
direccion_emisor | string | Dirección del punto de emisión. Máximo 300 caracteres. Requerido |
codigo | string | Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001 Requerido |
punto_emision | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001 . Requerido |
Proveedor
Obtiene información del proveedor de la liquidación de compra
purchase_settlement_provider = SELECT
identificador_proveedor identificacion,
tipo_identificador_proveedor tipo_identificacion,
razon_social_proveedor razon_social,
direccion_proveedor direccion
FROM
liquidaciones_compra.liquidacion
WHERE
id = ?
Campo | Descripción | Valor de ejemplo |
---|---|---|
identificacion | string | De 5 a 20 caracteres. Requerido |
tipo_identificacion | string | Ver tabla de tipos de identificación Requerido |
razon_social | string | Razón social. Máximo 300 caracteres Requerido |
direccion | string | Dirección |
Totales
Obtiene información de los valores totales de las liquidaciones
purchase_settlement_totals = SELECT
total_sin_impuestos,
importe_total,
descuento
FROM
liquidaciones_compra.liquidacion
WHERE
id = ?
Campo | Descripción | Valor de ejemplo |
---|---|---|
total_sin_impuestos | float | Total antes de los impuestos. Requerido |
importe_total | float | Total incluyendo impuestos. Requerido |
descuento | float | Suma de los descuentos de cada ítem y del descuento adicional. Requerido |
Impuestos de totales
Obtiene información de los impuestos de los totales de la factura
purchase_settlement_totals_taxes = SELECT
codigo,
codigo_porcentaje,
base_imponible,
valor
FROM
liquidaciones_compra.total_impuesto
WHERE
id_liquidacion = ?
Campo | Descripción | Valor de ejemplo |
---|---|---|
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
Items
Obtiene todos los items de una factura
items = SELECT
id id_detalle,
codigo_principal,
codigo_auxiliar,
descripcion,
cantidad,
unidad_medida,
precio_unitario,
descuento,
precio_total_sin_impuestos
FROM
liquidaciones_compra.item
WHERE
id_liquidacion = ?
Campo | Descripción | Valor de ejemplo |
---|---|---|
id_detalle | int | Identifica de manera única el ítem o detalle de la factura. Requerido |
codigo_principal | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. Requerido |
codigo_auxiliar | string | Código alfanumérico de uso del comercio. Máximo 25 caracteres. |
descripcion | string | Descripción del ítem. Requerido |
cantidad | float | Cantidad de items. Requerido |
unidad_medida | string | Unidad de medida. Ejemplo: Kilos. |
precio_unitario | float | Precio unitario. Requerido |
descuento | float | El descuento es aplicado por cada producto. |
precio_total_sin_impuestos | float | Precio antes de los impuestos. Se obtiene multiplicando la cantidad por el precio_unitario Requerido |
Impuestos de items
Obtiene los impuestos de un item.
item_taxes = SELECT
id_item id_detalle,
base_imponible,
valor,
tarifa,
codigo,
codigo_porcentaje
FROM
liquidaciones_compra.item_impuesto
WHERE
id_item = ?
Campo | Descripción | Valor de ejemplo |
---|---|---|
id_detalle | ||
base_imponible | float | Base imponible. Requerido |
valor | float | Valor del total. Requerido |
tarifa | float | Porcentaje actual del impuesto expresado por un número entre 0.0 y 100.0 Requerido |
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
Detalles adicionales de items
Obtiene los detalles adicionales de un ítem.
Los detalles adicionales de un ítem se manejan de la forma 'Clave':'Valor'. Ejemplo: 'Peso':'Kg'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con detalles adicionales del ítem:
columna_de_nombres | columna_de_valores |
---|---|
Peso | KG |
Color | Rojo |
Caducidad | 10 días |
item_details = SELECT
nombre nombre,
valor valor
FROM
liquidaciones_compra.item_detalle_adicional
WHERE
id_item = ?
Campo | Tipo | Descripción |
---|---|---|
nombre | string | Nombre del detalle adicional del ítem |
valor | string | Valor del detalle adicional del ítem |
Información adicional
Obtiene la información adicional de la factura. Este query es opcional
La información adicional de la factura se maneja de la forma 'Clave':'Valor'. Ejemplo: 'Tipo de pago':'Cheque'
Se asume que en la tabla consultada una columna tiene los nombres y otra los valores.
Ejemplo de columnas con información adicional de la liquidación:
columna_de_nombres | columna_de_valores |
---|---|
Tipo de servicio | Avanzado |
Forma de pago | Cheque |
Periodo | 3 meses |
purchase_settlement_additional_information = SELECT
nombre _nombre_,
valor _valor_
FROM
liquidaciones_compra.info_adicional
WHERE
id_liquidacion = ?
Campo | Tipo | Descripción |
---|---|---|
_nombre_ |
string | Nombre de la información adicional de la factura |
_valor_ |
string | Valor de la información adicional de la factura |
Pagos
Obtiene la información de los pagos aplicables a la liquidación.
payment_methods = SELECT
forma_pago,
total total,
unidad_tiempo,
plazo
FROM
liquidaciones_compra.pago
WHERE
id_liquidacion = ?
Parámetro | Tipo | Descripción |
---|---|---|
forma_pago | string | Código del tipo de forma de pago. Requerido |
total | float | Total aplicable a la forma de pago especificada. Requerido |
unidad_tiempo | string | Especifica la unidad de tiempo en la cual se expresa el plazo. |
plazo | int | Especifica el plazo del tipo de pago. |
Reembolsos
Obtiene el reembolso aplicable a una liquidación.
purchase_settlement_reimbursement = SELECT
r.id_reembolso,
l.codigo_documento_reembolso
FROM
liquidaciones_compra.liquidacion AS l JOIN
liquidaciones_compra.reembolso AS r
ON
l.id = r.id_liquidacion
WHERE
id = ?
Parámetro | Tipo | Descripción |
---|---|---|
r.id_reembolso | int | Identificador del reembolso. Reembolso |
l.codigo_documento_reembolso | Identificador del documento de reembolso. Reembolso |
Totales de reembolosos
Obtiene la información de los totales de un reembolso
purchase_settlement_reimbursement_totals = SELECT
total_comprobante_reembolso subtotal,
total_base_imponible_reembolso total,
total_impuesto_reembolso total_impuestos
FROM
liquidaciones_compra.liquidacion
WHERE
id = ?
Parámetro | Tipo | Descripción |
---|---|---|
subtotal | float | Total del reembolso incluyendo base imponible e impuestos. Requerido |
total | float | Total del reembolso incluyendo la base imponible. Requerido |
total_impuestos | float | Total del reembolso incluyendo los impuestos |
Documennto reembolso
Obtiene la información de un reembolso.
purchase_settlement_reimbursement_document = SELECT
codigo_documento_reembolso codigo,
id_reembolso id_documento,
id_proveedor_reembolso,
tipo_id_proveedor_reembolso,
codigo_pais_pago_proveedor_reembolso,
tipo_proveedor_reembolso,
secuencia_reembolso,
punto_emision_reembolso,
fecha_emision_reembolso,
numero_autorizacion_reembolso,
codigo_establecimiento_reembolso
FROM
liquidaciones_compra.reembolso
WHERE
id_reembolso = ?
Parámetro | Tipo | Descripción |
---|---|---|
codigo | string | Código numérico de 2 caracteres que representa al documento de reembolso. Ejemplo: 01 Requerido |
id_documento | int | Identifica de manera única al documento de reemoblso. Requerido |
id_proveedor_reembolso | string | Identifica de manera única al proveedor en la liquidación. Requerido |
tipo_id_proveedor_reembolso | string | Ver tabla de tipos de identificación Requerido |
codigo_pais_pago_proveedor_reembolso | string | Código de dos letras del país del proveedor según [ISO_3166](https://en.wikipedia.org/wiki/ Requerido |
tipo_proveedor_reembolso | string | Tipo de proveedor Requerido |
secuencia_reembolso | int | Número de secuencia de la factura. Requerido |
punto_emision_reembolso | string | Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001 . Requerido |
fecha_emision_reembolso | datetime | Fecha de emisión Requerido |
numero_autorizacion_reembolso | string | Autorización del documento de reembolso. Requerido |
codigo_establecimiento_reembolso | float | Número establecimiento que recibe la entrega. Requerido |
Impuestos de reembolsos
Obtiene información de los impuestos de los reembolsos
purchase_settlement_reimbursement_tax = SELECT
codigo,
codigo_porcentaje,
tarifa,
base_imponible,
impuesto_reembolso
FROM
liquidaciones_compra.reembolso_tax
WHERE
id_reembolso = ?
Parámetro | Tipo | Descripción |
---|---|---|
codigo | string | Código del tipo de impuesto Requerido |
codigo_porcentaje | string | Código del porcentaje. Requerido |
tarifa | float | Porcentaje actual del impuesto expresado por un número entre 0.0 y 100.0 Requerido |
base_imponible | float | Base imponible. Requerido |
impuesto_reembolso | float | Valor del impuesto del reembolso |
Máquina fiscal
Obtiene información de la máquina fiscal con la que se emitió la liquidación
purchase_settlement_fiscal_machine = SELECT
marca,
modelo,
serie
FROM
liquidaciones_compra.maquina_fiscal
WHERE
id_liquidacion = ?
Parámetro | Tipo | Descripción |
---|---|---|
marca | string | Marca de máximo 100 caracteres |
modelo | string | Modelo de máximo 100 caracteres |
serie | string | Serie de máximo 100 caracteres |
Tablas recomendadas
Estructura recomendada para las tablas o vistas con información de las liquidaciones de compra.
Ejemplo en SQL Server:
CREATE SCHEMA liquidaciones_compra;
CREATE TABLE [liquidaciones_compra].[liquidacion](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[ambiente] [int] NOT NULL,
[tipo_emision] [int] NOT NULL,
[secuencial] [bigint] NOT NULL,
[clave_acceso] [VARCHAR](49) NULL,
[fecha_emision] [DATETIME] NULL,
[moneda] [VARCHAR](15) NOT NULL,
[codigo_documento] [VARCHAR](2) NOT NULL,
-- EMISOR
[ruc] [VARCHAR](13) NULL,
[obligado_contabilidad] [VARCHAR](10) NULL,
[contribuyente_especial] [VARCHAR](13) NULL,
[nombre_comercial] [VARCHAR](300) NULL,
[razon_social] [VARCHAR](300) NULL,
[direccion_matriz] [VARCHAR](300) NOT NULL,
[codigo_establecimiento] [VARCHAR](3) NULL,
[punto_emision] [VARCHAR](3) NULL,
[direccion_establecimiento] [VARCHAR](300) NULL,
-- PROVEEDOR
[tipo_identificador_proveedor] [VARCHAR](2) NULL,
[razon_social_proveedor] [VARCHAR](300) NOT NULL,
[identificador_proveedor] [VARCHAR](20) NOT NULL,
[direccion_proveedor] [vARCHAR](300) NULL,
-- TOTALES
[total_sin_impuestos] [DECIMAL](14, 2) NOT NULL,
[descuento] [DECIMAL](14, 2) NOT NULL,
[importe_total] [DECIMAL](14, 2) NOT NULL,
-- REEMBOLSO
[codigo_documento_reembolso] [VARCHAR](2) NOT NULL,
[total_comprobante_reembolso] [DECIMAL](14, 2) NOT NULL,
[total_base_imponible_reembolso] [DECIMAL](14, 2) NOT NULL,
[total_impuesto_reembolso] [DECIMAL](14, 2) NOT NULL,
)
-- LIQUIDACION: ITEMS
CREATE TABLE [liquidaciones_compra].[item](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[codigo_principal] [VARCHAR](25) NOT NULL,
[codigo_auxiliar] [VARCHAR](25) NULL,
[descripcion] [VARCHAR](300) NOT NULL,
[unidad_medida] [VARCHAR](50) NULL,
[cantidad] [DECIMAL](14,6) NOT NULL,
[precio_unitario] [DECIMAL](18,6) NOT NULL,
[descuento] [DECIMAL](14,2) NULL,
[precio_total_sin_impuestos] [DECIMAL](14,2) NOT NULL,
)
-- LIQUIDIACION: DETALLES ADICIONALES DE ITEMS
CREATE TABLE [liquidaciones_compra].[item_detalle_adicional](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[item](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar](100) NOT NULL
CONSTRAINT pk_items_detalles_adicionales PRIMARY KEY (id_item, nombre)
)
-- LIQUIDACION: IMPUESTOS DE ITEMS
CREATE TABLE [liquidaciones_compra].[item_impuesto](
[id_item] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[item](id),
[codigo] [VARCHAR](2) NOT NULL,
[codigo_porcentaje] [VARCHAR](2) NOT NULL,
[base_imponible] [DECIMAL](14,2) NOT NULL,
[valor] [DECIMAL](14,2) NOT NULL,
[tarifa] [DECIMAL](5,2) NOT NULL, -- porcentaje
CONSTRAINT PK_item_impuesto PRIMARY KEY (id_item, codigo, codigo_porcentaje)
)
-- LIQUIDACION: IMPUESTOS TOTALES
CREATE TABLE [liquidaciones_compra].[total_impuesto](
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[codigo] [VARCHAR](2) NOT NULL,
[codigo_porcentaje] [VARCHAR](2) NOT NULL,
[descuento_adicional] [DECIMAL](14, 2) NULL,
[base_imponible] [DECIMAL](14,2) NOT NULL,
[tarifa] [DECIMAL](14, 2) NOT NULL,
[valor] [DECIMAL](14,2) NOT NULL
CONSTRAINT PK_total_impuesto PRIMARY KEY (id_liquidacion, codigo, codigo_porcentaje)
)
-- LIQUIDIACION: PAGOS
CREATE TABLE [liquidaciones_compra].[pago](
[id] bigint IDENTITY(1,1) PRIMARY KEY,
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[forma_pago] [VARCHAR](2) NOT NULL,
[total] [DECIMAL](14, 2) NOT NULL,
[plazo] VARCHAR(50) NOT NULL,
[unidad_tiempo] VARCHAR(50) NOT NULL
)
-- LIQUIDACION: REEMBOLSOS
CREATE TABLE [liquidaciones_compra].[reembolso](
[id_reembolso] bigint IDENTITY(1,1) PRIMARY KEY,
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[tipo_id_proveedor_reembolso] [VARCHAR](2) NOT NULL,
[id_proveedor_reembolso] [VARCHAR](20) NOT NULL,
[codigo_pais_pago_proveedor_reembolso] [VARCHAR](2) NOT NULL,
[tipo_proveedor_reembolso] [VARCHAR](2) NOT NULL,
[codigo_documento_reembolso] [VARCHAR](3) NOT NULL,
[codigo_establecimiento_reembolso] [DECIMAL](3) NOT NULL,
[punto_emision_reembolso] [VARCHAR](3) NOT NULL,
[secuencial_reembolso] [bigint] NOT NULL,
[fecha_emision_reembolso] [DATETIME] NOT NULL,
[numero_autorizacion_reembolso] [VARCHAR](49) NOT NULL
)
-- LIQUIDACION: REEMBOLSO IMPUESTOS
CREATE TABLE [liquidaciones_compra].[reembolso_tax](
[id_reembolso] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[reembolso](id_reembolso),
[codigo] [VARCHAR](2) NOT NULL,
[codigo_porcentaje] [VARCHAR](2) NOT NULL,
[tarifa] [DECIMAL](14, 2) NOT NULL,
[base_imponible] [DECIMAL](14,2) NOT NULL,
[impuesto_reembolso] [DECIMAL](14, 2) NOT NULL
)
-- LIQUIDACION: MAQUINA FISCAL
CREATE TABLE [liquidaciones_compra].[maquina_fiscal](
[id_liquidacion] bigint NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[marca] [VARCHAR](100) NOT NULL,
[modelo] [VARCHAR](100) NOT NULL,
[serie] [VARCHAR](100) NOT NULL,
CONSTRAINT pk_maquina_fiscal PRIMARY KEY (id, marca)
)
-- LIQUIDACION: INFO ADICIONAL
CREATE TABLE [liquidaciones_compra].[info_adicional](
[id_liquidacion] [bigint] NOT NULL FOREIGN KEY REFERENCES [liquidaciones_compra].[liquidacion](id),
[nombre] [varchar](100) NOT NULL,
[valor] [varchar(100)] NOT NULL,
CONSTRAINT pk_info_adicionales PRIMARY KEY (id_liquidacion, nombre)
)
Consulta de documentos
La información que Link consulta cuando un documento ha sido emitido y el query on_status_update
ha sido definido son los mismos detallados en la consulta de documentos. Se puede acceder y personalizar la sentencia SQL utilizando las etiquetas Jinja2
Ejemplo para guardar autorizacion de facturas
on_status_update = {% if autorizacion is defined %}
INSERT INTO dbo.RESPUESTA_SRI_FACTURSA (
id,
numero,
clave_acceso,
codig_estado
) VALUES (
{{ id_local }},
{{ autorzacio.numero }},
{% if autorizacion.numero == 'AUTORIZADO' %}
100
{% else %}
0
{% endif %}
)