NAV Navbar
Ejemplo SQL
  • Introducción
  • Compatibilidad
  • Descargas
  • Instalación
  • Configuración
  • Ejecutar el servicio
  • Queries
  • Clave de acceso
  • Objetos comunes
  • Catálogo
  • Ejemplos de archivos de configuración
  • Actualización
  • 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 y guías de remisión.

    Link funciona como un servicio del sistema operativo, de esta manera se mantiene en ejecución permanente emitiendo comprobantes.

    Link se conecta a la base de datos de tu ERP o sistema contable para obtener la información de los comprobantes mientras sigues usando tu sistema como siempre lo has hecho.

    ¿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 (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

    Versiones anteriores

    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

    Luego de descargar el instalador, empiece la instalación con doble click, siguiendo el flujo de ventanas que aparecerán en su pantalla.

    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:

    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(2) 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)
        )
    

    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 y SQL Server. 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

    Parámetros generales del ambiente. Contiene las siguientes secciones.

    [DatabaseSource]

    Revisa la sección de configuración de base de datos para más información

    [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

    No es necesario, pero te 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.

    [Api]

    En la sección [Api] configura el parámetro xkey con el API key de Dátil y xpassword con la clave del certificado de firma electrónica, environment con el valor 1 para emisión en modo de pruebas o 2 para emitir en producción.

    [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.

    [IssueFromXml]

    Estos parámetros permiten encender o apagar la tarea de emisión por xml.

    [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.

    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.

    Ejecutar el servicio

    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

    Queries

    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
    )
    

    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

    Vendedor

    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)
    )
    
    

    Clave de acceso

    El sistema se encarga de generar automáticamente la clave de acceso de cada comprobante y luego retornarla como parte de la respuesta de emisión del mismo. Pero es posible también proveer la clave de acceso si se requiere tener control en la generación de esta clave. La siguiente documentación explica como debe estar estructurada la clave de acceso.

    Las claves de acceso estarán compuestas de 49 caracteres numéricos, la herramienta o aplicativo a utilizar por el sujeto pasivo deberá generar de manera automática la clave de acceso, que constituirá un requisito que dará el carácter de único a cada uno de los comprobantes, y la misma servirá para que el SRI indique si el comprobante es autorizado o no; se describe a continuación su conformación:

    Campo Formato Longitud
    Fecha de Emisión ddmmaaaa 8
    Tipo de Comprobante Tabla 4 2
    Número de RUC 1234567890001 13
    Tipo de Ambiente Tabla 5 1
    Serie 001001 6
    Número del Comprobante (secuencial) 000000001 9
    Código Numérico Numérico 8
    Tipo de Emisión Tabla 2 1
    Dígito Verificador (módulo 11 ) Numérico 1

    Nota: Todos los campos deben completarse conforme a la longitud indicada, es decir si en el número secuencial no completa los 9 dígitos, la clave de acceso estará mal conformada y será motivo de rechazo de la autorización en línea.

    El dígito verificador será aplicado sobre toda la clave de acceso (48 dígitos) y deberá ser incorporado por el contribuyente a través del método denominado Módulo 11, con un factor de chequeo ponderado (2), este mecanismo de detección de errores, será verificado al momento de la recepción del comprobante. Cuando el resultado del dígito verificador obtenido sea igual a once (11), el digito verificador será el cero (0) y cuando el resultado del dígito verificador obtenido sea igual a diez 10, el digito verificador será el uno (1).

    El código numérico constituye un mecanismo para brindar seguridad al emisor en cada comprobante emitido, el algoritmo numérico para conformar este código es potestad absoluta del contribuyente emisor.

    Ver aquí ejemplo de verificación utilizando algoritmo de módulo 11.

    Objetos comunes

    Emisor

    Información del emisor de un comprobante.

    Parámetro Tipo Descripción
    ruc string Número de RUC de 13 caracteres
    razon_social string Razón social. Máximo 300 caracteres
    nombre_comercial string Nombre comercial. Máximo 300 caracteres
    direccion string Dirección registrada en el SRI. Máximo 300 caracteres.
    contribuyente_especial string Número de resolución. En blanco si no es contribuyente especial.
    obligado_contabilidad boolean true si está obligado a llevar contabilidad.
    establecimiento establecimiento Establecimiento que emite la factura.

    Establecimiento

    Representa un establecimiento del comercio.

    Parámetro Tipo Descripción
    codigo string Código numérico de 3 caracteres que representa al establecimiento. Ejemplo: 001
    direccion string Dirección registrada en el SRI. Máximo 300 caracteres
    punto_emision string Código numérico de 3 caracteres que representa al punto de emisión, o punto de venta. Ejemplo: 001

    Persona

    Datos de una persona. Utilizado como comprador en facturas y notas de crédito, como sujeto en retenciones

    Parámetro 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

    Tipo de identificación

    Tipo de identificación Código
    RUC 04
    CEDULA 05
    PASAPORTE 06
    VENTA A CONSUMIDOR FINAL* 07
    IDENTIFICACION DELEXTERIOR* 08
    PLACA 09

    Total Impuesto

    Parámetro Tipo Descripción
    codigo string Código del tipo de impuesto
    codigo_porcentaje string Código del porcentaje.
    base_imponible float Base imponible.
    valor float Valor del total.

    Impuesto Item

    Parámetro Tipo Descripción
    codigo string Código del tipo de impuesto
    codigo_porcentaje string Código del porcentaje.
    base_imponible float Base imponible.
    valor float Valor del total.
    tarifa float Porcentaje actual del impuesto expresado por un número entre 0.0 y 100.0

    Envío SRI

    Contiene la información y el estado de la fase de envío al SRI

    Parámetro Tipo Descripción
    mensajes listado de objeto mensaje SRI Listado de mensajes.
    estado string Posibles valores: RECIBIDA, DEVUELTA
    fecha string Fecha en la que se realizó el envío en formato AAAA-MM-DDHoraZonaHoraria, definido en el estándar ISO8601.

    Autorización SRI

    Contiene la información y el estado de la fase de autorización del comprobante.

    Parámetro Tipo Descripción
    mensajes listado de objeto mensaje SRI Listado de mensajes.
    estado string Posibles valores: AUTORIZADO, NO AUTORIZADO
    numero string Número de autorización.
    fecha string Fecha en la que se otorgó la autorización en formato AAAA-MM-DDHoraZonaHoraria, definido en el estándar ISO8601.

    Mensajes de respuesta SRI

    Parámetro Tipo Descripción
    identificador string Número con el que el SRI identifica al mensaje.
    mensaje string Descripción del error, información o advertencia.
    tipo string Posibles valores: INFORMATIVO, ADVERTENCIA, ERROR
    informacion_adicional string Información adicional del mensaje.

    Item de factura y nota de crédito

    Representa un producto o servicio del comercio.

    Parámetro Tipo Descripción
    descripcion string Descripción del ítem. Requerido
    codigo_principal string Código alfanumérico de uso del comercio. Máximo 25 caracteres.
    codigo_auxiliar string Código alfanumérico de uso del comercio. Máximo 25 caracteres.
    cantidad float Cantidad de items. Requerido
    precio_unitario float Precio unitario. Requerido
    descuento float El descuento es aplicado por cada producto, expresado en valor monetario. Requerido
    precio_total_sin_impuestos float Precio antes de los impuestos. Se obtiene multiplicando la cantidad por el precio_unitario
    unidad_medida string Unidad de medida Requerido para facturas de exportación
    impuestos listado de objetos tipo impuesto item Impuestos grabados sobre el producto. Requerido
    detalles_adicionales object Diccionario de datos de carácter adicional. Ejemplo:
    {"marca": "Ferrari", "chasis": "UANEI832-NAU101"}

    Retención en factura

    Caso específico de Retenciones en la Comercializadores / Distribuidores de derivados del Petróleo y Retención presuntiva de IVA a los Editores, Distribuidores y Voceadores que participan en la comercialización de periódicos y/o revistas.

    Parámetro Tipo Descripción
    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
    tarifa float Porcentaje actual del impuesto. Máximo 3 enteros y 2 decimales. Requerido
    valor float Valor del impuesto. Máximo 12 enteros y 2 decimales. Requerido

    Catálogo

    Tipos de impuesto

    Impuesto Código
    IVA 2
    ICE 3
    IRBPNR 5

    Código de Porcentaje de IVA

    Porcentaje de IVA Código Tarifa
    0% 0 0
    12% 2 12
    14% 3 14
    No Objeto de Impuesto 6 -
    Exento de IVA 7 -

    Tipos de impuesto para la retención

    Impuesto Código
    RENTA 1
    IVA 2
    ISD 6

    Tipos de impuesto para la retención en la factura

    Caso específico de Retenciones en la Comercializadores / Distribuidores de derivados del Petróleo y Retención presuntiva de IVA a los Editores, Distribuidores y Voceadores que participan en la comercialización de periódicos y/o revistas.

    Impuesto Código
    IVA PRESUNTIVO Y RENTA 4

    Retención de IVA

    Porcentaje IVA Código
    10% 9
    20% 10
    30% 1
    70% 2
    100% 3

    Retención en cero

    Porcentaje IVA Código
    0% 7

    No procede retención

    Porcentaje IVA Código
    0% 8

    Retención ISD

    Porcentaje IVA Código
    5% 4580

    Retención de IVA Presuntivo y Renta

    Caso específico de Retenciones en la Comercializadores / Distribuidores de derivados del Petróleo y Retención presuntiva de IVA a los Editores, Distribuidores y Voceadores que participan en la comercialización de periódicos y/o revistas.

    Retención IVA

    Porcentaje IVA presuntivo Código
    100% 3
    12% (Editores a Margen de Comercialización Voceadores) 4
    100% (Venta periódicos y/o Revistas a Distribuidores) 5
    100% (Venta periódicos y/o Revistas a Voceadores) 6

    Retención Renta

    Porcentaje Renta Código
    0.2% 327
    0.3% 328

    Tipos de documentos

    Documento Código
    Factura 01
    Nota de Crédito 04
    Nota de Débito 05
    Guía de Remisión 06
    Comprobante de Retención 07

    Tipos de forma de pago

    Forma de pago Código
    Efectivo efectivo
    Cheque cheque
    Débito de cuenta bancaria debito_cuenta_bancaria
    Transferencia bancaria transferencia
    Depósito en cuenta (Corriente / Ahorros) deposito_cuenta_bancaria
    Tarjeta de débito tarjeta_debito
    Dinero electrónico Ecuador dinero_electronico_ec
    Tarjeta prepago tarjeta_prepago
    Tarjeta de crédito tarjeta_credito
    Otros otros
    Endoso de títulos endoso_titulos

    Equivalencia entre formas de pago Dátil y formas de pago del SRI

    Forma de pago Dátil Código Forma de pago SRI Código
    Efectivo efectivo Sin utilización del sistema financiero 01
    Cheque cheque Otros con utilización del sistema financiero 20
    Débito bancario debito_cuenta_bancaria Otros con utilización del sistema financiero 20
    Transferencia bancaria transferencia Otros con utilización del sistema financiero 20
    Tarjeta de crédito tarjeta_credito Tarjeta de crédito nacional 19
    Depósito en cuenta (Corriente / Ahorros) deposito_cuenta_bancaria Otros con utilización del sistema financiero 20
    Tarjeta de débito tarjeta_debito Tarjeta de débito 16
    Dinero electrónico Ecuador dinero_electronico_ec Dinero electrónico 17
    Tarjeta prepago tarjeta_prepago Tarjeta prepago 18
    Otros otros Otros con utilización del sistema financiero 20
    Endoso de títulos endoso_titulos Endoso de títulos 21

    Debido a que el Servicio de Rentas Internas exige incluir información del pago, las facturas a crédito se enviarán al SRI con forma de pago "Otros con utilización del sistema financiero".

    Ejemplos de archivos de configuración

    invoice.ini

    Guarda la configuración y queries para la extracción y emisisón electrónica de facturas.

    [Query] 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

    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 = ?

    invoice_buyer = SELECT identificacion, tipo_identificacion, razon_social, direccion, email, telefono FROM FROM DocElectronicoFactura.cabecera WHERE id_factura = ?

    invoice_totals = SELECT total_sin_impuestos, importe_total, propina, descuento FROM DocElectronicoFactura.cabecera WHERE id_factura = ?

    invoice_totals_taxes = SELECT codigo, codigo_porcentaje, base_imponible, valor FROM DocElectronicoFactura.totales_impuestos WHERE id_factura = ?

    items = SELECT id_detalle, codigo_principal, codigo_auxiliar, descripcion, cantidad, precio_unitario, descuento, precio_total_sin_impuestos FROM DocElectronicoFactura.items WHERE id_factura = ?

    item_taxes = SELECT base_imponible, valor, tarifa, codigo, codigo_porcentaje FROM DocElectronicoFactura.items_impuestos WHERE id_detalle = ?

    item_details = SELECT nombre nombre, valor valor FROM DocElectronicoFactura.items_detalles_adicionales WHERE id_detalle = ?

    invoice_additional_information = SELECT columna_de_nombres nombre, columna_de_valores valor FROM DocElectronicoFactura.informacion_adicional WHERE id_detalle = ?

    credit_note.ini

    Guarda la configuración y queries para la extracción y emisisón electrónica de notas de crédito.

    [Query] headers = SELECT id_nota_credito id_local, secuencial, fecha_emision, guia_remision, moneda, clave_acceso, tipo_emision, fecha_emision_documento_modificado, numero_documento_modificado, tipo_documento_modificado, motivo FROM DocElectronicoNotaCredito.cabecera WHERE info.id_nota_credito in (:sequence) ORDER BY id_nota_credito :order

    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 = ?

    credit_note_buyer = SELECT identificacion, tipo_identificacion, razon_social, direccion, email, telefono FROM DocElectronicoNotaCredito.cabecera WHERE id_nota_credito = ?

    credit_note_totals = SELECT total_sin_impuestos, importe_total FROM DocElectronicoNotaCredito.cabecera WHERE id_nota_credito = ?

    credit_note_totals_taxes = SELECT codigo, codigo_porcentaje, base_imponible, valor FROM DocElectronicoNotaCredito.totales_impuestos WHERE id_nota_credito = ?

    items = SELECT id_detalle, codigo_principal, codigo_auxiliar, descripcion, cantidad, precio_unitario, descuento, precio_total_sin_impuestos FROM DocElectronicoNotaCredito.items WHERE id_nota_credito = ?

    item_taxes = SELECT base_imponible, valor, tarifa, codigo, codigo_porcentaje FROM DocElectronicoNotaCredito.items_impuestos WHERE id_detalle = ?

    item_details = SELECT nombre nombre, valor valor FROM DocElectronicoNotaCredito.items_detalles_adicionales WHERE id_detalle = ?

    credit_note_additional_information = SELECT columna_de_nombres nombre, columna_de_valores valor FROM DocElectronicoNotaCredito.informacion_adicional WHERE id_detalle = ?

    retention.ini

    Guarda la configuración y queries para la extracción y emisisón electrónica de retenciones.

    [Query] 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

    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 = ?

    retention_recipient = SELECT identificacion, tipo_identificacion, razon_social, direccion, email, telefono FROM DocElectronicoRetencion.cabecera WHERE id_retencion = ?

    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 = ?

    retention_additional_information = SELECT columna_de_nombres nombre, columna_de_valores valor FROM DocElectronicoRetencion.informacion_adicional WHERE id_retencion = ?

    waybill.ini

    Guarda la configuración y queries para la extracción y emisisón electrónica de guías de remisión.

    [Query] 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

    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 = ?

    waybill_shipper = SELECT identificacion, tipo_identificacion, razon_social, direccion, email, telefono FROM DocElectronicoGuiaRemision.cabecera WHERE id_guia_remision = ?

    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 = ?

    waybill_receiver_items = SELECT id_detalle, descripcion, codigo_principal, codigo_auxiliar, cantidad FROM DocElectronicoGuiaRemision.detalle WHERE id_destinatario = ?

    item_details = SELECT columna_de_nombres nombre, columna_de_valores valor FROM DocElectronicoGuiaRemision.items_detalles_adicionales WHERE id_detalle = ?

    waybill_additional_information = SELECT columna_de_nombres nombre, columna_de_valores valor FROM DocElectronicoRetencion.informacion_adicional WHERE id_retencion = ?

    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