NAV Navbar
Ejemplo SQL

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?

Compatibilidad

Sistema Operativo

Link es compatible con los siguientes sistemas operativos:

Windows

Disponible para 32 y 64 bits

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)

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

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:

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

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,
    [tarida] [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

net stop datilink

Windows: C:\Archivos de Programa\Datil\Link\config .

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.

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
email 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
email 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
email 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
email 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
email 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 %}
)