ÍNDICE
1. REQUERIMIENTOS
Características del Requisito
Línea de Producto: | Microsiga Protheus. | ||||||||||||||||||||||||||||||||||||||||||
Segmento: | Servicios- Mercado Internacional. | ||||||||||||||||||||||||||||||||||||||||||
Módulo: | SIGAFAT- Facturación. | ||||||||||||||||||||||||||||||||||||||||||
Rutina: |
| ||||||||||||||||||||||||||||||||||||||||||
Issue: | DMINA-2487, DMINA-2753, DMINA-2978, DMINA-3107, DMINA-3222, DMINA-3693, DMINA-4582, DMINA-5100 (v 12.1.17), DMINA-5175 (v 12.1.17), DMINA-6420, DMINA-5484, DMINA-8877, DMINA-8799 | ||||||||||||||||||||||||||||||||||||||||||
País(es): | Colombia. | ||||||||||||||||||||||||||||||||||||||||||
Base(s) de Datos: | Todas. | ||||||||||||||||||||||||||||||||||||||||||
Sistema(s) operativo(s): | Todos. | ||||||||||||||||||||||||||||||||||||||||||
Tablas utilizadas: |
|
Descripción
La Factura Electrónica es el documento que soporta transacciones de venta de bienes y/o servicios, y que operativamente tiene lugar a través de sistemas computacionales y/o soluciones informáticas que permiten el cumplimiento de las características y condiciones que se establecen en el Decreto 2242 de 2015, compilado en el Decreto Único Reglamentario 1625 de 2016, relativas a la expedición, recibo, rechazo y conservación. La expedición de la factura electrónica comprende la generación por el facturador electrónico y su entrega al adquirente. El facturador electrónico tiene obligaciones registradas en el Registro Único Tributario, y en el decreto se denomina como Obligado a Facturar Electrónicamente.
Para lograr la generación de la factura electrónica debe el sistema de software permitir que tan pronto haya cerrado el registro de la información de la operación de venta, y de que haya almacenado la información de esta operación en forma adecuada, construya el formato XML de acuerdo con las especificaciones técnicas, calcule el CUFE, y aplique el método de firma electrónica avanzada apropiado para su modelo de negocio, y lo almacene en un formato convertible en un archivo de datos de tipo UTF-8.
Características de la Factura Electrónica:
- Utiliza el formato electrónico de generación XML estándar establecido por la DIAN.
- Lleva la numeración consecutiva autorizada por la DIAN.
- Cumple los requisitos del 617 ET y discrimina el impuesto al consumo cuando es el caso.
- Incluye la firma digital o electrónica para garantizar autenticidad e integridad y no repudio de la factura electrónica, de acuerdo con la política de firma adoptada por la DIAN.
- Incluye el Código Único de Factura Electrónica CUFE.
Para dar cumplimiento a la legislación mencionada y de acuerdo a las especificaciones del Anexo Técnico 001 Formatos de los Documentos XML de Facturación Electrónica – Versión 2, en el presente documento se detalla la configuración que se debe realizar para la generación de la factura electrónica.
IMPORTANTE: El Código Único de Facturación Electrónica (CUFE) no es generado por el sistema Protheus, es un datos generado por el proveedor tecnológico The Factory HKA, informado en el XML retornado por el proveedor tecnológico dentro del nodo cbc:UUID (XML contenido en la carpeta autorizados).
Los cambios en la funcionalidad del sistema, derivados de actualizaciones de legislación sobre la factura electrónica, se anuncian al final de este documento. Es necesario revisar cada rubro de actualizaciones para una correcta configuración del sistema y así obtener los resultados esperados.
(Solo para Microsiga Protheus, versiones anteriores a la 12)
Antes de ejecutar el compatibilizador UPDMODMI, es imprescindible:
- Realizar la copia de seguridad de la base de datos del producto que ejecutará el compatibilizador (directorio PROTHEUS_DATA\DATA) y de los diccionarios de datos SX (directorio PROTHEUS_DATA\SYSTEM).
- Los directorios mencionados anteriormente corresponden a la instalación estándar del Protheus, por lo tanto, deben modificarse de acuerdo con el producto instalado en la empresa.
- Esta rutina debe ejecutarse de modo exclusivo, es decir, ningún usuario debe estar utilizando el sistema.
- Si los diccionarios de datos tienen índices personalizables (creados por el usuario), antes de ejecutar el compatibilizador, asegúrese de que están identificados por el nickname. Si el compatibilizador necesita crear índices, los agregará a partir del orden original instalado por el Protheus, lo que podrá ocasionar la superposición de índices personalizados, si no están identificados por el nickname.
- El compatibilizador debe ejecutarse con la Integridad referencial desactivada*.
Atención ¡El siguiente procedimiento debe realizarlo un profesional calificado como Administrador de base de datos (DBA) o su equivalente! La activación indebida de la integridad referencial puede modificar drásticamente la relación entre tablas en la base de datos. Por lo tanto, antes de utilizarla, observe atentamente el siguiente procedimiento: 1. En el Configurador (SIGACFG), verifique si la empresa utiliza Integridad referencial, seleccionando la opción Integridad/Verificación (APCFG60A). 2. Si no hay Integridad referencial activa, se listan en una nueva ventana todas las empresas y sucursales registradas en el sistema y ninguna de estas estará seleccionada. SOLAMENTE en este caso no es necesario ningún otro procedimiento de activación o desactivación de integridad, basta finalizar la verificación y aplicar normalmente el compatibilizador, de acuerdo con las instrucciones. 3. Si la Integridad referencial está activa en todas las empresas y sucursales, se muestra un mensaje en la ventana Verificación de vínculo entre tablas. Confirme el mensaje para que se concluya la verificación, o; 4. Si existe Integridad referencial activa en una o más empresas, que no representan la totalidad, se listan en una nueva ventana todas las empresas y sucursales registradas en el sistema y solamente se seleccionarán las que tienen integridad. Anote las empresas y/o sucursales que tienen la integridad activada y reserve esta anotación para posterior consulta en la reactivación (o incluso, entre en contacto con nuestro Help Desk Framework para informarse sobre los archivos que contienen esta información). 5. En los casos descritos en los ítems “iii” o “iv”, Y SOLO EN ESTOS CASOS, es necesario desactivar dicha integridad, seleccionando la opción Integridad/ Desactivar (APCFG60D). 6. Al desactivar la Integridad referencial, ejecute el compatibilizador, de acuerdo con las instrucciones. 7. Después de aplicar el compatibilizador, la Integridad referencial debe reactivarse, SOLAMENTE CUANDO se haya desactivado, por medio de la opción Integridad/Activar (APCFG60). Para ello, tenga a disposición la información de la(s) empresa(s) y/o sucursal(es) que tenía(n) activación de la integridad, selecciónela(s) nuevamente y confirme la activación.
¡EN CASO DE DUDAS, entre en contacto con el Help Desk Framework! |
- En Microsiga Protheus TOTVS Smart Client, digite UPDMODMI en el campo Programa Inicial. Importante: Para que se actualice correctamente el diccionario de datos, asegúrese de que la fecha del compatibilizador sea igual o superior al 18/04/2018.
- Haga clic en OK para continuar.
- Después de confirmar, aparece una pantalla para seleccionar la empresa en la cual se modificará el diccionario de datos o aparece la ventana para seleccionar el compatibilizador. Deberá seleccionar el módulo “SIGAFAT – Facturación” y posteriormente el actualizador “03 - Factura Electrónica v2”.
- Al confirmar, se muestra un mensaje de advertencia sobre la copia de seguridad y la necesidad de su ejecución de modo exclusivo.
- Haga clic en Procesar para iniciar el procesamiento. El primer paso de la ejecución es la preparación de los archivos.
- Se muestra un mensaje explicativo en la pantalla.
- A continuación, se muestra la ventana Actualización concluida con el historial (log) de todas las actualizaciones procesadas. En este log de actualización se muestran únicamente los campos actualizados por el programa. El compatibilizador crea los campos que aún no existen en el diccionario de datos.
- Haga clic en Grabar para guardar el historial (log) mostrado.
- Haga clic en OK para finalizar el procesamiento.
1.1 Procedimientos de Implantación
El sistema se actualiza inmediatamente después de aplicar el paquete de actualizaciones (Patch) de este issue.
- Aplique el patch del issue y ejecute una vez la rutina UPDMODMI (este proceso sólo aplica para versión 11.8). Es importante respaldar el repositorio de objetos (RPO) antes de aplicar la actualización.
- En el módulo Configurador (SIGACFG), acceda a Actualizaciones | Diccionario de datos | Parámetros y configure el siguiente parámetro con la ruta donde se encuentran archivos .csv para carga de catálogos:
Nombre de la Variable: | MV_PATH814 |
Tipo: | C |
Descripción: | Ruta local donde se encuentran los archivos en formato .csv. |
Valor Estándar: |
El paquete de solución del issue contiene:
- Patch de actualización al RPO con rutinas actualizadas.
Scripts ejemplo de generación de archivos XML (Factura Electrónica):
FATSCOL.INI - Facturas y notas de débito nacionales.
FATSECOL.INI - Facturas y notas de débito de exportación.
FATECOL.INI - Notas de crédito nacionales y de exportación.
Debe crear una estructura de carpetas dentro de la ruta del ambiente (protheus_data\system) en donde deben ser copiados estos archivos. En el mismo árbol de carpetas se alojarán las facturas electrónicas generadas por el sistema así como los documentos autorizados. Los nombres de cada carpeta deben ser configurados en los parámetros MV_CFDDOCS, MV_CFDANUL, MV_CFDFTS, MV_CFDFTSE y MV_CFDFTE, consulte la sección 7. Creación o modificación de Parámetros. Se sugiere la siguiente estructura y nombres de carpetas:Carpeta
Uso/descripción
Parámetro relacionado
cfd Carpeta principal de comprobantes fiscales digitales. cfd\facturas Almacén de documentos electrónicos generados por el sistema. MV_CFDDOCS cfd\facturas\autorizados Almacén de documentos autorizados por la DIAN. cfd\anuladas Almacén de documentos anulados. MV_CFDANUL cfd\inicfd Scripts de generación de archivos xml. MV_CFDFTS, MV_CFDFTSE y MV_CFDFTE - Archivos tipo .CSV que corresponden a los catálogos definidos por la DIAN para la Factura Electrónica. Debe copiar estos archivos a la ruta establecida en el parámetro MV_PATH814, descrito más adelante en este documento. Descargar archivo catalogosDIAN.zip
En el caso de que haya actualizaciones a esos catálogos, publicados en el Anexo Técnico 001 Formatos de los Documentos XML de Facturación Electrónica – Versión 2, disponible en el portal de la DIAN, realice los siguientes pasos para actualizar las tablas del sistema:
- Exporte o transcriba las tablas, una por una, hacia una planilla de cálculo en msExcel. en donde la Columna A=Código, Columna B=Descripción, sin encabezados y asegurando que los códigos que comienzan con uno o más 0 (cero) conserven esa característica (columna o celda tipo texto).
Grabe la planilla en un archivo tipo .CSV (delimitado por comas) con campos separados por el carácter pipe (|), es posible que deba cambiar la configuración regional del sistema operativo. El nombre de los archivos debe corresponder con la lista siguiente de acuerdo a la enumeración de los catálogos en el anexo mencionado previamente:
Nombre de archivo
Descripción del catálogo
01TiposFactura.csv Tipos de factura. 02TiposDocIdentidad.csv Tipos de documentos de identidad. 03ConceptoNotasCredito.csv Concepto de notas de crédito. 04ConceptoNotasDebito.csv Concepto de notas de débito. 05ImpuestosFE.csv Impuestos registrados en la factura electrónica. 06MediosPago.csv Medios de pago. 07Monedas.csv Monedas. 08Paises.csv Países. 09TiposOrganizacionJuridica.csv Tipos de organización jurídica; Tipos de adquiriente. 10TiposRegimenIVA.csv Tipos de régimen IVA. 11Incoterms.csv Inconterms. 12TiposPago.csv Tipos de pago. 13TiposRepresentacion.csv Tipos de representación. 14TiposObligacionesResp.csv Tipos de obligaciones-responsabilidades. 15TiposUsuariosAduaneros.csv Tipos de usuarios aduaneros. 16TiposEstablecimientos.csv Tipos de establecimientos. - Coloque los archivos en la ruta informada en el parámetro del sistema MV_PATH814, descrito más adelante en este documento.
Consulte la sección 4. Anexo Técnico versión 1.8 DIAN para información sobre actualizaciones a los catálogos y reglas de validación.
1.2 Actualizaciones del compatibilizador
(Solamente para Microsiga Protheus, versiones anteriores a la versión 12).
1. Creación de Preguntas en el archivo SX1 – Archivo de Preguntas:
Grupo: MATA486
Orden | 01 | 02 | 03 | 04 | 05 | 06 | 07 |
Pregunta | ¿Tipo de Documento? | ¿Serie? | ¿Estatus | ¿Fecha Inicial? | ¿Fecha Final? | ¿Tipo Nota Ajuste? | ¿Envío a Email? |
Tipo | N | C | C | D | D | N | N |
Tamaño | 1 | 3 | 1 | 8 | 8 | 1 | 1 |
Variable | MV_PAR01 | MV_PAR02 | MV_PAR03 | MV_PAR04 | MV_PAR05 | MV_PAR06 | MV_PAR07 |
Validación | |||||||
Objeto | C-Combo | G - Get | G - Get | G - Get | G - Get | C-Combo | C - Combo |
Consulta Estándar | SERNF | ||||||
Preselección | 1 | ||||||
Opciones | Factura | Ninguna Débito Crédito | Si No |
IMPORTANTE
Si la rutina de Documentos Electrónicos (MATA486), tiene fecha superior o igual al 23/12/2022, la pregunta de ¿Envío de Email?, debe configurarse en el Orden 07 (MV_PAR07), en caso contrario debe configurarse en el Orden 06 (MV_PAR06)
Grupo: MATA486A
Orden | 01 | 02 | 03 |
Pregunta | ¿Serie de la Factura? | ¿Factura Inicial? | ¿Factura Final? |
Tipo | C | C | C |
Tamaño | 3 | 13 | 13 |
Validación | !Empty(MV_PAR03) .And. MV_PAR02<=MV_PAR03 | ||
Objeto | G | G | G |
Consulta Estándar | SERNF | ||
Preselección | |||
Opciones |
Grupo: MATA486B
Orden | 01 | 02 | 03 |
Pregunta | ¿Serie de la Nota de Debito? | ¿Nota de Debito Inicial? | ¿Nota de Debito Final? |
Tipo | C | C | C |
Tamaño | 3 | 13 | 13 |
Validación | !Empty(MV_PAR03) .And. MV_PAR02<=MV_PAR03 | ||
Objeto | G | G | G |
Consulta Estándar | SERNF | ||
Preselección | |||
Opciones |
Grupo: MATA486C
Orden | 01 | 02 | 03 |
Pregunta | ¿Serie de la Nota de Credito? | ¿Nota de Debito Credito? | ¿Nota de Debito Credito? |
Tipo | C | C | C |
Tamaño | 3 | 13 | 13 |
Validación | !Empty(MV_PAR03) .And. MV_PAR02<=MV_PAR03 | ||
Objeto | G | G | G |
Consulta Estándar | SERNF | ||
Preselección | |||
Opciones |
Grupo: M486PDF
Orden | 01 | 02 | 03 | 04 |
Pregunta | ¿Serie del Documento? | ¿Documento inicial? | ¿Documento final? | ¿Formato? |
Tipo | C | C | C | N |
Tamaño | 3 | 13 | 13 | 1 |
Objeto | G | G | G | C |
Preselección | 0 | 0 | 0 | 1 |
Opciones | PDF/E-mail |
2. Creación de tablas en el archivo SX2– Tablas:
Clave | Nombre | Modo | PYME |
F3H | Configuración de Catálogos | C | S |
F3I | Información de Catálogos | C | S |
3. Creación o modificación de Tablas Genéricas en el archivo SX5 – Tablas Genéricas:
N/A
4. Creación de campos en el archivo SX3 – Campos:
Tabla F3H - Configuración de Catálogos.
Campo | F3H_FILIAL |
Tipo | C |
Tamaño | 2 |
Decimal | 0 |
Formato | |
Título | Sucursal |
Descripción | Sucursal |
Nivel | 1 |
Utilizado | No |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Digite el código de la sucursal. |
Campo | F3H_CODIGO |
Tipo | C |
Tamaño | 4 |
Decimal | 0 |
Formato | @! |
Título | Código |
Descripción | Código del parámetro |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | Sí |
Opciones | |
When | |
Relación | |
Val. Sistema | NaoVazio() .and. ExistChav("F3H", M->F3H_CODIGO,1) .and. FreeForUse("F3H",M->F3H_CODIGO) |
Help | Código del parámetro. |
Campo | F3H_DESC |
Tipo | C |
Tamaño | 30 |
Decimal | 0 |
Formato | @! |
Título | Descripción |
Descripción | Descripción del parámetro |
Nivel | |
Utilizado | Sí |
Obrigatório | Sí |
Browse | Sí |
Opciones | |
When | |
Relación | |
Val. Sistema | NAOVAZIO() |
Help | Descripción del parámetro. |
Campo | F3H_ORDEM |
Tipo | C |
Tamaño | 2 |
Decimal | 0 |
Formato | 99 |
Título | Orden |
Descripción | Orden del Parámetro |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Orden del parámetro. |
Campo | F3H_CAMPOS |
Tipo | C |
Tamaño | 10 |
Decimal | 0 |
Formato | AXXXXXXXXX |
Título | Campos |
Descripción | Nombre del Campo |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | NaoVazio() .and. f812VerChav("F3H",M->F3H_CAMPOS) |
Help | Incluir el nombre del campo. |
Campo | F3H_DESCPO |
Tipo | C |
Tamaño | 25 |
Decimal | |
Formato | @! |
Título | Desc.Campo |
Descripción | Descripción del Campo |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Incluir la descripción del campo. |
Campo | F3H_TIPO |
Tipo | C |
Tamaño | 1 |
Decimal | |
Formato | @! |
Título | Tipo |
Descripción | Tipo |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Opciones | N=Numérico;C=Carácter;D=Fecha |
When | F812Valid() |
Relación | |
Val. Sistema | NaoVazio() .and. Pertence("NCD") .and. f812ChkTipo(M->F3H_TIPO) |
Help | Incluya el tipo de campo. C = Carácter, D = Fecha, N = Numérico. |
Campo | F3H_TAMAN |
Tipo | N |
Tamaño | 3 |
Decimal | |
Formato | 999 |
Título | Tamaño |
Descripción | Tamaño del Campo |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Opciones | |
When | F812Valid() |
Relación | |
Val. Sistema | NaoVazio() .and. F812ChkTaman(M->F3H_TAMAN) |
Help | Incluir el tamaño del campo. Obs: si el campo fuera tipo D=Fecha, el tamaño debe ser igual a 8. |
Campo | F3H_DECIMA |
Tipo | N |
Tamaño | 2 |
Decimal | |
Formato | 99 |
Título | Decimal |
Descripción | Decimal |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | F812Valid() |
Relación | |
Val. Sistema | f812ChkDec(M->F3H_DECIMA) |
Help | Incluir el número de decimales que tendrá el campo. Campos tipo: Fecha y Carácter No tiene decimales |
Campo | F3H_PICTUR |
Tipo | C |
Tamaño | 45 |
Decimal | 0 |
Formato | @! |
Título | Formato |
Descripción | Formato |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Digite la máscara para la exhibición del campo. Ej.: "@E 999,99 |
Campo | F3H_VALID |
Tipo | C |
Tamaño | 120 |
Decimal | 0 |
Formato | @! |
Título | Validación |
Descripción | Validación del Usuario |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Agregar una validación del campo si es necesario. Ej,: Entre("01","10",M-> F3H_TAMAN,.T.) En el caso que la función utilizada sea "PERTENECE", deberá informarse el campo como segundo parámetro. Ej.: Pertence("12",cCampo) |
Campo | F3H_PADRAO |
Tipo | C |
Tamaño | 6 |
Decimal | |
Formato | @! |
Título | Cons.Estand. |
Descripción | Consulta Estandar |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | f812ConsPad() |
Help | Digite una consulta estándar para la tabla. |
Campo | F3H_VERSAO |
Tipo | C |
Tamaño | 3 |
Decimal | |
Formato | @! |
Título | Versión |
Descripción | Versión |
Nivel | 1 |
Utilizado | No |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Versión del catálogo. |
Campo | F3H_PESQ |
Tipo | C |
Tamaño | 1 |
Decimal | |
Formato | @! |
Título | ¿Usado Busq? |
Descripción | ¿Usado en la Busqueda? |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | 1=Si;2=No |
When | |
Relación | |
Val. Sistema | |
Help | ¿Usado en la Búsqueda de la Consulta Estándar (SXB)? Informar Si para utilizar este campo como clave simples de búsqueda. |
Tabla F3I - Información de Catálogos.
Campo | F3I_FILIAL |
Tipo | C |
Tamaño | 2 |
Decimal | 0 |
Formato | |
Título | Sucursal |
Descripción | Sucursal |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Informe el código de la sucursal. |
Campo | F3I_CODIGO |
Tipo | C |
Tamaño | 4 |
Decimal | 0 |
Formato | @! |
Título | Código |
Descripción | Código del parámetro |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | EXISTCPO("F31") |
Help | Informe el contenido de identificación del ítem de la lista. Por ejemplo, si la lista de modificación es la lista de países, este campo corresponde al código de identificación del país. |
Campo | F3I_SEQUEN |
Tipo | C |
Tamaño | 5 |
Decimal | |
Formato | 99999 |
Título | Secuencia |
Descripción | Secuencia |
Nivel | |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Secuencia. |
Campo | F3I_CONTEU |
Tipo | C |
Tamaño | 250 |
Decimal | |
Formato | @! |
Título | Contenido |
Descripción | Contenido de tabla |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | |
Help | Informe el contenido. |
Tabla CTO - Monedas.
Campo | CTO_MOESAT |
Tipo | C |
Tamaño | 3 |
Decimal | |
Formato | @! |
Título | Moneda DIAN |
Descripción | Moneda DIAN |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Si |
Browse | Sí |
Opciones | |
When | |
Consulta | COL007 |
Val. Sistema | Vazio() .or. ValidF3I("S007", M->CTO_MOESAT,1,3) |
Help | Clave de moneda de acuerdo al catálogo de la DIAN. |
Tabla SFB - Impuestos Variables.
Campo | FB_IMPSAT |
Tipo | C |
Tamaño | 3 |
Decimal | |
Formato | @! |
Título | Impuesto FE |
Descripción | Impuesto factura electr. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Si |
Browse | Sí |
Opciones | |
When | |
Consulta | COL005 |
Val. Sistema | Vazio() .or. ValidF3I("S005", M->FB_IMPSAT,1,3) |
Help | Clave de impuesto registrado en |
Campo | FB_RIMPSAT |
Tipo | C |
Tamaño | 1 |
Decimal | |
Formato | @! |
Título | Régimen IVA |
Descripción | Tipo de régimen IVA. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | COL010 |
Val. Sistema | Vazio() .or. ValidF3I("S010", M->FB_RIMPSAT,1,1) |
Help | Tipo de régimen IVA. |
Campo | FB_CLASSE |
Tipo | C |
Tamaño | 1 |
Decimal | 0 |
Formato | @! |
Título | Clase Imp |
Descripción | Clase Impuesto |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | I=Impuesto;P=Percepcion;R=Retencion |
Val. Sistema | PERTENCE("IPR") |
Help | Tipo de clase de impuesto: Impuesto/Percepción/Retención. |
Tabla SFP - Control de Formularios.
Campo | FP_CAI |
Tipo | C |
Tamaño | 16 |
Decimal | 0 |
Título | Nº Aprob. |
Descripción | Nº aprob. de paginas |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | Sí |
Help | Número autorización: Número o código de la resolución otorgada para la numeración. |
Campo | FP_SERIE2 |
Tipo | C |
Tamaño | 4 |
Decimal | 0 |
Formato | @! |
Título | Serie 2 |
Descripción | Serie 2 |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | Sí |
Val. Sistema | NaoVazio() |
Help | Serie a 4 dígitos que será informada a la DIAN. |
Campo | FP_DTRESOL |
Tipo | D |
Tamaño | 8 |
Decimal | 0 |
Título | Fch Resoluc. |
Descripción | Fecha de Resolución |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | Sí |
Help | Fecha Autorización: Fecha Autorización de la numeración. |
Campo | FP_NRCERT |
Tipo | C |
Tamaño | 38 |
Decimal | 0 |
Título | Clave Tecnic |
Descripción | Clave Técnica |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | Sí |
Help | Clave técnica del rango de facturación. |
Tabla SA1 - Clientes.
Campo | A1_TIPDOC |
Tipo | C |
Tamaño | 7 |
Decimal | |
Formato | @! |
Título | Tipo Doc. |
Descripción | Tipo Documento Identidad |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL002 |
Val. Sistema | Vazio() .or. ValidF3I("S002", M->A1_TIPDOC,1,7) |
Help | Tipo de documento de identidad. |
Tabla SC5 - Pedidos de venta.
Campo | C5_INCOTER |
Tipo | C |
Tamaño | 3 |
Decimal | |
Formato | @! |
Título | Incoterm |
Descripción | Clave del INCOTERM de la factura. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL011 |
Val. Sistema | Vazio() .or. ValidF3I("S011", M->C5_INCOTER,1,3) |
Help | Clave del INCOTERM aplicable a la factura. |
Campo | C5_TIPOPE |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | Tipo Oblig. |
Descripción | Tipo de oblig.-resp. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | COL014 |
Val. Sistema | Vazio() .or. ValidF3I("S014", M->C5_TIPOPE,1,4) |
Help | Tipo de obligaciones-responsabilidades. |
Campo | C5_CVEPED |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | Usua. Aduan. |
Descripción | Tipo de usuario aduanero |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | COL015 |
Val. Sistema | Vazio() .or. ValidF3I("S015", M->C5_CVEPED,1,4) |
Help | Tipo de usuario aduanero. |
Campo | C5_TRASLA |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | T.Establecim |
Descripción | Tipo establecimiento |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL016 |
Val. Sistema | Vazio() .or. ValidF3I("S016", M->C5_TRASLA,1,4) |
Help | Tipo de establecimiento. |
Tabla SF2 - Facturas de venta / Notas de débito cliente.
Campo | F2_DOC |
Tipo | C |
Tamaño | 13 |
Decimal | 0 |
Formato | @! |
Título | Num. Doc. |
Descripción | Número de Documento |
Nivel | 1 |
Utilizado | Si |
Obrigatório | Si |
Browse | Sí |
Val. Sistema | ExistChav("SF2",M->F2_DOC+M->F2_SERIE) .and. CtrFolios(xFilial("SF2"),M->F2_SERIE,M->F2_ESPECIE,M->F2_DOC) .AND. LXEXSER2() |
Help | Número de la Factura. |
Campo | F2_SERIE |
Tipo | C |
Tamaño | 3 |
Decimal | 0 |
Formato | @! |
Título | Serie Doc. |
Descripción | Serie del Documento |
Nivel | 1 |
Utilizado | Si |
Obrigatório | No |
Browse | Sí |
Val. Sistema | MAFISREF("NF_SERIENF","MT100",M->F2_SERIE) .and. LxExSer2() |
Help | Serie de la Factura. |
Campo | F2_SERIE2 |
Tipo | C |
Tamaño | 4 |
Decimal | 0 |
Formato | @! |
Título | Serie-2 Doc. |
Descripción | Serie 2 del Documento |
Nivel | 1 |
Utilizado | Si |
Obrigatório | No |
Browse | No |
Val. Sistema | |
When | !(funname() $ 'MATA467N/MATA462N/MATA465N') |
Help | Serie 2 de la Factura. |
Campo | F2_INCOTER |
Tipo | C |
Tamaño | 3 |
Decimal | |
Formato | @! |
Título | Incoterm |
Descripción | Clave del INCOTERM de la factura. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | COL011 |
Val. Sistema | Vazio() .or. ValidF3I("S011", M->F2_INCOTER,1,3) |
Help | Clave del INCOTERM aplicable a la factura. |
Campo | F2_TIPOPE |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | Tipo Oblig. |
Descripción | Tipo de oblig.-resp. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | COL014 |
Val. Sistema | Vazio() .or. ValidF3I("S014", M->F2_TIPOPE,1,4) |
Help | Tipo de obligaciones-responsabilidades. |
Campo | F2_UUID |
Tipo | C |
Tamaño | 40 |
Decimal | 0 |
Formato | @! |
Título | Folio Fiscal |
Descripción | Folio Fiscal |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Help | Folio fiscal de timbrado CUFE. |
Campo | F2_TIPREF |
Tipo | C |
Tamaño | 1 |
Decimal | 0 |
Formato | @! |
Título | Tipo Nota D |
Descripción | Tipo de nota de débito |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | SÍ |
Browse | No |
Consulta | COL004 |
Val. Sistema | Vazio() .or. ValidF3I("S004", M->F2_TIPREF,1,1) |
Help | Catálogo 8.4. Concepto de Notas débito conforme definición de la DIAN. |
Campo | F2_MOTIVO |
Tipo | M |
Tamaño | 100 |
Decimal | 0 |
Formato | @! |
Título | Motivo |
Descripción | Motivo |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Help | Motivo por el cuál se emite el documento. |
Campo | F2_CVEPED |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | Usua. Aduan. |
Descripción | Tipo de usuario aduanero |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | COL015 |
Val. Sistema | Vazio() .or. ValidF3I("S015", M->F2_CVEPED,1,4) |
Help | Tipo de usuario aduanero. |
Campo | F2_TRASLA |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | T.Establecim |
Descripción | Tipo establecimiento |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL016 |
Val. Sistema | Vazio() .or. ValidF3I("S016", M->F2_TRASLA,1,4) |
Help | Tipo de establecimiento. |
Campo | F2_FLFTEX |
Tipo | C |
Tamaño | 1 |
Decimal | |
Formato | @! |
Título | Status Trans |
Descripción | Estatus transmision elec |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | 0=No Enviado;1=Enviado a Proveedor ;4=Esperando procesamiento;5=Rechazado;6=Autorizado |
When | |
Consulta | |
Val. Sistema | |
Help | Indica el estatus del documento una vez que ha sido enviado al Proveedor. |
Campo | F2_HORA |
Tipo | C |
Tamaño | 8 |
Decimal | 0 |
Formato | @! |
Título | Hora |
Descripción | Hora |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Campo | F2_URI |
Tipo | C |
Tamaño | 45 |
Decimal | |
Formato | @! |
Título | Cons URI |
Descripción | URI para consulta |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | |
Val. Sistema | |
Help | Uri para consulta. |
Tabla SF1 - Notas de crédito cliente.
Campo | F1_DOC |
Tipo | C |
Tamaño | 13 |
Decimal | 0 |
Formato | @! |
Título | Num. Doc. |
Descripción | Número de Documento |
Nivel | 1 |
Utilizado | Si |
Obrigatório | Si |
Browse | Sí |
Val. Sistema | fValSerDoc() |
Help | Número de la Factura del proveedor. |
Campo | F1_SERIE |
Tipo | C |
Tamaño | 3 |
Decimal | 0 |
Formato | @! |
Título | Serie Doc. |
Descripción | Serie del Documento |
Nivel | 1 |
Utilizado | Si |
Obrigatório | No |
Browse | Sí |
Val. Sistema | MAFISREF("NF_SERIENF","MT100",M->F1_SERIE) .And. fValSerDoc() |
Help | Serie de la Factura. |
Campo | F1_SERIE2 |
Tipo | C |
Tamaño | 4 |
Decimal | 0 |
Formato | @! |
Título | Serie-2 Doc. |
Descripción | Serie 2 del Documento |
Nivel | 1 |
Utilizado | Si |
Obrigatório | No |
Browse | No |
When | !(funname() $ 'MATA467N/MATA462N/MATA465N') |
Help | Serie 2 de la Factura de acuerdo a la DIAN. |
Campo | F1_INCOTER |
Tipo | C |
Tamaño | 3 |
Decimal | |
Formato | @! |
Título | Incoterm |
Descripción | Clave del INCOTERM de la factura. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL011 |
Val. Sistema | Vazio() .or. ValidF3I("S011", M->F1_INCOTER,1,3) |
Help | Clave del INCOTERM aplicable a la factura. |
Campo | F1_TIPOPE |
Tipo | C |
Tamaño | 4 |
Decimal | 0 |
Formato | @! |
Título | Tipo Oblig. |
Descripción | Tipo de oblig.-resp. |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL014 |
Val. Sistema | Vazio() .or. ValidF3I("S014", M->F1_TIPOPE,1,4) |
Help | Tipo de obligaciones-responsabilidades. |
Campo | F1_TIPREF |
Tipo | C |
Tamaño | 1 |
Decimal | |
Formato | @! |
Título | Tipo Nota C |
Descripción | Tipo de nota de Credito |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Consulta | COL003 |
Val. Sistema | Vazio() .or. ValidF3I("S003", M->F1_TIPREF,1,1) |
Help | Catálogo 8.4. Concepto de Notas Crédito conforme definición de la DIAN. |
Campo | F1_MOTIVO |
Tipo | M |
Tamaño | 100 |
Decimal | 0 |
Formato | @! |
Título | Motivo NCC |
Descripción | Motivo de nota de crédito |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | No |
Opciones | |
When | |
Consulta | |
Val. Sistema | |
Help | Motivo por el cuál se emite el documento |
Campo | F1_CVEPED |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | Usua. Aduan. |
Descripción | Tipo de usuario aduanero |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL015 |
Val. Sistema | Vazio() .or. ValidF3I("S015", M->F1_CVEPED,1,4) |
Help | Tipo de usuario aduanero. |
Campo | F1_TRASLA |
Tipo | C |
Tamaño | 4 |
Decimal | |
Formato | @! |
Título | T.Establecim |
Descripción | Tipo establecimiento |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | Sí |
Opciones | |
When | |
Consulta | COL016 |
Val. Sistema | Vazio() .or. ValidF3I("S016", M->F1_TRASLA,1,4) |
Help | Tipo de establecimiento. |
Campo | F1_FLFTEX |
Tipo | C |
Tamaño | 1 |
Decimal | |
Formato | @! |
Título | Status Trans |
Descripción | Estatus transmision elec |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | 0=No Enviado;1=Enviado a Proveedor;4=Esperando procesamiento;5=Rechazado;6=Autorizado |
When | |
Consulta | |
Val. Sistema | |
Help | Indica el estatus del documento una vez que ha sido enviado al Proveedor. |
Campo | F1_URI |
Tipo | C |
Tamaño | 45 |
Decimal | |
Formato | @! |
Título | Cons URI |
Descripción | URI para consulta |
Nivel | 1 |
Utilizado | Sí |
Obrigatório | No |
Browse | No |
Opciones | |
When | |
Consulta | |
Val. Sistema | |
Help | Uri para consulta. |
Tabla SYA - Países.
Campo | YA_CCEDIAN |
Tipo | C |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Pais DIAN |
Descripción | Clave del Pais de la DIAN |
Nivel | 0 |
Utilizado | Sí |
Obrigatório | Sí |
Browse | Sí |
Consulta | COL008 |
Val. Sistema | Vazio() .or. ValidF3I("S008", M->YA_CCEDIAN,1,2) |
Help | Código de país de acuerdo a catálogo de la DIAN. |
Tabla AI0 - Complemento de Clientes:
Campo | AI0_RECE |
Tipo | C |
Tamaño | 30 |
Decimal | 0 |
Formato | |
Título | Email Recep. |
Descripción | Email para Recepción FE |
Nivel | 1 |
Utilizado | Si |
Obrigatório | No |
Browse | No |
Help | Indica el Email de Recepción (Buzón Tributario de la DIAN), en caso de que no sea el mismo al informado en el campos Email (A1_EMAIL) del Cliente, y será utilizado para el envío automático al realizar la transmisión de documentos electrónicos o al realizar el envío desde la opción Imprimir PDF / Envío de Email. |
Importante:
El tamaño de los campos que disponen de grupo puede variar de acuerdo con el entorno en uso.
5. Creación o modificación de Consulta Estándar en el archivo SXB – Consulta Estándar:
Búsqueda COL001:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL001 | 1 | 01 | RE | Tipos de Factura | F3I |
COL001 | 2 | 01 | 01 | Tipos de Factura | F812SXB("S001","Codigo") |
COL001 | 5 | 01 | VAR_IXB |
Búsqueda COL002:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL002 | 1 | 01 | RE | Tipos de Docs de Identidad | F3I |
COL002 | 2 | 01 | 01 | Tipos de Docs de Identidad | F812SXB("S002","Codigo") |
COL002 | 5 | 01 | VAR_IXB |
Búsqueda COL003:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL003 | 1 | 01 | RE | Conceptos de Notas de Crédito | F3I |
COL003 | 2 | 01 | 01 | Conceptos de Notas de Crédito | F812SXB("S003","Codigo") |
COL003 | 5 | 01 | VAR_IXB |
Búsqueda COL004:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL004 | 1 | 01 | RE | Conceptos de Notas de Débito | F3I |
COL004 | 2 | 01 | 01 | Conceptos de Notas de Débito | F812SXB("S004","Codigo") |
COL004 | 5 | 01 | VAR_IXB |
Búsqueda COL005:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL005 | 1 | 01 | RE | Impuestos Factura Electrónica | F3I |
COL005 | 2 | 01 | 01 | Impuestos Factura Electrónica | F812SXB("S005","Codigo") |
COL005 | 5 | 01 | VAR_IXB |
Búsqueda COL006:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL006 | 1 | 01 | RE | Medios de Pago | F3I |
COL006 | 2 | 01 | 01 | Medios de Pago | F812SXB("S006","Codigo") |
COL006 | 5 | 01 | VAR_IXB |
Búsqueda COL007:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL007 | 1 | 01 | RE | Monedas | F3I |
COL007 | 2 | 01 | 01 | Monedas | F812SXB("S007","Codigo") |
COL007 | 5 | 01 | VAR_IXB |
Búsqueda COL008:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL008 | 1 | 01 | RE | Países | F3I |
COL008 | 2 | 01 | 01 | Países | F812SXB("S008","Codigo") |
COL008 | 5 | 01 | VAR_IXB |
Búsqueda COL009:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL009 | 1 | 01 | RE | Tipos de Org Jurídica; Adquir. | F3I |
COL009 | 2 | 01 | 01 | Tipos de Org Jurídica; Adquir. | F812SXB("S009","Codigo") |
COL009 | 5 | 01 | VAR_IXB |
Búsqueda COL010:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL010 | 1 | 01 | RE | Tipos de Régimen IVA | F3I |
COL010 | 2 | 01 | 01 | Tipos de Régimen IVA | F812SXB("S010","Codigo") |
COL010 | 5 | 01 | VAR_IXB |
Búsqueda COL011:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL011 | 1 | 01 | RE | Incoterms | F3I |
COL011 | 2 | 01 | 01 | Incoterms | F812SXB("S011","Codigo") |
COL011 | 5 | 01 | VAR_IXB |
Búsqueda COL012:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL012 | 1 | 01 | RE | Tipos de Pago | F3I |
COL012 | 2 | 01 | 01 | Tipos de Pago | F812SXB("S012","Codigo") |
COL012 | 5 | 01 | VAR_IXB |
Búsqueda COL013:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL013 | 1 | 01 | RE | Tipos de Representación | F3I |
COL013 | 2 | 01 | 01 | Tipos de Representación | F812SXB("S013","Codigo") |
COL013 | 5 | 01 | VAR_IXB |
Búsqueda COL014:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL014 | 1 | 01 | RE | Tipos de Obligaciones-Respon. | F3I |
COL014 | 2 | 01 | 01 | Tipos de Obligaciones-Respon. | F812SXB("S014","Codigo") |
COL014 | 5 | 01 | VAR_IXB |
Búsqueda COL015:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL015 | 1 | 01 | RE | Tipos de Usuarios Aduaneros | F3I |
COL015 | 2 | 01 | 01 | Tipos de Usuarios Aduaneros | F812SXB("S015","Codigo") |
COL015 | 5 | 01 | VAR_IXB |
Búsqueda COL016:
Alias | Tipo | Secuencia | Columna | Descripción | Contém |
COL016 | 1 | 01 | RE | Tipos de Establecimientos | F3I |
COL016 | 2 | 01 | 01 | Tipos de Establecimientos | F812SXB("S016","Codigo") |
COL016 | 5 | 01 | VAR_IXB |
6. Creación de Índices en el archivo SIX – Índices:
Índice | F3H |
Orden | 1 |
Clave | F3H_FILIAL+F3H_CODIGO |
Descripción | Código |
Propietario | S |
Índice | F3H |
Orden | 2 |
Clave | F3H_FILIAL+F3H_DESC |
Descripción | Descripción |
Propietario | S |
Índice | F3H |
Orden | 3 |
Clave | F3H_FILIAL+F3H_CAMPOS+F3H_CODIGO |
Descripción | Campos + Código |
Propietario | S |
Índice | F3I |
Orden | 1 |
Clave | F3I_FILIAL+F3I_CODIGO+F3I_SEQUEN |
Descripción | Código + Secuencia |
Propietario | S |
7. Creación o modificación de Parámetros en el archivo SX6 – Parámetros:
Nombre de la Variable | MV_F3HNUM |
Tipo | C |
Descripción | Almacena el último número del código del parámetro. |
Valor Estándar | U000 |
Nombre de la Variable | MV_PATH814 |
Tipo | C |
Descripción | Ruta donde se encuentran los catálogos de la DIAN; archivos en formato csv. Ejemplo: C:\CATALOGOSDIAN |
Valor Estándar |
Nombre de la Variable | MV_CFDFTE |
Tipo | C |
Descripción | Indica el directorio y archivo con la estructura para la generación de factura electrónica para doc. de entrada (NCC). |
Valor Estándar | GetSrvProfString('startpath','')+'\cfd\inicfd\fatecol.ini |
Nombre de la Variable | MV_CFDFTS |
Tipo | C |
Descripción | Indica el directorio y archivo con la estructura para la generación de factura electrónica para doc. de salida (NF/NDC). |
Valor Estándar | GetSrvProfString('startpath','')+'\cfd\inicfd\fatscol.ini |
Nombre de la Variable | MV_CFDFTSE |
Tipo | C |
Descripción | Indica el directorio donde se encuentra el archivo con la estructura para la generación de factura electrónica de Exportación para doc. de salida (NF/NDC). |
Valor Estándar |
Nombre de la Variable | MV_CFDDOCS |
Tipo | C |
Descripción | Directorio donde se grabarán las facturas electrónicas. |
Valor Estándar | GetSrvProfString('startpath','')+'\cfd\facturas\ |
Nombre de la Variable | MV_CFDANUL |
Tipo | C |
Descripción | Directorio donde se grabarán las facturas electrónicas anuladas. |
Valor Estándar |
Nombre de la Variable | MV_CFDIAMB |
Tipo | C |
Descripción | Ambiente de trabajo de certificación de factura electrónica:1=Producción, 2=Homologación. |
Valor Estándar |
Nombre de la Variable | MV_PROVFE |
Tipo | C |
Descripción | Identifica el Facturador Electrónico o el Proveedor Tecnológico de servicios de certificación de factura electrónica. Indicar: DFACTURA |
Valor Estándar |
Nombre de la Variable | MV_TPRESOB |
Tipo | C |
Descripción | Tipo de obligaciones y responsabilidades. |
Valor Estándar |
De acuerdo a la tabla Tipos de obligaciones-responsabilidades publicada en el Anexo Técnico 001. Formatos de los Documentos XML de Fac-e V2 y descrito ampliamente en el Anexo Técnico 003. Mecanismos Sistema Tecnico de Control V2 disponibles en el sitio de la DIAN.
Nombre de la Variable | MV_NCCONL |
Tipo | C |
Descripción | Indica el tipo de compensación OnLine para documentos de tipo Notas de Crédito, con opciones: 1 - Usa Factura Electrónica y compensa en línea. 2 - Usa Factura Electrónica y no compensa en línea (existe tiempo de espera en retorno de estatus de timbrado). 3 - No usa Factura Electrónica y compensa en línea. |
Valor Estándar |
NOTA: Si el parámetro MV_NCCONL no existe o se encuentra vacío la funcionalidad se comporta de la siguiente manera:
- Para México: opción 1.
- Para Chile, Colombia, Ecuador y Perú: opción 2.
- Para todos los países que no pertenecen a los anteriores: opción 3. Si el país utiliza Facturación Electrónica pero el ambiente no está configurado para esta funcionalidad el parámetro deberá contener esta opción para permitir compensación Online.
En los siguientes parámetros (MV_RETF05?) se deben registrar los códigos fiscales aplicables a cada concepto que se indica en la descripción. Si para un concepto aplica más de un código fiscal, se deben separar por el caracter “|” (pipe). Todos los impuestos variables de retención en la fuente deben configurarse con el código “05” correspondiente a la tabla S005 - Impuestos Factura Electrónica (rutina Actualizaciones | Archivos | Mantenimiento Catálogos).
Nombre de la Variable | MV_RETF053 |
Tipo | C |
Descripción | Códigos fiscales de compras. |
Valor Estándar |
Nombre de la Variable | MV_RETF055 |
Tipo | C |
Descripción | Códigos fiscales de honorarios. |
Valor Estándar |
Nombre de la Variable | MV_RETF056 |
Tipo | C |
Descripción | Códigos fiscales de servicios generales. |
Valor Estándar |
Nombre de la Variable | MV_RETF057 |
Tipo | C |
Descripción | Códigos fiscales de transporte de carga. |
Valor Estándar |
Importante:
Los siguientes parámetros aplican si en la implementación se utilizará el servicio web Dfactura del Proveedor Tecnológico The Factory HKA para la certificación de los comprobantes fiscales:
Nombre de la Variable | MV_ID_PWD |
Tipo | C |
Descripción | Password de la habilitación como software para la emisión de facturas. |
Valor Estándar |
Importante:
Nombre de la Variable | MV_TKN_EMP |
Tipo | C |
Descripción | Token Empresa - The Factory HKA. |
Valor Estándar |
Nombre de la Variable | MV_TKN_PAS |
Tipo | C |
Descripción | Token Password - The Factory HKA. |
Valor Estándar |
CONFIGURACIÓN DE PARÁMETROS
En el Configurador (SIGACFG), acceda a Entornos/Archivos/Parámetros (CFGX017). Configure los parámetros a continuación:
Ítems/Carpetas | Descripción |
Nombre: | MV_PATH814 |
Tipo: | C |
Contenido: | |
Descripción: | Ruta local (computadora cliente) donde se encuentran los catálogos de la DIAN; archivos en formato csv. Por ejemplo: C:\CATALOGOSDIAN |
Nombre: | MV_CFDDOCS |
Tipo: | C |
Contenido: | |
Descripción: | Directorio donde se grabarán las facturas electrónicas. |
Nombre: | MV_CFDANUL |
Tipo: | C |
Contenido: | |
Descripción: | Directorio donde se grabarán las facturas electrónicas anuladas. |
Nombre: | MV_CFDFTS |
Tipo: | C |
Contenido: | |
Descripción: | Indica el directorio donde se encuentra el archivo con la estructura para la generación de factura electrónica para doc. de salida (NF/NDC). |
Nombre: | MV_CFDFTSE |
Tipo: | C |
Contenido: | |
Descripción: | Indica el directorio donde se encuentra el archivo con la estructura para la generación de factura electrónica exportación para doc. de salida (NF/NDC). |
Nombre: | MV_CFDFTE |
Tipo: | C |
Contenido: | |
Descripción: | Indica el directorio donde se encuentra el archivo con la estructura para la generación de factura electrónica para doc. de entrada (NCC). |
Nombre: | MV_CFDIAMB |
Tipo: | C |
Contenido: | |
Descripción: | Indica el ambiente de trabajo de certificación de factura electrónica:1=Producción, 2=Homologación. |
Nombre: | MV_PROVFE |
Tipo: | C |
Contenido: | |
Descripción: | Identifica el Facturador Electrónico o el Proveedor Tecnológico de servicios de certificación de factura electrónica. Por ejemplo: DFACTURA |
Configure los siguientes parámetros si se utilizará el servicio web Dfactura del Proveedor Tecnológico The Factory HKA para la certificación de los comprobantes fiscales:
Nombre: | MV_TKN_EMP |
Tipo: | C |
Contenido: | |
Descripción: | Token Empresa - The Factory HKA. |
Nombre: | MV_TKN_PAS |
Tipo: | C |
Contenido: | |
Descripción: | Token Password - The Factory HKA. |
Para la funcionalidad de envío de la factura electrónica (archivos xml y pdf) por e-mail a clientes, es necesario configurar los siguientes parámetros:
Nombre: | MV_RELSERV |
Tipo: | C |
Contenido: | |
Descripción: | Servidor de envío de e-mail. |
Nombre: | MV_RELACNT |
Tipo: | C |
Contenido: | |
Descripción: | Cuenta a ser utilizada en el envío de e-mail. |
Nombre: | MV_RELPSW |
Tipo: | C |
Contenido: | |
Descripción: | Contraseña de la cuenta de e-mail. |
En caso de que el servidor de correo requiera autenticación, se deben configurar los siguientes parámetros:
Nombre: | MV_RELATH |
Tipo: | L |
Contenido: | .T. |
Descripción: | Servidor de email requiere autenticación. |
Nombre: | MV_RELSSL |
Tipo: | L |
Contenido: | |
Descripción: | Habilita el SSL en el envío y recepción de emails. |
Nombre: | MV_RELTLS |
Tipo: | L |
Contenido: | |
Descripción: | El servidor de SMTP tiene conexion del tipo segura ( SSL/TLS ). |
Nombre: | MV_SRVPORT |
Tipo: | N |
Contenido: | |
Descripción: | Puerto de salida del servidor de envío. |
Si no se define este parámetro, el sistema usa el puerto estándar 25, en este caso es importante no incluir el puerto en la identificación del servidor de correo, parámetro MV_RELSERV.
Nombre: | MV_RELAUSR |
Tipo: | C |
Contenido: | |
Descripción: | Usuario para autenticación en el servidor de correo. |
Nombre: | MV_RELAPSW |
Tipo: | C |
Contenido: | |
Descripción: | Contraseña para autenticación en servidor de email. |
CONFIGURACIÓN DE MENÚS.
2. En el Configurador (SIGACFG), acceda a Entornos/Archivo/Menú (CFGX013). Informe la nueva opción de menú del informe el módulo SIGAFAT, conforme las instrucciones a continuación:
Menú | Actualizaciones. |
Submenú | Archivos. |
Nombre de la Rutina | Definición de Catálogos. |
Programa | FISA812 |
Módulo | Facturación. |
Tipo | Función Protheus. |
Menú | Actualizaciones. |
Submenú | Archivos. |
Nombre de la Rutina | Mantenimiento de Catálogos. |
Programa | FISA813 |
Módulo | Facturación. |
Tipo | Función Protheus. |
Menú | Actualizaciones. |
Submenú | Facturación. |
Nombre de la Rutina | Transmitir Factura Electron. |
Programa | MATA486 |
Módulo | Facturación. |
Tipo | Función Protheus. |
1.3 Procedimiento de Utilización
1. Ingrese a la rutina de definición de catálogos (Facturación SIGAFAT | Actualizaciones | Archivos | Definición de catálogos) para crear automáticamente los catálogos de Factura Electrónica a partir de los archivos .CSV.
2. En la rutina de mantenimiento de catálogos (Facturación SIGAFAT | Actualizaciones | Archivos | Mantenimiento de catálogos) se puede verificar el contenido de los catálogos creados.
En caso de que la certificación de los comprobantes fiscales se vaya a realizar a través del servicio web Dfactura de The Factory HKA, debe modificar el catálogo S005 - Impuestos Factura Electrónica, de acuerdo al listado que el Proveedor Tecnológico maneja.
Adicionalmente, configure uno o varios códigos especiales para autorretenciones. Las claves no deben estar en uso por el Proveedor Tecnológico ni por la DIAN y deben ser alfanuméricos. Por ejemplo: 0A.
Consulte la sección 4. Anexo Técnico versión 1.8 DIAN para información sobre actualizaciones a los catálogos y reglas de validación.
3. Configure la relación entre las tablas del sistema y los catálogos publicados por la DIAN en el documento:
Anexo Técnico 001. Formatos de los Documentos XML de Fac-e V2 .Por ejemplo:
- Monedas (Contabilidad de Gestión (SIGACTB) | Actualizaciones | Archivos | Monedas Contables): Defina el código DIAN (estándar ISO 4217), conforme al inciso 8.7 del documento mencionado.
- Impuestos variables (Libros Fiscales (SIGAFIS) | Actualizaciones | Archivos | Impuestos Variab.): Defina el código de impuesto y régimen de IVA de la DIAN, conforme a los incisos 8.5 y 8.10 respectivamente. Ver nota del punto 2.
También configure la clase de impuesto: I-Impuesto, P-Percepción, R-Recepción (o Retención). Para autorretenciones como es el caso del CREE, tenga en cuenta vincular el impuesto correspondiente con los códigos especiales descritos en el inciso - Países (Easy Import Control (SIGAEIC) | Actualizaciones | Archivos | Países): Defina los códigos de la DIAN (estándar ISO 3166-1), conforme al inciso 8.8.
- Unidades de medida (Facturación (SIGAFAT) | Actualizaciones | Archivos | Unidades Medida): También, registre los códigos en relación a los definidos para el comercio internacional de acuerdo a la recomendación de la UNECE.
Consulte la sección 4. Anexo Técnico versión 1.8 DIAN para información sobre actualizaciones a los catálogos y reglas de validación.
4. En la tabla de Control de folios (Libros Fiscales (SIGAFIS) | Actualizaciones | Archivos | Impuestos Variab.) registre los datos para cada serie y especie:
- Folios: Folios inicial y final autorizados.
- Número autorización: Número o código de la resolución otorgada para la numeración.
- Fecha Resolución: Fecha de autorización de la numeración.
- Fecha de validez: Fecha de vencimiento de la autorización.
- Serie 2: Serie a 4 dígitos que será informada a la DIAN.
- Clave técnica: Número de serie del rango de facturación.
Adicionalmente, en la rutina de tablas genéricas (Configurador Protheus (SIGACFG) | Entorno | Archivos | Tablas), acceda a la tabla 01 - Series de Facturas y registre los consecutivos de las series correspondientes.
5. En el catálogo de clientes (Facturación (SIGAFAT) | Actualizaciones | Archivos | Clientes) registre la información requerida para la factura electrónica. Los datos requeridos para incluir en la factura electrónica son:
- Persona física/jurídica (A1_PESSOA).
- Nombre (A1_NOME).
- Dirección (A1_END).
- Barrio/Colonia (A1_BAIRRO).
- Municipio (A1_MUN).
- Estado/Provincia/Región (A1_EST) y su correspondiente descripción en la tabla genérica "12" (SX5).
- País (A1_PAIS) y su correspondiente descripción en la tabla de países (SYA).
- Tipo de documento (A1_TIPDOC).
- NIT (A1_CGC) o RG para persona fisica, Tarjeta de Ciudadania, Tarjeta de Extranjero o Tarjeta de Identidad del Cliente (A1_PFISICA).
- Tipo de persona/régimen tributario (A1_TPESSOA).
- Cuenta de correo electrónico (A1_EMAIL) - Opcional.
Opcionalmente, puede configurar estos campos como obligatorios a través del configurador de Protheus (SIGACFG | Base de Datos | Base de Datos), contacte al administrador del sistema para realizar estas configuraciones.
6. Registre facturas de venta (Facturación (SIGAFAT) | Actualizaciones | Facturación | Facturación). A continuación realice la transmisión electrónica (Facturación (SIGAFAT) | Actualizaciones | Facturación | Facturación Electrónica), podrá imprimir los comprobantes en PDF y/o enviarlos por email.
7. Registre notas de débito (Facturación (SIGAFAT) | Actualizaciones | Facturación | Notas de Cred./Deb.) por conceptos de intereses y gastos por cobrar. A continuación realice la transmisión electrónica, podrá imprimir los comprobantes en PDF y/o enviarlos por email.
8. Registre notas de crédito (Facturación (SIGAFAT) | Actualizaciones | Facturación | Notas de Cred./Deb.) por devolución, anulación y descuentos. A continuación realice la transmisión electrónica, podrá imprimir los comprobantes en PDF y/o enviarlos por email.
9. Realice el mismo procedimiento para generar facturas de venta, notas de débito y notas crédito de exportación, ejecute la transmisión electrónica.
La representación impresa de un comprobante electrónico (PDF) consta de los elementos necesarios indicados por la autoridad, entre los cuales se destaca:
- Nombre, NIT y dirección del emisor
- Nombre, NIT y dirección del receptor
- Serie, consecutivo y fecha del comprobante
- Conceptos de la operación (productos)
- IVA, total de impuestos, total de retenciones, total de descuentos
- Importe en letra
- Para el caso de facturas de venta el CUFE
- Código de barras QR-Code formado de acuerdo a las especificaciones de la DIAN; para documentos tipo NF
- De manera similar, también se imprime código QR-Code para documentos tipo NDC y NCC, sin CUFE
- La autorretenciones se muestran de manera informativa al pie del documento
Si por cualquier circunstancia, la impresión estándar de los documentos no se ajusta al formato de la empresa, se debe utilizar el punto de entrada M486PDFGEN para personalizar la representación gráfica de cada tipo de documento.
Al transmitir un documento, si obtiene como resultado el mensaje "Se encontraron inconsistencias", proceda a imprimir el log de errores en el cual se informa el motivo de rechazo. Generalmente se tratará de un dato incorrecto o sin definir en la tabla de:
- Control de folios.
- Clientes.
- Impuestos variables.
- Unidades de medida.
Si la transmisión es "exitosa", de acuerdo al método de certificación, eso indica:
- Proveedor Tecnológico (Por ejemplo The Factory HKA): La factura electrónica fue validada y aceptada, se envió a la DIAN.
2. BITÁCORA DE CAMBIOS
2.1 FACTURA ELECTRÓNICA VALIDACIÓN PREVIA
2.1.1 Visión general
Realizar la transmisión de documentos electrónicos en el modelo de Facturación Electrónica con Validación Previa a la Dirección de Impuestos y Aduana Nacionales (DIAN), consumiendo los web services del proveedor tecnológico The Factory HKA.
El sustento legal y toda la información referente a Factura Electrónica se encuentra en el sitio de la DIAN.
NOTA: Para la implantación del proceso de validación previa, se deberá de contar con las configuraciones del modelo de validación posterior descrito en el inciso 1.REQUERIMIENTOS
Documentos a transmitir:
- Factura de Venta
- Nota de Débito
- Nota de Crédito
- Facturas de Venta/Nota de Débito/Nota de Crédito de Exportación
PROCEDIMIENTO DE IMPLANTACIÓN
Nota: La actualizaciones presentadas a continuación son compatibles con versiones mayor o igual a 12.1.17
1.- Se recomienda realizar un respaldo del repositorio de objetos (RPO) antes de aplicar el paquete de actualización (patch).
2.- Aplicar el paquete de actualización (patch) del presente issue, el cual contiene las siguientes rutinas:
Rutinas | Fecha Actualización |
---|---|
FISA814.PRW | 08/08/2019 |
FISA827.PRW | 08/08/2019 |
LOCXNF.PRW | 19/082019 |
LOCXNF2.RW | 19/082019 |
M486XFUN.PRW | 08/08/2019 |
M486XFUNCO.PRW | 19/082019 |
MATA468N.PRX | 16/08/2019 |
MATA486.PRW | 19/082019 |
WSNFECOL.PRW | 08/08/2019 |
FATSCOL.INI | 08/08/2019 |
FATECOL.INI | 08/08/2019 |
FATSECOL.INI | 20/08/2019 |
MATN030.PRX | 16/08/2019 |
3.- Realizar las actualizaciones al diccionario de datos de acuerdo a la sección 05, Diccionario de datos, del presente documento técnico.
4.- En el módulo Configurador (SIGACFG) acceda a Actualizaciones | Diccionario de Datos | Parámetros.
- Configurar el parámetro MV_TIPOFE con valor 1 para que la transmisión electrónica sea por modelo de validación previa.
- Configurar el parámetro MV_PATH814 con la ruta donde se encuentran los archivos con formato .csv para la carga de catálogos de la DIAN.
- Configurar el parámetro MV_WSRTSS con la URL de los web services de The Factory HKA para el modelo de validación previa. (Se debe informar la URL de acuerdo al ambiente en el que se esté realizando la transmisión electrónica; pruebas o producción, dicha URL es proporcionada por el proveedor tecnológico).
5.- En la ruta configurada en el parámetro MV_PATH814 actualizar los archivos 05ImpuestosFE.csv, 10TiposRegimen.csv y 14TiposObligacionesResp.csv, y agregar el nuevo archivo 17TiposOperacion.csv.
Importante: Las actualizaciones a los catálogos deberán de ser de acuerdo al anexo Estructura UBL y Validaciones Factura Electrónica 2.1 Versión 2, y se deberán borrar en las tablas F3I y F3H los registros de los catálogos S005, S010 y S014.
Tasa de Cambio
Para la generación documentos en moneda diferente de pesos colombianos (COP) en el XML se deberá tenerse creado el nodo cac:PaymentExchangeRate, para lo cual se deberán agregar las siguientes líneas en los archivos con extensión .INI:
En la sección de XXX INICIALIZACION agregar la línea:
(PRE) _aTotal[109] := Posicione("CTO",1,xFilial("CTO")+Strzero(SF2→F2_MOEDA,2),"CTO_MOESAT")
En la sección XXX RECEPTOR agregar las siguientes líneas después de la finalización del nodo PaymentTerms:
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyCode>' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '</cbc:SourceCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyBaseRate>1.00</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyCode>' + "COP" + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyBaseRate>1.00</cbc:TargetCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:CalculationRate>' + Alltrim(Str(SF2->F2_TXMOEDA,11,2)) + '</cbc:CalculationRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:Date>' + _aTotal[095] + '</cbc:Date>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' </cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
Documento Referenciado
Para la generación del nodo AdditionalDocumentReference, en el script de generación del archivo XML, FATSCOL.INI, deben existir las siguientes líneas de tal manera que el nodo se genere en la raíz del nodo fe:Invoice :
//Documentos referenciados (solo facturas)
(PRE) _aTotal[001] += IIf(SF2->(ColumnPos("F2_UUIDREL")) > 0 .And. AllTrim(SF2->F2_ESPECIE)=="NF",M486DRCOL(SF2->F2_UUIDREL,1),"")
Ejemplo del nodo:
<cac:AdditionalDocumentReference>
<cbc:ID>60</cbc:ID>
<cbc:DocumentTypeCode>AIJ</cbc:DocumentTypeCode> (Debe corresponder a valores de la tabla S018 - REFERENCIA A OTROS DOCUMENTOS)
<cbc:IssueDate>2020-02-05</cbc:IssueDate>
</cac:AdditionalDocumentReference>
Donde :
Atributo | Tamaño | Path |
---|---|---|
numeroDocumento | 20 | fe:Invoice/cac:AdditionalDocumentReference/cbc:ID |
fecha | 10 | fe:Invoice/cac:AdditionalDocumentReference/cbc:IssueDate |
tipoDocumentoCodigo | 20 | fe:Invoice/cac:AdditionalDocumentReference/cbc:DocumentTypeCode |
codigoInterno | 1 | "1" |
Importante: Los documentos referenciados son tomados del campo Docs Relacs (F2_UUIDREL), el formato de captura debe ser:
t/n/aaaa-mm-dd
En donde:
t = Tipo de documento
n = Número de documento
aaaaa-mm-dd = Fecha del documento (año-mes-día)
Por ejemplo AIJ/60/2020-02-05, si es necesario registrar más de una referencia, cada documento debe ir en una línea,
Los diferentes Tipos de Documento deben registrarse en el catálogo S018 - REFERENCIA A OTROS DOCUMENTOS, en la rutina Mantenimiento de Catálogos (Verificar la estructura de que debe contener el archivo 18CodigoReferenciaDocs.csv).
Orden de Compra
Para la generación del nodo OrderReference, en el script de generación del archivo XML, FATSCOL.INI, deben existir las siguientes líneas de tal manera que el nodo se genere en la raíz del nodo fe:Invoice:
// Orden de Compra
(PRE) _aTotal[001] += IIf(SF2->(ColumnPos("F2_UUIDREL")) > 0 .And. AllTrim(SF2->F2_ESPECIE)=="NF",M486DRCOL(SF2→F2_UUIDREL,2),"")
Ejemplo del nodo:
<cac:OrderReference>
<cbc:ID>156</cbc:ID>
<cbc:IssueDate>2020-02-05</cbc:IssueDate>
</cac:OrderReference>
Atributo | Tamaño | Path |
---|---|---|
numeroDocumento | 20 | fe:Invoice/cac:OrderReference/cbc:ID |
fecha | 10 | fe:Invoice/cac:OrderReference/cbc:IssueDate |
Información
El dato es tomado del campo Docs Relacs (F2_UUIDREL), el formato de captura debe ser:
ORDC/n/aaaa-mm-dd
En donde:
ORDC = Acrónimo de Orden de Compra (valor fijo)
n = Número de documento
aaaaa-mm-dd = Fecha del documento (año-mes-día)
Por ejemplo ORDC/156/2020-02-05. Solo se permite informar una orden de compra de referencia por factura.
IMPORTANTE: Se recomienda no utilizar el / en los datos de la Orden de Compra ya que es el caracter utilizado como separador de la información necesaria para la Orden de Compra.
7.- Para el nodo de actividadEconomicaCIIU se deberá configurar el campo C.Actividad (A1_ATIVIDAD) del Cliente.
El archivo 05ImpuestosFE.csv deberá tener la siguiente estructura:
Importante: En el módulo Facturación (SIGAFAT) desde Actualizaciones | Archivos | Impuestos Variables (MATA995), se deberán re-configurar para cada impuesto el campo Impuesto FE (FB_IMPSAT) con los valores definidos por la DIAN, con la última actualización de catálogo S005 - IMPUESTOS FACTURA ELECTRÓNICA.
El archivo 10TiposRegimen.csv deberá tener la siguiente estructura:
El archivo 14TiposObligacionesResp.csv deberá tener la siguiente estructura:
El archivo 17TiposOperacion.csv deberá tener la siguiente estructura:
El archivo 18CodigoReferenciaDocs.csv deberá tener la siguiente estructura:
8.- En la ruta configurada en los parámetros MV_CFDFTS, MV_CFDFTE y MV_CFDFTSE, actualizar los archivos FATSCOL.INI, FATSECOL.INI y FATECOL.INI.
Consulte la sección 4. Anexo Técnico versión 1.8 DIAN para información sobre actualizaciones a los catálogos y reglas de validación.
2.1.2 Ejemplo de utilización.
Clientes
Nacionales, se les deben configurar los campos de Código de Departamento (A1_EST) y Código de Municipio (A1_COD_MUN)
Atributos para envió de datos del cliente:
Atributo | Tamaño | Path |
---|---|---|
telefono | 20 | fe:Invoice/fe:AccountingCustomerParty/cac:Party/cac:Contact/cbc:Telephone |
1000 | fe:Invoice/fe:AccountingCustomerParty/cac:Party/cbc:ElectronicMail |
NOTA: El departamento y municipio deben estar homologados con los códigos y descripciones de acuerdo a los puntos 6.4.2 Departamentos y 6.4.3 Municipios del anexo definido por la DIAN:
Configurar el Tipo de régimen del cliente, modificando el cliente y ejecutando desde Otras Acciones | Complementos del cliente.
Configurar las Responsabilidades tributarias del cliente, modificando el cliente y ejecutando desde Otras Acciones | Resp. Obligaciones DIAN.
Configurar los Tributos del cliente, modificando el cliente y ejecutando desde Otras Acciones | Tributos DIAN.
Para Facturas de Venta, Nota de Crédito y Nota de Débito
Desde el módulo Facturación (SIGAFAT) registrar los siguientes documentos:
- Factura de Venta/Factura de Venta de Exportación (Actualizaciones | Facturación | Facturaciones).
- Nota de Crédito (Actualizaciones | Facturación | Generac. de Notas de Crédito/Débito).
- Nota de Débito (Actualizaciones | Facturación | Generac. de Notas de Crédito/Débito).
En la captura de los documentos se debe informar el Tipo de operación (F1_TIPOPE/F2_TIPOPE).
Desde el módulo Facturación (SIGAFAT) acceder a Actualizaciones | Facturación | Facturación Electrónica (MATA486)
a) En los parámetros indicar el Tipo y Serie del documento a transmitir.
b) Ejecutar la acción Transmitir.
c) Indicar los parámetros de la serie y rango de folios a transmitir.
d) Una vez finalizado el proceso se visualizará el log donde se podrá consultar si la transmisión fue exitosa; en caso de haber inconsistencias, proceda a realizar las configuraciones necesarias e intente transmitir nuevamente.
e) Si el documento transmitido retorna código 200-Respuesta satisfactoria, el documento quedará con estatus Documento autorizado (Verde), si el código de retorno es 201 - El documento se entregó a DIAN, estamos a la espera del resultado de validación el documento quedará en estatus Pendiente de procesamiento (Amarillo) y cualquier otro código de retorno quedará con estatus No Transmitido (Gris).
f) Si los documentos transmitidos quedaron en estatus 201 - El documento se entregó a DIAN, estamos a la espera del resultado de validación, se deberá consultar mediante la acción Monitor para actualizar el estatus en Protheus de acuerdo a la respuesta de la DIAN, en caso de que el documento haya sido rechazado, mediante el botón Errores que se encuentra en la parte inferior de la pantalla Monitor se podrán visualizar las observaciones del documento.
a) Pantalla de factura electrónica
b) Otras Acciones / Acciones relacionadas
Acción | Descripción |
---|---|
Monitor | Permite realizar la consulta del estatus de los documentos ante la DIAN. |
Recupera XML | Permite descargar una copia de la factura electrónica (archivos XML y PDF) desde el sitio del proveedor tecnológico. |
Imprimir PDF | Permite descargar e imprimir la factura electrónica (archivo PDF) desde el sitio del proveedor tecnológico. |
Visualizar | Presenta visualización del documento fiscal. |
Leyenda | Muestra descripción de los estatus de documentos en el browse. |
c) Impresión de documentos electrónicos
Importante: La impresión de documento en formato PDF obedece a la configuración del parámetro MV_PDFPRO.
Desde Otras acciones, ejecutar la acción Imprimir PDF.
Informar los parámetros del rango de documentos a imprimir.
Se imprime el documento electrónico en formato PDF.
d) Envío de documentos electrónicos(Correo Electrónico)1
La funcionalidad de Envío de documentos electrónicos, se implementó a partir del issue DMINA-8271, para la cual se debe consideras lo siguiente:
El parche debe contener la siguiente rutina:
Rutina | Nombre Técnico | Fechas del Parche |
---|---|---|
M486PDFCOL.PRX | Impresión de Representación Impresa Facturación Electrónica Colombia | 19/02/2020 |
También se deben realizar las siguiente configuraciones:
- Configurar los parámetros MV_RELSERV, MV_RELACNT, MV_RELPSW, MV_RELAUTH, MV_RELSSL, MV_RELTLS y MV_SRVPORT como se muestra en la sección "04 - Diccionario de Datos".
- Configurar el Cliente como a continuación:
Importante: El cliente debe tener informado el campo E-MAIL (A1_EMAIL) con la dirección de correo a donde se requiera mandar los documentos.
Al finalizar la configuración de pre-condiciones, realice lo siguiente para validar la funcionalidad:
Desde Otras acciones, ejecutar la acción Imprimir PDF:
Informar los parámetros del rango de documentos a enviar por E-mail:
Se espera mensaje de confirmación del envío, en donde indica la cantidad de documentos procesados:
Se confirma que se recibe el correo con la información solicitada adjunta en un archivo .ZIP:
2.1.3 Diccionario de datos
El usuario debe realizar las siguientes actualizaciones al diccionario de datos a través del módulo Configurador de Protheus (SIGACFG):
Nota:
- Parámetros necesarios para el envío de documentos vía correo electrónico.
Nombre de la variable | MV_RELSERV |
Tipo | Carácter |
Descripción | Nombre de Servidor de Envío de E-mail utilizado en los informes. |
Valor Estándar | SMTP.Office365.com |
Nombre de la variable | MV_RELACNT |
Tipo | Carácter |
Descripción | Cuenta a ser utilizada en el envio de E-Mail para lo informes. |
Valor Estándar | Correo electrónico emisor |
Nombre de la variable | MV_RELPSW |
Tipo | Carácter |
Descripción | Contraseña de cta. de E-mail para enviar informes |
Valor Estándar | Contraseña del correo emisor |
Nombre de la variable | MV_RELAUTH |
Tipo | Lógico |
Descripción | Determina si el servidor requiere Autenticacion. |
Valor Estándar | .T. |
Nombre de la variable | MV_RELSSL |
Tipo | Lógico |
Descripción | Define si debe habilitarse el SSL en el envio y recepcion de e-mails |
Valor Estándar | .T. |
Nombre de la variable | MV_RELTLS |
Tipo | Lógico |
Descripción | Informe si el servidor de SMTP tiene conexion del tipo segura ( SSL/TLS ). |
Valor Estándar | .T. |
Nombre de la variable | MV_SRVPORT |
Tipo | Númerico |
Descripción | Puerto de conexión del servidor de E-mail. |
Valor Estándar | 587 |
NOTA: Las siguientes actualizaciones fueron incorporadas en los pacotes 006386 - DMINA-7002 - FACT. ELECTRÓNICA VAL. PREVIA COL V 1 y 006600 - DMINA-7459 - FACTURACIÓN ELECTRÓNICA VAL PREV COL.
1. Creación de parámetro en el archivo SX6 - Parámetros:
Nombre de la variable | MV_TIPOFE |
Tipo | Carácter |
Descripción | Modelo de transmisión electrónica: 0 o vacío = Val. Posterior, 1 = Val. Previa. |
Valor Estándar | 1 |
Nombre de la variable | MV_PDFPRO |
Tipo | Carácter |
Descripción | Habilita la impresión de documentos electrónicos en formato PDF de Protheus: 1 = Sí, 2 = No. |
Valor Estándar | 2 |
Nombre de la variable | MV_IMPMILL |
Tipo | Carácter |
Descripción | Contiene los códigos de impuestos que son calculados al millar, separados por "|" (Por ejemplo ICA). |
Valor Estándar |
Nota:
- Actualmente se tiene funcional la opción 2, para la impresión del documento electrónico en formato PDF del proveedor tecnológico The Factory HKA.
2. Creación de consulta estándar en el archivo SXB - Consulta Estándar:
Alias | Tipo | Secuencia | Columna | Descripción | Contenido |
COL017 | 1 | 01 | RE | Tipo Operación | F3I |
COL017 | 2 | 01 | 01 | Tipo Operación | F812SXB("S017","Codigo",{||Substr(F3I_CONTEU,85,3)==IIf(FunName()$'MATA410','NF ',cEspecie)}) |
COL017 | 5 | 01 | VAR_IXB |
3. Creación de tablas en el archivo SX2 - Tablas:
Clave | Nombre | Modo | Modo Unidade | Modo Empresa |
---|---|---|---|---|
AIT | Responsabilidades-Tributos Clie | Compartido | Exclusivo | Exclusivo |
4. Creación de campos en el archivo SX3 - Campos:
Campo | AIT_FILIAL |
Orden | 01 |
Tipo | Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Sucursal |
Descripción | Sucursal del sistema |
Nivel | 1 |
Utilizado | No |
Obligatorio | No |
Browse | No |
Val. Sistema | No aplica |
Grp. Campos | 033 |
Help | Código que identifica la sucursal de la empresa usuaria del sistema. |
Campo | AIT_CODCLI |
Orden | 02 |
Tipo | Carácter |
Tamaño | Debe corresponder al configurado en el grupo de campos 001. |
Decimal | 0 |
Formato | @! |
Título | Cód. Cliente |
Descripción | Código del cliente |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | No aplica |
Grp. Campos | 001 |
Help | Código que individualiza a cada uno de los clientes de la empresa. Se complementa con el código de la tienda. |
Campo | AIT_LOJA |
Orden | 03 |
Tipo | Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Tienda |
Descripción | Código de la tienda |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | No aplica |
Grp. Campos | 002 |
Help | Código que identifica la tienda del cliente. Permite que haya un control de las operaciones por tienda. |
Campo | AIT_CODRES |
Orden | 04 |
Tipo | Carácter |
Tamaño | 4 |
Decimal | 0 |
Formato | @! |
Título | Cód. Resp. |
Descripción | Código resp. fiscal |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | Vazio() .Or. ValidF3I("S014", M->AIT_CODRES,1,4) |
Consulta | COL014 |
Help | Código de la obligación o responsabilidad fiscal del cliente de acuerdo al RUT del adquirente. |
Campo | AIT_CODTRI |
Orden | 05 |
Tipo | Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Cód. Tributo |
Descripción | Código del tributo. |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | Vazio() .Or. ValidF3I("S005", M->AIT_CODTRI,1,3) |
Consulta | COL005 |
Help | Código de identificador del tributo (acuerdo al numeral 6.2.2 de la DIAN). |
Campo | AIT_TIPO |
Orden | 06 |
Tipo | Carácter |
Tamaño | 1 |
Decimal | 0 |
Formato | @! |
Título | Tipo |
Descripción | Tipo de información |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | No aplica |
Help | Indica la opción del tipo de registro, teniendo las opciones R=Responsabilidades o T=Tributo. |
Campo | AI0_TPREG |
Orden | 18 |
Tipo | Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Tipo Régimen |
Descripción | Tipo de Régimen |
Nivel | 1 |
Utilizado | Si |
Obligatorio | Obligatorio |
Browse | No |
Val. Sistema | Vazio() .Or. ValidF3I("S010", M->AI0_TPREG,1,2) |
Consulta | COL010 |
Help | Indica el régimen al que pertenece el adquirente, lista las opciones del catálogo S010 - Tipo de régimen (Facturación electrónica). |
Campo | F1_UUID |
Orden | ZZ |
Tipo | Carácter |
Tamaño | 96 |
Decimal | 0 |
Formato | @! |
Título | CUFE |
Descripción | Cód. Único de Fact. Elect |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | |
Consulta | |
Help | Contiene el código único de facturación electrónica (CUFE). |
5. Creación de índices en el archivo SIX - Índices:
Índice | AIT |
Orden | 1 |
Clave | AIT_FILIAL+AIT_CODCLI+AIT_LOJA+AIT_TIPO |
Descripción | Sucursal + Cód. Cliente + Tienda + Tipo |
Propietario | S |
6. Modificación de campos en el archivo SX3 - Campos:
Campo | F1_TIPOPE |
Orden | ZZ |
Tipo | Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Tipo Oper. |
Descripción | Tipo de operación |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | Vazio() .or. ValidF3I("S017", M->F1_TIPOPE,1,2) |
Consulta | COL017 |
Help | Indica el tipo de operación del documento, de acuerdo al punto 6.1.5 de códigos relacionados con documentos definida por la DIAN. |
Campo | F2_TIPOPE |
Orden | ZZ |
Tipo | Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Tipo Oper. |
Descripción | Tipo de operación |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | Vazio() .or. ValidF3I("S017", M->F2_TIPOPE,1,2) |
Consulta | COL017 |
Help | Indica el tipo de operación del documento, de acuerdo al punto 6.1.5 de códigos relacionados con documentos definida por la DIAN. |
Campo | F2_UUID |
Orden | ZZ |
Tipo | Carácter |
Tamaño | 96 |
Decimal | 0 |
Formato | @! |
Título | CUFE |
Descripción | Cód. Único de Fact. Elect |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | |
Consulta | |
Help | Contiene el código única de facturación electrónica. |
Campo | C5_TIPOPE |
Orden | ZZ |
Tipo | Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Tipo Oper. |
Descripción | Tipo de operación |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | Vazio() .or. ValidF3I("S017", M->C5_TIPOPE,1,2) |
Consulta | COL017 |
Help | Indica el tipo de operación del documento, de acuerdo al punto 6.1.5 de códigos relacionados con documentos definida por la DIAN. |
Para la funcionalidad de Ordenes de Compra (cac:OrderReference) y Referencias adicionales (cac:AdditionalDocumentReference), se debe agregar los siguiente campo (Agregados en el pacote 006943):
Campo | C5_UUIDREL |
Orden | ZZ |
Tipo | Memo |
Tamaño | 10 |
Decimal | 0 |
Formato | @! |
Título | Docs Relacs |
Descripción | Documentos relacionados |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Help | Indica el Documento Relacionado, separar cada documento a relacionar con un salto de línea, y cada uno de los documentos informados deberá tener la nomenclatura: Código de Referencia a otros documentos definido por la DIAN + diagonal("/") + Número de folio del documento, por ejemplo AIJ/CTG16, para ordenes de compra utilizar el código ORDC. |
Campo | F2_UUIDREL |
Orden | ZZ |
Tipo | Memo |
Tamaño | 10 |
Decimal | 0 |
Formato | @! |
Título | Docs Relacs |
Descripción | Documentos relacionados |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Condición | M486VLDDR(M->F2_UUIDREL,.T.) |
Help | Indica el Documento Relacionado, separar cada documento a relacionar con un salto de línea, y cada uno de los documentos informados deberá tener la nomenclatura: Código de Referencia a otros documentos definido por la DIAN + diagonal("/") + Número de folio del documento, por ejemplo AIJ/CTG16, para ordenes de compra utilizar el código ORDC. |
2.2 PUNTO DE ENTRADA ADICIÓN DE CAMPOS A XML
2.2.1 Visión general
Con la finalidad de proporcionar al usuario un medio para agregar datos adicionales a la factura electrónica, se crea el punto de entrada M486CEXT para la incorporación de Campos Extensibles al documento electrónico XML/PDF (Resolución N° 000019 24-02-2016 DIAN) que genera el proveedor tecnológico The Factory HKA (TFHKA). Los datos adicionales pueden ser por ejemplo campos de los registros de clientes: Teléfono, Teléfono 2, Dirección, etc.
2.2.2 Ejemplo de utilización
Creación del PE M486CEXT
El usuario creará el código y compilará la función de usuario M486CEXT con las estructuras de los campos extensibles a integrar en el XML/PDF que genera TFHKA, el Punto de Entrada constará de:
Parámetros recibidos, el nombre ParamIXB y tipo (arreglo) son fijos:
- ParamIXB[1,1] = Serie de documento
- ParamIXB[1,2] = Número de documento
- ParamIXB[1,3] = Código de cliente
- ParamIXB[1,4] = Tienda de cliente
- ParamIXB[1,5] = Fecha de emisión
- ParamIXB[1,6] = Filial (SF2/SF1)
- ParamIXB[2] = Tipo de documento: NF, NDC, NCC
Cada campo se debe definir en un arreglo de 6 elementos, donde:
- 1 = Descripción del campo para título en el PDF (controlInterno1).
- 2 = Consecutivo de campo (controlInterno2).
- 3 = Clave de campo (nombre).
- 4 = Incluir en PDF? 0=No, 1=Sí (pdf).
- 5 = Contenido del campo (valor).
- 6 = Incluir en XML? 1=Sí, siempre (xml).
Los textos entre paréntesis hacen referencia a identificadores del Servicio Web de TFHKA. Las descripciones y características de cada identificador, así como los códigos de campos posibles de utilizar (3° elemento), están descritos en el documento “Manual de Integración Directa - Emisión - V7.5.pdf” de TFHKA, sección Uso de Campos Extensibles y en la Tabla 11 respectivamente.
Importante: - Para los campos que no les corresponda alguno de los códigos considerados en la TABLA 11, denominados LIBRE, deberá informarse una clave única para cada campo, además, esas claves no deben estar asignadas en el catálogo indicado; se pueden utilizar por ejemplo “1”, "2", "3", etc.
- El indicador XML siempre deberá ser "1", el establecer "0" no tendría utilidad ya que no incluirá el campo en el documento electrónico y por lo tanto tampoco podría imprimirse en la representación gráfica.
Retorno:
- Matriz de arreglos de los campos extensibles.
Procedimiento de Implantación
Nota: La actualizaciones presentadas a continuación son compatibles con versiones mayor o igual a 11.0
Rutinas | Fecha Actualización |
---|---|
MATA486.PRW | 19/02/2019 |
- Registrar una factura de venta; SIGAFAT | Actualizaciones | Facturación | Facturaciones.
- Transmitir la factura capturada; SIGAFAT | Actualizaciones | Facturación | Documentos Electrónicos.
- Visualizar el archivo XML recibido del servicio web de TFHKA, si el campo extensible tiene un código que corresponda a la "Tabla de códigos para campos extensibles", ese campo estará incluido en el nodo que le corresponda (receptor, encabezado, detalle, etc). Por otra parte, si es un campo "libre", éste se incorpora en el nodo ExtensionContent en la raíz del archivo XML.
a) Ejemplo de Punto de Entrada M486CEXT
#Include "Protheus.ch"
#Include "rwmake.ch"
User Function M486CEXT()
Local aArea := getArea()
Local aAreaSA1 := SA1->(GetArea())
Local aCampos := {}
Local cSerie := ParamIXB[1,1]
Local cFactura := ParamIXB[1,2]
Local cCliente := ParamIXB[1,3]
Local cLoja := ParamIXB[1,4]
Local cEspecie := ParamIXB[2]
dbSelectArea("SA1")
dbSetOrder(1) //A1_FILIAL+A1_COD+A1_LOJA
dbSeek(xFilial("SA1")+cCliente+cLoja)
If !Empty(SA1->A1_CONTATO)
aAdd( aCampos , {"Destinatario", "", "48", "1", Alltrim(SA1->A1_CONTATO), "1"} )
EndIf
If !Empty(SA1->A1_HPAGE)
aAdd( aCampos , {"Pagina web", "", "1", "1", Alltrim(SA1->A1_HPAGE), "1"} )
EndIf
SA1->(RestArea(aAreaSA1))
RestArea(aArea)
Return aCampos
b) Ejemplo de documento electrónico generado por TFHKA con campos extensibles
c) Ejemplo de documento electrónico en PDF generado por TFHKA con campos extensibles
2.3 PUNTO DE ENTRADA EXPORTACIÓN CAMPOS TRM
2.3.1 Visión General
Desarrollar funcionalidad para que al transmitir los documentos de exportación genere de forma automática los campos extensibles relacionados a TRM.
Actualmente al momento de intentar Transmitir una Factura de Exportación (Cliente con A1_EST = EX), se obtiene la respuesta "109-[Linea 02 Factura General] El campo TRM es un campo compuesto requerido para Facturas de Exportación, debe enviar los códigos 81,83,84,85".
2.3.2 Ejemplo de utilización
Nota: La actualizaciones presentadas a continuación son compatibles con versiones mayor o igual a 11.0
Rutinas | Fecha Actualización |
---|---|
MATA486.PRW | 09/04/2019 |
Se debe tener un cliente extranjero; Campo de estado (A1_EST) igual a "EX".
El campo Moneda DIAN (CTO_MOESAT) de la moneda contable "01" debe ser diferente a la Moneda del documento (F2/F1_MOEDA).
Procedimiento de Implantación
- Acceda a la rutina de facturación; SIGAFAT | Actualizaciones | Facturación | Facturación (MATA467N).
- Registre una Factura de Exportación. - Acceda a la rutina de transmisión; SIGAFAT | Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486).
- Seleccione la opción Otras Acciones | Transmitir.
- Especifique los parámetros del proceso y confirme.
- El sistema indicará que la transmisión fue exitosa.
- Desde la ruta de facturas autorizadas, visualice el archivo XML recibido del proveedor tecnológico. Verifique la existencia del nodo cac:PaymentExchangeRate el cual contiene los campos TRM:
a) Ejemplo de Punto de Entrada M486CEXT - Campos extensibles.
Ejemplo de generación de los campos correspondientes a TRM (81, 83, 84 y 85):
#Include "Protheus.ch"
#Include "rwmake.ch"
User Function M486CEXT()
Local aArea := getArea()
Local aAreaSA1 := SA1->(GetArea())
Local aAreaSF1 := SF1->(GetArea())
Local aAreaSF2 := SF2->(GetArea())
Local aCampos := {}
Local cSerie := ParamIXB[1,1]
Local cFactura := ParamIXB[1,2]
Local cCliente := ParamIXB[1,3]
Local cLoja := ParamIXB[1,4]
Local cEspecie := ParamIXB[2]
Local cEst := ""
Local cTxMoeda := ""
dbSelectArea("SA1")
dbSetOrder(1)
dbSeek(xFilial("SA1")+cCliente+cLoja)
If !Empty(SA1->A1_CONTATO)
aAdd( aCampos , {"Destinatario", "", "48", "1", Alltrim(SA1->A1_CONTATO), "1"} )
EndIf
If !Empty(SA1->A1_HPAGE)
aAdd( aCampos , {"Pagina web", "", "1", "1", Alltrim(SA1->A1_HPAGE), "1"} )
EndIf
SA1->(RestArea(aAreaSA1))
If Alltrim(cEspecie) $ "NF|NDC"
dbSelectArea("SF2")
dbSetOrder(1)
dbSeek(xFilial("SF2")+cFactura+cSerie)
cEst := SF2->F2_EST
cTxMoeda := Alltrim(Str(SF2->F2_TXMOEDA))
SF2->(RestArea(aAreaSF2))
Else
dbSelectArea("SF1")
dbSetOrder(1)
dbSeek(xFilial("SF1")+cFactura+cSerie)
cEst := SF1->F1_EST
cTxMoeda := Alltrim(Str(SF1->F1_TXMOEDA))
SF1->(RestArea(aAreaSF1))
EndIf
If cEst == "EX"
aAdd( aCampos , {"Tasa de Cambio" , "", "81", "1", "" , "1"} )
aAdd( aCampos , {"Moneda Origen" , "", "83", "1", "USD" , "1"} )
aAdd( aCampos , {"Moneda Final" , "", "84", "1", "COP" , "1"} )
aAdd( aCampos , {"Valor del Calculo", "", "85", "1", cTxMoeda, "1"} )
Endif
RestArea(aArea)
Return aCampos
Scripts de generación de documentos electrónicos (archivos XML).
Las modificaciones realizadas son para el correcto manejo de campos cuando el cliente es persona física. En el nodo fe:AccountingCustomerParty (datos del receptor) se incluye uno de los siguientes subnodos dependiendo del tipo de persona:
Tipo de persona | Subnodo | Atributo | Contenido | Descripción |
---|---|---|---|---|
Jurídica | fe:PartyLegalEntity | cbc:RegistrationName | A1_NOME | Razón social / Nombre completo |
Física | fe:Person | cbc:FirstName | A1_NOMEPRI | Primer nombre |
cbc:MiddleName | A1_NOMEPES | Segundo nombre | ||
cbc:FamilyName | A1_NOMEPAT | Segundo apellido |
2.4 OBLIGATORIEDAD DOCUMENTOS REFERENCIADOS (NDC/NCC)
2.4.1 Visión General
Se solicita funcionalidad para incluir y transmitir documentos electrónicos de tipo Nota de Débito de Cliente (NDC) o Nota de Crédito de Cliente (NCC), para referenciar Facturas de Salida (NF) que hayan sido transmitidas mediante el modelo de Facturación Electrónica de validación posterior de acuerdo al Anexo técnico del Sistema Electrónico de Factura Electrónica de Venta con Validación Previa versión 1.8.
2.4.2 Configuraciones Previas
a) Actualizar la estructura del catálogo S017 - TIPOS DE OPERACIÓN, donde se agregaron los campos Tipo Doc. y Tipo Val.
b) Actualizar el contenido del catálogo S017 - TIPOS DE OPERACIÓN, en donde el archivo 17TiposOperacion.csv deberá estar en la ruta configurada en el parámetro MV_PATH814, debiendo tener la siguiente estructura:
Columna | Contenido |
---|---|
1 | Código de Tipo de Operación DIAN |
2 | Descripción del Tipo de Operación DIAN |
3 | Especie del documento para el que aplica el Tipo de Operación, donde: NF - Para Factura de Salida. NDC - Para Notas de Débito de Cliente. NCC - Para Notas de Crédito de Cliente. |
4 | Indica la opción de validación que aplica para el Tipo de Operación, donde: 0 - Sin referencia a Factura de Salida. 1 - Referencia a Factura de Salida de modelo validación previa. 2 - Referencia a Factura de Salida de modelo validación posterior. |
Importante: Para realizar la actualización del catálogo S017 - TIPOS DE OPERACIÓN, es necesario realizar el borrado lógico del código S017 en las tablas Configuración de Catálogos (F3H) y Mantenimiento de Catálogos (F3I) y que el archivo 17TiposOperacion.csv contenga los datos de acuerdo a la nueva estructura.
c) Actualizar la expresión de la consulta especifica COL017 para que, al desplegar la consulta desde los campos Tipo Oper. (F1/F2_TIPOPE), se realice el filtrado por especie del documento y así solo visualizar los que pertenecen al tipo de documento a generar.
Importante: Ajuste realizado en el pacote 007262 - DMINA-8101 - TIPO OPERACIÓN FE COLOMBIA 12.1.25.
2.4.3 Ejemplo de utilización
En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Generac. de Notas de Crédito y Débito (MATA465).
- Informar en los parámetros:
- ¿Formulario propio? = Si
- ¿Tipo de Factura? = Crédito
- Incluir un nuevo documento e informar en el encabezado el Cliente (F1_FORNECE), Loja (F1_LOJA), Núm. Doc (F1_DOC), Serie (F1_SERIE)
- Indica en el campo Tipo Oper. (F1_TIPOPE) el valor 23 - Nota de Crédito para Facturación Electrónica v1.
- Informar el detalle del documento (Puede ser desde Otras Acciones ejecutando la acción Doc Orig o de forma manual)
- La Factura de Salida informada en los campos Doc. Original (D1_NFORI) y Serie Orig. (D1_SERIORI), deberá cumplir con los siguientes requisitos:
- Tener estatus de Recibido (F2_FLFTEX = '1')
- El CUFE de tener una longitud de 40 caracteres.
- Una vez que se han informado todos los datos presionar Grabar para confirmar el guardado del documento.
En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Facturación Electrónica (MATA486).
- Informar en los parámetros:
- ¿Tipo de documento? = Nota de Crédito
- ¿Serie? = Serie de la Nota de Crédito incluida anteriormente.
- ¿Estatus? = vacío o cero.
- ¿Fecha Inicial? / ¿Fecha Final? = Rango que contemple la fecha de emisión de la Nota de Crédito.
- Ejecutar la acción Transmitir, e informar los parámetros:
- ¿Serie de Nota de Crédito? = Serie de la Nota de Crédito incluida anteriormente.
- ¿Nota de Crédito Inicial? / ¿Nota de Crédito Final? = Rango que contemple la fecha de emisión de la Nota de Crédito.
- Validar que el proceso de transmisión sea exitoso.
- Ejecutar desde otras acciones la acción Imprimir PDF y validar que se visualice en el informe la sección Documentos Referenciados.
IMPORTANTE:
Para las Notas de Débito de Cliente (NDC) y Notas de Crédito de Cliente (NCC) que no afectan a Factura deberán de usarse los siguientes tipos de operación:
- 22 - Nota Crédito sin referencia a facturas.
- 32 - Nota Débito sin referencia a facturas.
Para las Notas de Débito de Cliente (NDC) y Notas de Crédito de Cliente (NCC) que afectan a Facturas transmitidas por el método de validación Posterior deberán de usarse los siguientes tipos de operación:
- 23 - Nota Crédito para facturación electrónica V1.
- 33 - Nota Débito para facturación electrónica V1.
Para las Notas de Débito de Cliente (NDC) y Notas de Crédito de Cliente (NCC) que afectan a Facturas transmitidas por el método de validación Previa deberán de usarse los siguientes tipos de operación:
- 20 - Nota Crédito que referencia una factura electrónica.
- 30 - Nota Débito que referencia una factura electrónica.
2.5 PUNTO DE ENTRADA ANULACIÓN DE VALIDACIÓN DOC. RELACIONADO - M465DORIFE (NCC/NDC)
Se activa el Punto de Entrada M465DORIFE, mediante el cual el usuario podrá agregar reglas de negocio para excluir la validación de transmisión previa de documentos a relacionar a Notas de Crédito de Cliente (NCC) y Notas de Débito de Cliente (NDC), para verificar la funcionalidad del punto de entrada ir al documento técnico: 7275299_DMINA-7702_DT_PE_M465DORIFE_Valida_estatus_NF_relacionada_a_NCC_COL
2.6 AUTORRETENCIONES
2.6.1 Visión General
Se solicita funcionalidad para incluir y transmitir documentos electrónicos que tengan cálculo de autorretenciones.
Ticket: 8674296
2.6.2 Configuraciones Previas
Contar con las siguientes rutinas actualizadas con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
---|---|---|
M486XFUN | Funciones genéricas para generación de XML | 22/04/2020 |
M486XFUNCO | Funciones genéricas para generación de XML para país Colombia | 22/04/2020 |
a) En el módulo Facturación (SIGAFAT) desde Actualizaciones | Archivos | Mantenimiento de Catálogos (FISA813).
En el catálogo S005-Impuestos Factura Electrónica, agregar un nuevo código de impuesto que sea diferente a los reservados por la DIAN, por ejemplo A0.
Verifique la configuración actual de la Tabla S005-Impuestos F.E.
b) En el módulo Facturación (SIGAFAT) desde Actualizaciones | Archivos | Impuestos Variables (MATA995).
Configurar el impuesto de autorretención indicando en el campo Impuesto FE (FB_IMPSAT) con el valor del código agregado en el catálogo S005-Impuestos Factura Electrónica, y el campo Clase Imp. (FB_CLASSE) con el valor R-Recepción.
2.6.3 Ejemplo de utilización
En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Facturaciones (MATA467N).
- Informar en los parámetros:
- ¿Normal/Benef? = Normal
- Incluir un nuevo documento e informar en el encabezado el Cliente (F2_CLIENTE), Loja (F2_LOJA), Núm. Doc (F2_DOC), Serie (F2_SERIE)
- Indica en el campo Tipo Oper. (F2_TIPOPE).
- Informar el detalle del documento, utilizando un Tipo de Salida/Entrada con calculo de autorretención (Las autoretenciones no suman ni restan al valor bruto del documento).
- Una vez que se han informado todos los datos presionar Grabar para confirmar el guardado del documento.
En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Facturación Electrónica (MATA486).
- Informar en los parámetros:
- ¿Tipo de documento? = Factura
- ¿Serie? = Serie de la Factura de Salida incluida anteriormente.
- ¿Estatus? = vacío o cero.
- ¿Fecha Inicial? / ¿Fecha Final? = Rango que contemple la fecha de emisión de la Factura de Salida.
- Ejecutar la acción Transmitir, e informar los parámetros:
- ¿Serie de Factura? = Serie de la Factura de Salida incluida anteriormente.
- ¿Factura Inicial? / ¿Factura Final? = Rango que contemple la fecha de emisión de la Factura de Salida.
- Validar que el proceso de transmisión sea exitoso.
- Ejecutar desde otras acciones la acción Imprimir PDF y validar que en la sección Información adicional se visualicen los datos de la autorretención.
2.7 PUNTO DE ENTRADA PARA ATRIBUTOS OPCIONALES (M486OWSCOL)
2.7.1 Visión General
Punto de Entrada para enviar los atributos opcionales disponibles en las clases de los web services de The Factory HKA (Ticket: 8394670).
IMPORTANTE:
La activación de dicho Punto de Entrada deberá ser realizado por algún analista con conocimientos de programación (AdvPL), ya que será responsabilidad de este si al no definir correctamente la regla de negocio en el Punto de Entrada, esto pudiera causar rechazo en la transmisión de Facturas de Venta, Notas de Débito o Notas de Crédito.
2.7.2 Configuraciones Previas
Contar con la siguiente rutina actualizada, con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
---|---|---|
M486XFUNCO | Funciones genéricas para generación de XML para Colombia | 28/04/2020 |
Compilar el punto de entrada M486OWSCOL, el cual recibe los siguientes parámetros:
- Serie del documento.
- Folio del documento.
- Código del Cliente.
- Código de la Tienda.
- Objeto del XML (Contiene la estructura estándar del XML generado Protheus).
- Opción (Indica a qué nivel se agregarán los atributos opcionales: 1 = Nivel documento y 2 = Nivel ítem).
- Objeto con atributos del web services de The Factory HKA (Solo atributos de la clase FacturaGeneral).
#include 'protheus.ch' User Function M486OWSCOL() Local cSerieDoc := PARAMIXB[1] //Serie Local cNumDoc := PARAMIXB[2] //Número de Documento Local cCodCli := PARAMIXB[3] //Código de Cliente Local cCodLoj := PARAMIXB[4] //Código de la Tienda Local oXML := PARAMIXB[5] //Objeto del XML Local nOpc := PARAMIXB[6] //1=Nivel documento 2=Nivel detalle Local oWS := PARAMIXB[7] //Objeto de web services Local nItem := Val(oXML:_CBC_ID:TEXT) Local cCodProd := "" Local cSDITem := "" Local cFilSD := xFilial("SD2") If nOpc == 1 //Encabezado //F2_FILIAL+F2_DOC+F2_SERIE+F2_CLIENTE+F2_LOJA+F2_FORMUL+F2_TIPO (Índice 1) //Clase oWSCliente oWS:oWSCliente:cnombreComercial := "NOMBRE COMERCIAL PE" //Clase oWSterminosEntrega oWS:oWSterminosEntrega := Service_TerminosDeEntrega():New() oWS:oWSterminosEntrega:ccostoTransporte:= "18.00" ElseIf nOpc == 2 //Detalle del documento cCodProd := Padr(oXML:_FE_ITEM:_CAC_SELLERSITEMIDENTIFICATION:_CBC_ID:TEXT,TamSX3("D2_COD")[1],' ') cSDITem := Padl(oXML:_CBC_ID:TEXT,TamSX3("D2_ITEM")[1],'0') dbSelectArea("SD2") SD2->(dbSetOrder(3)) //D2_FILIAL + D2_DOC + D2_SERIE + D2_CLIENTE + D2_LOJA + D2_COD + D2_ITEM If SD2->(dbSeek( cFilSD + cNumDoc + cSerieDoc + cCodCli + cCodLoj + cCodProd + cSDITem)) //Clase oWSextras (Factura_Detalle) oWS:oWSextras := Service_ArrayOfExtras():New() oWSExtDet := Service_Extras():NEW() oWSExtDet:ccontrolInterno1 := "NO. SERIE" oWSExtDet:cnombre := "1" oWSExtDet:cpdf := "1" oWSExtDet:cvalor := SD2->D2_NUMSERI oWSExtDet:cxml := "1" aAdd(oWS:oWSextras:oWSextras,oWSExtDet) EndIf EndIf Return Nil
Nota:
- En el punto de entrada de ejemplo, se llenan atributos que son opcionales a nivel documento y nivel detalle; realizando la bifurcación mediante el parámetro Opción (PARAMIXB[6]).
IMPORTANTE:
- Si no se encuentran activados los atributos de una clase, es necesario hacerlo de la siguiente manera Service_TerminosDeEntrega():New() haciendo uso del método New.
- Se puede hacer uso de los nodos del XML estándar generado desde protheus, el cual es recibido en el parámetro Objeto del XML (PARAMIXB[5]).
- Hacer uso de la variable cEspecie para definir regla de negocio por tipo de documento (NF, NDC o NCC).
Clases disponibles:
Nombre | WSLD Data |
---|---|
Anticipos | Service_ArrayOfAnticipos |
Service_Anticipos | |
Autorizado | Service_Autorizado |
Cargos/Descuentos | Service_ArrayOfCargosDescuentos |
Service_CargosDescuentos | |
Condición de Pago | Service_ArrayOfCondicionDePago |
Service_CondicionDePago | |
Documentos referenciados | Service_ArrayOfDocumentoReferenciado |
Service_DocumentoReferenciado | |
Extras | Service_ArrayOfExtras |
Service_Extras | |
Medios de Pago | Service_ArrayOfMediosDePago |
Service_MediosDePago | |
Tasa de cambio alternativa | Service_TasaDeCambioAlternativa |
Términos de entrega | Service_TerminosDeEntrega |
Entrega de mercancía | Service_Entrega |
Información adicional | Service_ArrayOfLineaInformacionAdicional |
Service_LineaInformacionAdicional | |
Detalle Factura | Service_ArrayOfFacturaDetalle |
Service_FacturaDetalle |
2.7.3 Ejemplo de utilización
En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Facturaciones (MATA467N).
- Informar en los parámetros:
- ¿Normal/Benef? = Normal
- Incluir un nuevo documento e informar en el encabezado el Cliente (F2_CLIENTE), Loja (F2_LOJA), Núm. Doc (F2_DOC), Serie (F2_SERIE)
- Indica en el campo Tipo Oper. (F2_TIPOPE).
- Informar el detalle del documento, utilizando un Tipo de Salida/Entrada con cálculo de autorretención (Las autorretenciones no suman ni restan al valor bruto del documento).
- Una vez que se han informado todos los datos, presionar Grabar para confirmar el guardado del documento.
En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Documentos Electrónicos (MATA486).
- Informar en los parámetros:
- ¿Tipo de documento? = Factura
- ¿Serie? = Serie de la Factura de Salida incluida anteriormente.
- ¿Estatus? = vacío o cero.
- ¿Fecha Inicial? / ¿Fecha Final? = Rango que contemple la fecha de emisión de la Factura de Salida.
- Ejecutar la acción Transmitir, e informar los parámetros:
- ¿Serie de Factura? = Serie de la Factura de Salida incluida anteriormente.
- ¿Factura Inicial? / ¿Factura Final? = Rango que contemple la fecha de emisión de la Factura de Salida.
- Validar que el proceso de transmisión sea exitoso.
- Validar que se hayan enviado los datos definidos en el Punto de Entrada.
IMPORTANTE:
- Si al realizar la impresión estándar del archivo PDF de The Factory KHA, los campos adicionales enviados no son visualizados; se tendrá que tratar directamente con el proveedor tecnológico, ya que de ellos generan el archivo PDF que es retornado.
2.7.4 Envío por email desde el servicio DFACTURA del TFHKA
En el siguiente enlace, se describe el procedimiento para utilizar el punto de entrada para establecer el envío de la factura electrónica por email desde el servicio del proveedor tecnológico.
2.7.5 Cambio de documento XML descargado desde TFHKA
De acuerdo a la resolución 000042 del 5 de mayo del 2020 emitida por la DIAN, se realiza cambio para descargar el contenedor electrónico AttachedDocument el cual contiene en un único documento XML un DE y todos los documentos registrados hasta la fecha. En el enlace a continuación, hay más información acerca de esta actualización.
9082470 DMINA-9425 DT Cambio en el XML descargado de The Factory HKA COL
2.8 IMPRESIÓN DE RETENCIONES EN REPRESENTACIÓN GRÁFICA
2.8.1 Visión General
Permitir la impresión de la retenciones en la representación gráfica de los documentos electrónicos transmitidos a la DIAN a través dl proveedor tecnológico denominado The Factory HKA.
IMPORTANTE:
Se debe tener configurado el parámetro MV_PDFPRO con el valor "2", y los documentos electrónicos deben contener el cálculo de impuestos de tipo Retención, para más detalle ver el siguiente documento técnico:
Documento Técnico de Impresión de Retenciones en Notas de Crédito de Cliente (NCC).
2.9 ACTUALIZACIÓN DE F1/F2_FLFTEX DOCUMENTOS ELECTRÓNICOS TRANSMITIDOS PREVIAMENTE
2.9.1 Visión General
Se realizó ajuste para que si al transmitir un documento electrónico desde la rutina de Documentos Electrónicos (MATA486), se recibe de respuesta el código 114 (Documento emitido previamente), el campo Status Trans (F1/F2_FLFTEX) sea actualizado a estatus Recibido, es decir, valor 1.
Para más detalle ver el siguiente documento técnico: DMINA-11442 DT Actualización de F1_FLFTEX y F2_FLFTEX cuanto ocurre una intermitencia FE COL
2.10 DOCUMENTO SOPORTE DE ADQUISICIONES EFECTUADAS A SUJETOS NO OBLIGADOS A EXPEDIR FACTURA DE VENTA O DOCUMENTO EQUIVALENTE
2.10.1 Visión General
En Colombia, para el 01 de Agosto, entra en función que los proveedores que no están obligados a facturar, la empresa que les compre debe presentar una factura por ellos, a lo que llama Documento Soporte.
Se realizan modificaciones en el módulo de facturación para dar solución a lo establecido en la Resolución Número 000167 del 30 DIC 2021 de la DIAN, Anexo técnico del documento soporte en adquisiciones efectuadas a sujetos no obligados a expedir factura de venta o documento equivalente. En el registro de la Factura de Entrada, se identifica cuando es una factura por Documento Soporte. Este tipo de documentos deben generar un comprobante electrónico (XML) y éste debe ser autorizado por la DIAN.
2.10.2 Configuraciones Previas
Contar con las siguientes rutina actualizadas, con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
MATA486.PRW | Documentos electrónicos | 29/03/2022 |
M486XFUNCO.PRW | Funciones genéricas para transmisión de documentos electrónicos | 11/03/2022 |
M486PDFCOL.PRW | Generación de factura electrónica en PDF | 29/03/2022 |
LOCXNF.PRW | Notas Fiscales | 29/03/2022 |
LOCXNF2.PRW | Funciones genéricas de Documentos Fiscales | 29/03/2022 |
LOCXCOL.PRW | Funciones Genéricas de Notas Fiscales Colombia | 29/03/2022 |
FATECOL.INI | Generación de XML para Documentos de Entrada | 29/03/2022 |
WSNFECOL.PRW | Cliente de servicio web de facturación | 29/03/2022 |
Configurar los siguientes parámetros (SX6):
Parámetro | Contenido | Descripción |
---|---|---|
MV_CFDIAMB | 2 | Indica el ambiente de trabajo de certificación de factura electrónica: 1=Producción, 2=Homologación. |
MV_PROVFE | DFACTURA | Identifica el Fact. Electrónico/Prov. Tecnológico servicios de certificación de factura electrónica. Indicar alguno de estos: TSS o DFACTURA |
MV_TIPOFE | 1 | Indica el modelo de transmisión electrónica, 0 o vacío = Val. Posterior y 1 = Val. Previa. |
MV_TKN_EMP | cf5a933c22080afd84ca4e699983e3952c811dd9 | Token Empresa - The Factory HKA. |
MV_TKN_PAS | 4219be96602655094acb0fe281ab1bf7e4ad9c46 | Token Password - The Factory HKA. |
MV_WSRTSS | http://demoemision21v4.thefactoryhka.com.co/ws/v1.0/Service.svc?wsdl | URL del servicio web. |
MV_CFDDOCS | GetSrvProfString('startpath','')+'\cfd\facturas\' | Directorio donde se grabaran las facturas electrónicas. |
MV_ALTNUM | 1 | Verifica si el sistema permite o no, o si solamente informa, cuando se modifica el número de la factura. 1 - Informa. 2 - Pregunta. 3 - No permite. |
Importante : En caso de hacer uso de un servidor proxy, la ruta en el contenido del parametro MV_WSRTSS debe inicar con https en vez de http.
- Los proveedores no obligados a facturar, se registran como Proveedores con toda la información de identificación, dirección, responsabilidades, etc..
- Crear un Proveedor (MATA020) informando los siguientes Datos:
- Tipo Doc. (A2_TIPDOC)
- Nomb/Raz.Soc (A2_NOME)
- NIT (A2_CGC)
- Dirección (A2_END)
- País (A2_PAIS)
- Barrio (A2_BAIRRO)
- Municipio (A2_MUN)
- CP (A2_CEP)
IMPORTANTE
Para que la funcionalidad de tomar los datos unicamente del Proveedor, sin necesidad de configurar adicionalmente un Cliente, se deberán tener actualizadas las siguientes rutinas con fecha igual o superior:
Rutina Nombre Técnico Fecha LOCXCOL Funciones Genéricas de Notas Fiscales para Colombia XX/XX/XXXX MATA486 Documentos Electrónicos XX/XX/XXXX M486XFUNCO Funciones Genéricas de Facturación Electrónica para Colombia XX/XX/XXXX FISA827 Responsabilidades/Tributos DIAN de Clientes y Proveedores XX/XX/XXXX FATXFUMI Funciones genéricas para Facturación - Mercado Internacional XX/XX/XXXX MATA020 Proveedores XX/XX/XXXX Para poder realizar la configuración de los Tributos y Responsabilidades DIAN en el Proveedor, es necesario tener configurado en el Diccionario de Datos el campo AIT_REG.
Campo
AIT_REG
Orden
07
Tipo
Caracter
Tamaño
1
Decimal
0
Formato
@!
Título
Cliente/Prov
Descripción
Cliente o Proveedor
Utilizado
Si
Obligatorio
No
Browse
No
Val. Sistema
Pertence("CP")
Opciones
C=Cliente;P=Proveedor
Help
Indica si el registros de Responsabilidades o Tributos corresponde a un C-Cliente o Proveedor.
Modificar el X2_UNICO de la Tabla AIT-Responsabilidades-Tributos Cliente para que sea AIT_FILIAL+AIT_CODCLI+AIT_LOJA+AIT_CODRES+AIT_CODTRI+AIT_TIPO+AIT_REG.
- Crear un Proveedor (MATA020) informando los siguientes Datos:
- Dentro del configurador en la opción "Diccionarios / tablas genéricas", en la tabla genérica "00 - 01 - Series de Facturas", agregar la serie "DCS" y el número inicial para el Documento Soporte.
Dentro de Control de Formularios (MATA992), agregar la serie "DCS" con especie "1=FCT / NF" y en la Serie 2 agregar el prefijo MXDS (puede ser cualquier otro prefijo siempre y cuando cuente con 4 caracteres), también asignar el número inicial y final y los campos que son obligatorios.
- Realizar las siguientes modificaciones al archivo de configuración FATECOL.INI. Las líneas en color azul se agregan, las líneas en color verde se modifican.
//FATECOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
[XXX POSICIONAMENTOS]
(PRE) SA2->(DbSetOrder(1))
(PRE) _aTotal[116] := If(SF1->(FieldPos("F1_SOPORT")) > 0 ,If(SF1->F1_SOPORT =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
(PRE) If(_aTotal[116] ,SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC" .AND. !_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) IF( _aTotal[116], AI0->(MSSeek(xFilial("AI0")+SA2->(A2_CLIENTE+A2_LOJCLI))) , AI0->(MSSeek(xFilial("AI0")+SF1->(F1_FORNECE+F1_LOJA))) )
[XXX INICIALIZACION]
(PRE) SD1->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))
(PRE) SE1->(DbSetOrder(2))
(PRE) _aTotal[033] := ALLTRIM (SF1->F1_ESPECIE)
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) _aTotal[092] := IIF(_aTotal[116], Posicione("SA1",1,xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI,"A1_EST") ,Posicione("SA1",1,xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA,"A1_EST"))
(PRE) _aTotal[093] := ""
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := DtoS(SF1->F1_EMISSAO)
(PRE) _aTotal[095] := Left(_aTotal[095],4) + "-" + Substr(_aTotal[095],5,2)+ "-" + Right(_aTotal[095],2)
(PRE) _aTotal[096] := SF1->F1_HORA
(PRE) _aTotal[097] := fGetTaxas(SF1->F1_DOC, SF1->F1_SERIE, SF1->F1_FORNECE, SF1->F1_LOJA, If(_aTotal[116], "NCC",SF1->F1_ESPECIE))
(PRE) _aTotal[098] := ALLTRIM( GETNEWPAR( "MV_ID_PROV" , "" ) )
(PRE) _aTotal[099] := ALLTRIM( GETNEWPAR( "MV_ID_SOFT" , "" ) )
(PRE) _aTotal[100] := ALLTRIM( GETNEWPAR( "MV_CODESEC" , "" ) )
(PRE) _aTotal[101] := {"SD1",""}
(PRE) _aTotal[102] := IIF( _aTotal[033] == "NF" , "1" , IIF( _aTotal[033] == "NCC" , "2" , IIF( _aTotal[033] == "NDC" , "3" , IIF( _aTotal[033] == "NDI" , "4" , IIF( _aTotal[033] == "NCI" , "5" , "" ) ) ) ) )
(PRE) _aTotal[103] := ""
(PRE) _aTotal[104] := PADR( Alltrim(SM0->M0_CGC) , 10 , "0" )
(PRE) _aTotal[105] := IIF( _aTotal[033] == "NF" , "f" , IIF( _aTotal[033] == "NCC" .or. _aTotal[033] == "NCI" , "c" , IIF( _aTotal[033] == "NDC" .or. _aTotal[033] == "NDI" , "d" , "f" ) ) )
(PRE) _aTotal[106] := M486XHEX(PADR( ALLTRIM( substr( SF1->F1_DOC , 4 , Len(SF1->F1_DOC) - 3 ) ) , 10 , "0" ),10)
(PRE) _aTotal[107] := fGetRef(SF1->F1_DOC, SF1->F1_SERIE, SF1->F1_FORNECE, SF1->F1_LOJA, SF1->F1_ESPECIE)
(PRE) _aTotal[108] := ""
(PRE) _aTotal[109] := Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT")
(PRE) _aTotal[110] := {"SFP",""}
(PRE) _aTotal[111] := ""
(PRE) _aTotal[112] := ""
(PRE) _aTotal[113] := ""
(PRE) _aTotal[114] := "FP_FILUSO='" + cFilAnt + "' AND FP_SERIE='" + SF1->F1_SERIE + "' AND FP_ESPECIE= " + If(_aTotal[116], "'1'","'2'") + " AND FP_NUMINI <='" + SF1->F1_DOC + "' AND FP_NUMFIM >='" + SF1->F1_DOC + "' AND FP_ATIVO ='1'"
(PRE) _aTotal[115] := "SFP->FP_FILUSO=cFilAnt .AND. SFP->FP_SERIE=SF1->F1_SERIE .AND. SFP->FP_ESPECIE=" + If(_aTotal[116], "'1'","'2'") + ".AND. SFP->FP_NUMINI<=SF1->F1_DOC .AND. FP_NUMFIM >=SF1->F1_DOC .AND. SFP->FP_ATIVO = '1'","FP_ATIVO"
(PREREG) FsQuery(_aTotal[101],1,"D1_DOC='" + SF1->F1_DOC + "' AND D1_SERIE='" + SF1->F1_SERIE + "' AND D1_FORNECE='" + SF1->F1_FORNECE + "' AND D1_LOJA='" + SF1->F1_LOJA + "'","SD1->D1_DOC=SF1->F1_DOC .AND. SD1->D1_SERIE=SF1->F1_SERIE .AND. SD1->D1_FORNECE=SF1->F1_FORNECE .AND. SD1->D1_LOJA=SF1->F1_LOJA","D1_ITEM") .And. .T.
(PREREG) FsQuery(_aTotal[110],1,_aTotal[114],_aTotal[115]) .And. .T.
[SFP CONTROL FOMULARIOS]
(PRE) _aTotal[103] := Dtos( SFP->FP_DTRESOL )
(PRE) _aTotal[103] := Left(_aTotal[103],4) + "-" + Substr(_aTotal[103],5,2)+ "-" + Right(_aTotal[103],2)
(PRE) _aTotal[111] := Alltrim( SFP->FP_NUMINI )
(PRE) _aTotal[112] := Alltrim( SFP->FP_NUMFIM )
(PRE) _aTotal[113] := Alltrim( SFP->FP_CAI )
[SD1 GENERANDO_XML]
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",If(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)),SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA))) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)
[XXX CABECERA]
Linha1 C 060 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
[XXX FACTURA]
(PRE) IIf(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) _aTotal[001] := IIF(_aTotal[116],'<fe:Invoice ','<fe:CreditNote ')
(PRE) _aTotal[001] += 'xmlns:fe="http://www.dian.gov.co/contratos/facturaelectronica/v1" '
(PRE) _aTotal[001] += 'xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" '
(PRE) _aTotal[001] += 'xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" '
(PRE) _aTotal[001] += 'xmlns:clm54217="urn:un:unece:uncefact:codelist:specification:54217:2001" '
(PRE) _aTotal[001] += 'xmlns:clm66411="urn:un:unece:uncefact:codelist:specification:66411:2001" '
(PRE) _aTotal[001] += 'xmlns:clmIANAMIMEMediaType="urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003" '
(PRE) _aTotal[001] += 'xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" '
(PRE) _aTotal[001] += 'xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" '
(PRE) _aTotal[001] += 'xmlns:sts="http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures" '
(PRE) _aTotal[001] += 'xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" '
(PRE) _aTotal[001] += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
(PRE) _aTotal[001] += 'xsi:schemaLocation="http://www.dian.gov.co/contratos/facturaelectronica/v1 ../xsd/DIAN_UBL.xsd '
(PRE) _aTotal[001] += 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2 ../../ubl2/common/UnqualifiedDataTypeSchemaModule-2.0.xsd '
(PRE) _aTotal[001] += 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2 ../../ubl2/common/UBL-QualifiedDatatypes-2.0.xsd" '
(PRE) _aTotal[001] += '>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceAuthorization>'+ _aTotal[113] +'</sts:InvoiceAuthorization>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>'+ _aTotal[103] +'</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>'+ _aTotal[103] +'</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:Prefix>'+ SF1->F1_SERIE2 +'</sts:Prefix>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:From>'+ _aTotal[111] +'</sts:From>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:To>'+ _aTotal[112] +'</sts:To>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode listAgencyID="6" listAgencyName="United Nations Economic Commission for Europe" listSchemeURI="urn:oasis:names:specification:ubl:codelist:gc:CountryIdentificationCode-2.0">CO</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:ProviderID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="NIT, RUT" schemeDataURI="www.dian.gov.co/contenidos/servicios/rut_preguntasfrecuentes.html">'+ _aTotal[098] +'</sts:ProviderID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="Código de Activación" schemeDataURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Guia_del_usuario_Habilitacion_Adquirente.pdf">'+ _aTotal[099] +'</sts:SoftwareID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareSecurityCode schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="Código de Seguridad del Software" schemeDataURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Anexo_Tecnico_003_Mecanismos_Sistema_Tecnico_de_Control.pdf">'+ _aTotal[100] +'</sts:SoftwareSecurityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:UBLVersionID>UBL 2.0</cbc:UBLVersionID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ProfileID>DIAN 1.0</cbc:ProfileID>' + ( chr(13)+chr(10) )
// Manual con serie
//(PRE) _aTotal[001] += ' <cbc:ID>'+ SF1->F1_SERIE2 + Alltrim( Str( Val( Substr( SF1->F1_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
// Manual sin serie
(PRE) _aTotal[001] += ' <cbc:ID>'+ Alltrim( Str( Val( Substr( SF1->F1_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IssueDate>'+ _aTotal[095] +'</cbc:IssueDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IssueTime>'+ _aTotal[096] +'</cbc:IssueTime>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Note><![CDATA['+ Alltrim(SF1->F1_MOTIVO) + ']]></cbc:Note>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:InvoiceTypeCode listAgencyID="195" listAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" listSchemeURI="http://www.dian.gov.co/contratos/facturaelectronica/v1/InvoiceType">91</cbc:InvoiceTypeCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:DocumentCurrencyCode>'+ Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) +'</cbc:DocumentCurrencyCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CustomizationID>'+ Alltrim(SF1->F1_TIPOPE) +'</cbc:CustomizationID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:DiscrepancyResponse>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ReferenceID/>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ResponseCode>' + Alltrim(SF1->F1_TIPREF) + '</cbc:ResponseCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:DiscrepancyResponse>' + ( chr(13)+chr(10) )
// BillingReference
(PRE) _aTotal[001] += _aTotal[107]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX EMISOR]
(PRE) _aTotal[001] := ' <fe:AccountingSupplierParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ "1" +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeID="31">'+ Alltrim(SM0->M0_CGC) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Name><![CDATA['+ _aTotal[075] +']]></cbc:Name>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SM0->M0_BAIRENT) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SM0->M0_CODMUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA['+ Alltrim(SM0->M0_CIDENT) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ Alltrim(SM0->M0_ENDENT) + " " + Alltrim(SM0->M0_COMPENT) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+ "CO" +'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode>'+ AllTrim(SM0->M0_DSCCNA) +'</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:TaxScheme/>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ _aTotal[075] + ']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingSupplierParty>'
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX RECEPTOR]
(PRE) AllTrim(SF1->F1_ESPECIE) <> "NCC"
(PRE) If(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
(PRE) _aTotal[001] := '<fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ IIF( AllTrim(SA1->A1_PESSOA) == "F" , "2" , "1" ) +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '" schemeAgencyName="CO, DIAN (Dirección de Impuestos y Aduanas Nacionales)" schemeAgencyID="195">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode listName="' + Alltrim(AI0->AI0_TPREG) + '">' + AllTrim(M486RESOBL(SA1->A1_COD,SA1->A1_LOJA,"R")) + '</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID>' + Alltrim(SA1->A1_COD_MUN) + '</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA[' + Alltrim(POSICIONE("CC2",3,xFilial("CC2") + SA1->A1_COD_MUN,"CC2_MUN")) + ']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:PostalZone>' + Alltrim(SA1->A1_CEP) + '</cbc:PostalZone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentity><![CDATA[' + Alltrim(M486VALSX5('12' + SA1->A1_EST)) + ']]></cbc:CountrySubentity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentityCode>' + Alltrim(SA1->A1_EST) + '</cbc:CountrySubentityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA[' + Alltrim(SA1->A1_END) + ']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:Name><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:Name>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SA1->A1_BAIRRO) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SA1->A1_MUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA['+ Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI")) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ AllTrim(SA1->A1_END) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ElectronicMail>' + AllTrim(SA1->A1_EMAIL) + '</cbc:ElectronicMail>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Telephone>' + AllTrim(SA1->A1_TEL) + '</cbc:Telephone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FirstName><![CDATA[' + Alltrim(SA1->A1_NOMEPRI) +']]></cbc:FirstName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:MiddleName><![CDATA[' + Alltrim(SA1->A1_NOMEPES) +']]></cbc:MiddleName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FamilyName><![CDATA[' + Alltrim(SA1->A1_NOMEPAT) + ' ' + Alltrim(SA1->A1_NOMEMAT) +']]></cbc:FamilyName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' </fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SF1->F1_VALBRUT,14,2)) + '</cbc:Amount>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF1->(F1_FORNECE+F1_LOJA+F1_SERIE+F1_DOC),"E1_EMISSAO") ) , "@R 9999-99-99") + '</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF1->(F1_FORNECE+F1_LOJA+F1_SERIE+F1_DOC),"E1_VENCTO") ) , "@R 9999-99-99") + '</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyCode>' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '</cbc:SourceCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyBaseRate>1.00</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyCode>' + "COP" + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyBaseRate>1.00</cbc:TargetCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:CalculationRate>' + Alltrim(Str(SF1->F1_TXMOEDA,11,2)) + '</cbc:CalculationRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:Date>' + _aTotal[095] + '</cbc:Date>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' </cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX IMPUESTOS]
(PRE) _aTotal[001] := _aTotal[097][1]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX TOTALES]
(PRE) _aTotal[001] := _aTotal[097][2]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[SD1 INVOICE]
(PRE) DbGoTop()
(PREREG) (SB1->(DbSeek(xFilial("SB1") + SD1->D1_COD)),.T.)
(PREREG) (SAH->(DbSeek(xFilial("SAH") + SB1->B1_UM)),.T.)
(PREREG) _aTotal[108] := fGetTaxDet(SD1->D1_DOC,SD1->D1_SERIE,SD1->D1_FORNECE,SD1->D1_LOJA,SD1->D1_TES,If(_aTotal[116], "NCC",AllTrim(SF1->F1_ESPECIE)))
(PREREG) (_aTotal[001] := IIF( _aTotal[116],' <fe:InvoiceLine>' + ( chr(13)+chr(10) ),' <cac:CreditNoteLine>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>' + Alltrim(Str(Val(SD1->D1_ITEM))) + '</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(_aTotal[116],' <cbc:InvoicedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD1->D1_QUANT, 14, 2)) +'</cbc:InvoicedQuantity>' + ( chr(13)+chr(10) ),' <cbc:CreditedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD1->D1_QUANT)) +'</cbc:CreditedQuantity>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(SD1->D1_TOTAL,14,2)) +'</cbc:LineExtensionAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][1],.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:ChargeIndicator>false</cbc:ChargeIndicator>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:AllowanceChargeReason><![CDATA[Aplicación de descuento]]></cbc:AllowanceChargeReason>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:MultiplierFactorNumeric>' + Alltrim(Str(SD1->D1_DESC,5,2)) + '</cbc:MultiplierFactorNumeric>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SD1->D1_VALDESC,14,2)) + '</cbc:Amount>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' </cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][2],.T.)
(PREREG) (_aTotal[001] += IIF(_aTotal[116] ,' <fe:Item>', ' <cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:Description><![CDATA[' + Alltrim(SB1->B1_DESC) +']]></cbc:Description>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:PackSizeNumeric>'+ IIf(!Empty(SB1->B1_CONV),Alltrim(STR(SB1->B1_CONV)),"1") +'</cbc:PackSizeNumeric>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>' + Alltrim(SD1->D1_COD) + '</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' </cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116],' </fe:Item>', ' </cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116],' <fe:Price>',' <cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:PriceAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(SD1->D1_VUNIT,14,2)) +'</cbc:PriceAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:BaseQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">' + Alltrim(Str(SD1->D1_QUANT)) + '</cbc:BaseQuantity>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(_aTotal[116],' </fe:Price>', ' </cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116],' </fe:InvoiceLine>' ,' </cac:CreditNoteLine>') ,.T.)
(PREREG) ENCODEUTF8(_aTotal[001])
[XXX INVOICE_FIN]
(POS) FsQuery(_aTotal[101],2)
[XXX FACTURA]
(PRE) _aTotal[094] := &("Lower('face') + '_' + Lower(_aTotal[105]) + Lower(_aTotal[104]) + Lower(_aTotal[106]) + '.xml'")
(ARQ) _aTotal[094]
FACTURA C 019 0 ENCODEUTF8( IIF( _aTotal[116], '</fe:Invoice>','</fe:CreditNote>'))
2.10.3 Ejemplo de utilización.
- Documento Soporte.
- Ingresar al módulo de Compras (SIGACOM), ir al menú |Actualizaciones | Movimientos | Factura de Entrada (MATA101N)
- En la pregunta ¿Tipo de Factura? seleccionar “Docto Soporte” y confirmar.
- En la pantalla principal, en el encabezado confirmar que en título se informe que es un “Doc. Soporte”
Dar clic en el botón “Incluir”. - Seleccionar al Proveedor que está relacionado al Cliente.
- Seleccionar la Serie configurada para el Documento Soporte, automáticamente se cargará el Número Documento y la Serie 2.
Agregar un Producto, Cantidad, Valor Unitario, Valor Total y el TES.
Nota
Los Impuestos Variables(SFB) relacionados a la TES informada en la Factura deben contener información el campo Impuesto FE(FB_IMPSAT)
- En la pestaña “Títulos” indicar la Condición de Pago.
- Grabar la Factura.
- Transmisión de Documento Soporte.
- Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
- Capturar los parámetros correspondientes para realizar el filtro de documentos.
¿Tipo de Documento? seleccionar “Docto. Soporte”.
¿Serie? seleccionar “DCS”.
¿Estatus? seleccionar “0” para obtener todos los documentos.
Asignar las Fechas Inicio/Fin. - Confirmar.
- En la pantalla principal verificar que exista el Documento Soporte.
- Dar clic en el botón “Transmitir”.
- Asignar la serie “DCS” y el Número de Documento Inicial y Final.
- Confirmar Transmisión.
- Revisar el Log de transmisión.
- Archivo XML del Documento Soporte.
Los archivos XML autorizados se crean en la carpeta configurada en el parámetro MV_CFDDOCS + "/autorizados/".- Revisar que el elemento "tipoDocumento" sea igual a "05" que indica que se transmitió un Documento Soporte. Ejemplo:
<cbc:InvoiceTypeCode>05</cbc:InvoiceTypeCode> - Dentro del elemento FacturaDetalle (cac:InvoiceLine) revisar que se haya creado el sub-elemento de "cac:InvoicePeriod" y revisar que informen los siguientes sub-elementos:
- StartDate: Fecha de emisión del documento.
- DescriptionCode: Forma de generación. El número "1" que indica que la forma de generación es "Por Operación".
- Description: Descripción de Forma de generación.
Ejemplo:
<cac:InvoicePeriod>
<cbc:StartDate>2022-04-11</cbc:StartDate>
<cbc:DescriptionCode>1</cbc:DescriptionCode>
<cbc:Description>Por operación</cbc:Description>
</cac:InvoicePeriod>
- Revisar que el elemento "tipoOperacion" sea igual a "10" si el Proveedor es "Residente", si el Proveedor es "No Residente" se informará "11". Ejemplo:
<cbc:CustomizationID>10</cbc:CustomizationID> - Dentro del elemento Proveedor (<cac:AccountingSupplierParty>) revisar que se haya informado el subelemento "detallesTributarios" y sus "Tributos". Ejemplo:
<cac:TaxScheme><cbc:ID>01</cbc:ID><cbc:Name>IVA</cbc:Name></cac:TaxScheme> - Revisar que se informen correctamente los valores del Documento Soporte (datos del Proveedor, Empresa emisora, Productos, Totales, etc..)
- Revisar que el elemento "tipoDocumento" sea igual a "05" que indica que se transmitió un Documento Soporte. Ejemplo:
- Monitor de Transmisión.
- Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
- Capturar los parámetros correspondientes para realizar el filtro de documentos.
¿Tipo de Documento? seleccionar “Docto. Soporte”.
¿Serie? seleccionar “DCS”.
¿Estatus? seleccionar “0” para obtener todos los documentos.
Asignar las Fechas Inicio/Fin. - Confirmar.
- Dar clic en el botón “Monitor”.
- Asignar la Serie “DCS” y el Número de Documento Inicial y Final.
- Confirmar.
- Revisar el estatus del Documento Soporte.
- Imprimir PDF.
- Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
- Capturar los parámetros correspondientes para realizar el filtro de documentos.
¿Tipo de Documento? seleccionar “Docto. Soporte”.
¿Serie? seleccionar “DCS”.
¿Estatus? seleccionar “0” para obtener todos los documentos.
Asignar las Fechas Inicio/Fin. - Confirmar.
- Dar clic en el botón “Otras Acciones”.
- Seleccionar la opción "Imprimir PDF".
- Asignar la Serie “DCS”, el Número de Documento Inicial y Final e indicar el Formato PDF.
- Confirmar.
- Revisar la información impresa en el archivo PDF del Documento Soporte.
- Recuperar XML.
- Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
- Capturar los parámetros correspondientes para realizar el filtro de documentos.
¿Tipo de Documento? seleccionar “Docto. Soporte”.
¿Serie? seleccionar “DCS”.
¿Estatus? seleccionar “0” para obtener todos los documentos.
Asignar las Fechas Inicio/Fin. - Confirmar.
- Dar clic en el botón “Otras Acciones”.
- Seleccionar la opción "Recuperar XML"
- Asignar la Serie “DCS”, el Número de Documento Inicial y Final, y la Carpeta dónde será guardado el archivo.
- Confirmar.
- Revisar que el archivo XML del Documento Soporte se haya almacenado en la carpeta indicada.
- Uso del parámetro MV_ALTNUM
- El sistema actúa de acuerdo al valor que se configure siempre y cuando el numero de documento asignado ya exista, siendo:
MV_ALTNUM = 1 Se reasigna el consecutivo que corresponda de manera automática.
MV_ALTNUM = 2 El sistema pregunta al usuario si desea que se actualice el número de documento.
MV_ALTNUM = 3 No se reasigna número, el usuario podrá editar el número de documento.
En caso de editar el Núm. de Doc. (F1_DOC), y si se introduce un número de documento mayor al consecutivo que corresponda, el sistema reasigna automáticamente el número y presenta un aviso de la acción realizada.
2.10.4 Regla de rechazo DSAJ05b
The Factory HKA Colombia SAS informa que desde el próximo 10 de noviembre de 2024 la DIAN generará rechazo al transmitir un documento soporte cuando el tipo de documento del vendedor no corresponda a un valor válido de la lista, de acuerdo con lo establecido en el anexo técnico vigente para el documento soporte en adquisiciones con sujetos no obligados a expedir factura electrónica.
Es requisito reportar la información relacionada con los documentos de no residentes de acuerdo con los códigos que se indican en la tabla 16.2.1 Documento de identificación (Tipo de identificador fiscal) del anexo técnico 1.0 de la resolución 00167 de 2021.
DSAJ25b. El contenido de este atributo no corresponde a uno de los valores posibles de la lista.
Cuando el campo <tipoOperacion> se reporte como 11 (No Residente),
Nota: Conforme a la Normativa vigente, debe tenerse en cuenta lo que se indica para el concepto de residente fiscal en Colombia y no residente fiscal en Colombia.
En el campo <tipoIdentificacion>, podrá indicarse alguno de los valores de la siguiente tabla.
Para cumplir con esa nueva regla deberá actualizar el catálogo TiposDocIdentidad con los siguientes datos:
2.10.5 Diccionario de datos
El usuario debe realizar las siguientes actualizaciones al diccionario de datos a través del módulo Configurador de Protheus (SIGACFG):
Campos en el archivo SX3 - Campos:
Crear campo F1_SOPORT
Campo | F1_SOPORT |
Orden | ZZ |
Tipo | Caracter |
Tamaño | 1 |
Decimal | 0 |
Formato | @! |
Título | Doc. Soporte |
Descripción | Documento Soporte |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Val. Sistema | Pertence("SN") |
Inicializador | "S" |
Opciones | S=Si;N=No |
Help | Si la factura que registra corresponde a un proveedor no obligado a facturar y éste comprobante será transmitido a la DIAN, indique Si, de lo contrario indique No. |
Preguntas en el archivo SX1 – Archivo de Preguntas:
Modificar grupo MATA486
Orden | 01 |
Pregunta | ¿Tipo de Documento ? |
Tipo | N |
Tamaño | 1 |
Decimal | 0 |
Validación | |
Objeto | Combo |
Consulta Estándar | |
Preselección | 0 |
Ítem 1 | Factura |
Ítem 2 | Nota de Debito |
Ítem 3 | Nota de Credito |
Ítem 4 | Docto Soporte |
Modificar grupo MT101N
Orden | 01 |
Pregunta | ¿Tipo de factura ? |
Tipo | N |
Tamaño | 1 |
Decimal | 0 |
Validación | |
Objeto | Combo |
Consulta Estándar | |
Preselección | 0 |
Ítem 1 | Normal |
Ítem 2 | Benef. |
Ítem 3 | Gastos Imp. |
Ítem 4 | Conoc. Transp. |
Ítem 5 | Doc. Soporte |
Crear grupo MATA486I
Orden | 01 | 02 | 03 |
Pregunta | ¿Serie de Documento Soporte? | ¿Documento Soporte Inicial? | ¿Documento Soporte Final? |
Tipo | C | C | C |
Tamaño | 3 | 13 | 13 |
Decimal | 0 | 0 | 0 |
Validación | NaoVazio() .and. MV_PAR02<=MV_PAR03 | ||
Objeto | Edit | Edit | Edit |
Consulta Estándar | SERNF | ||
Help | Serie del documento soporte. | Número inicial del documento soporte. | Número final de documento soporte. |
Tablas Genéricas en el archivo SX5 – Tablas Genéricas:
Crear nuevos registros en la 00 - 01 Series de Facturas
Clave | Descripción |
---|---|
DCS | 0000000000001 |
2.11 ENVÍO DE EMAIL AL REALIZAR TRANSMISIÓN AUTOMÁTICA
2.11.1 Visión General
Producto | TOTVS Backoffice | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||||||||||
Segmento: | Backoffice | ||||||||||||
Módulo: | SIGAFAT - Facturación. | ||||||||||||
Función: |
| ||||||||||||
País: | Colombia (COL) / Pacote atusx: 010898 | ||||||||||||
Ticket: | 14200456 | ||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-15818 |
Situación:
En la rutina de Documentos Electrónicos (MATA486), se solicita la funcionalidad de envío automático de los archivos en formato XML y PDF vía Email en el proceso estándar de Transmisión Electrónica.
Solución:
En la rutina de Documentos Electrónicos (MATA486):
- Se cambia el nombre la acción "Imprimir PDF" para que se visualice como "Imprimir PDF / Envío por Email".
- Se realizó ajuste en la función que Genera log de la transmisión electrónica (M486GENLOG), para que al realizarse la transmisión electrónica, si se activa la funcionalidad del envío de email mediante el nuevo parámetro ¿Envío de Email? con opción Sí; y el cliente no tiene configurado el email en el campo Email (A1_EMAIL) o el campo Email Recep. (AI0_RECE) se informe al Cliente que no se envió el email en el log de la transmisión.
En la rutina de Funciones genéricas para generación de XML para Colombia (M486XFUNCO):
Se modificó la Función para el llenado del objeto oWSfactura solicitado por TheFactory HKA, con datos obtenidos del XML (M486XMLHKA) para que si existe el parámetro ¿Envío de Email? (MV_PAR06) y está informado con la opción Sí, se envíen los siguientes atributos al web service de The Factory HKA:
IMPORTANTE
Si la rutina de Documentos Electrónicos (MATA486), tiene fecha superior o igual al 23/12/2022, la pregunta de ¿Envío de Email?, debe configurarse en el Orden 07 (MV_PAR07), en caso contrario debe configurarse en el Orden 06 (MV_PAR06)
En la clase Destinatarios:
- El atributo canalDeEntrega sea informado con valor 0 (para opción de envío por Email)
- El atributo email, donde si existe el campo Email Recep. (AI0_RECE) en los Complementos del Cliente se tome de ahí el para el envío, en caso de no existir o que se encuentre vacío se toma como opción de email de envío el valor configurado en el campo Email (A1_EMAIL).
En la clase Clientes:
- El atributo notificar se informa con el valor SI.
En la rutina de Impresión de Representación Impresa Facturación Electrónica Colombia (M486PDFCOL):
- Se modificó la función que Obtiene los valores para envío de Email (ObtEmail), para que en la rutina de Documentos Electrónicos (MATA486), al ejecutar la acción Imprimir PDF / Envío de Email e indicar el parámetro ¿Formato? con la opción E-mail, si existe el campo Email Recep. (AI0_RECE) en los Complementos del Cliente se tome de ahí el para el envío, en caso de no existir o que se encuentre vacío se toma como opción de email de envío el valor configurado en el campo Email (A1_EMAIL).
- Se agregó una validación para indicarle al usuario que el Email de un Cliente de algún documento no está informado, cuando se realiza el envío de documentos electrónicos via Email.
2.11.2 Configuraciones Previas
En el grupo de preguntas MATA486, agregar la pregunta 06:
Orden | 01 | 02 | 03 | 04 | 05 | 06 | 07 |
Pregunta | ¿Tipo de Documento? | ¿Serie? | ¿Estatus | ¿Fecha Inicial? | ¿Fecha Final? | ¿Tipo Nota Ajuste? | ¿Envío a Email? |
Tipo | N | C | C | D | D | N | N |
Tamaño | 1 | 3 | 1 | 8 | 8 | 1 | 1 |
Variable | MV_PAR01 | MV_PAR02 | MV_PAR03 | MV_PAR04 | MV_PAR05 | MV_PAR06 | MV_PAR07 |
Validación | |||||||
Objeto | C-Combo | G - Get | G - Get | G - Get | G - Get | C-Combo | C - Combo |
Consulta Estándar | SERNF | ||||||
Preselección | 1 | ||||||
Opciones | Factura | Ninguna Débito Crédito | Si No |
IMPORTANTE
Si la rutina de Documentos Electrónicos (MATA486), tiene fecha superior o igual al 23/12/2022, la pregunta de ¿Envío de Email?, debe configurarse en el Orden 07 (MV_PAR07), en caso contrario debe configurarse en el Orden 06 (MV_PAR06)
Creación de campos en el archivo Campos - SX3:
Tabla AI0 - Complemento de Clientes:
Campo | AI0_RECE |
Tipo | C |
Tamaño | 30 |
Decimal | 0 |
Formato | |
Título | Email Recep. |
Descripción | Email para Recepción FE |
Nivel | 1 |
Utilizado | Si |
Obrigatório | No |
Browse | No |
Help | Indica el Email de Recepción (Buzón Tributario de la DIAN), en caso de que no sea el mismo al informado en el campos Email (A1_EMAIL) del Cliente, y será utilizado para el envío automático al realizar la transmisión de documentos electrónicos o al realizar el envío desde la opción Imprimir PDF / Envío de Email. |
Envío de Email
Para la funcionalidad de envío de la factura electrónica (archivos XML y PDF) por E-mail a clientes, es necesario configurar los siguientes parámetros:
Nombre: | MV_RELSERV |
Tipo: | C |
Contenido: | |
Descripción: | Servidor de envío de e-mail. |
Nombre: | MV_RELACNT |
Tipo: | C |
Contenido: | |
Descripción: | Cuenta a ser utilizada en el envío de e-mail. |
Nombre: | MV_RELPSW |
Tipo: | C |
Contenido: | |
Descripción: | Contraseña de la cuenta de e-mail. |
En caso de que el servidor de correo utilice autenticación, se deben configurar los siguientes parámetros:
Nombre: | MV_RELATH |
Tipo: | L |
Contenido: | .T. |
Descripción: | Servidor de email requiere autenticación. |
Nombre: | MV_RELSSL |
Tipo: | L |
Contenido: | |
Descripción: | Habilita el SSL en el envío y recepción de emails. |
Nombre: | MV_RELTLS |
Tipo: | L |
Contenido: | |
Descripción: | El servidor de SMTP tiene conexión del tipo segura ( SSL/TLS ). |
Nombre: | MV_SRVPORT |
Tipo: | N |
Contenido: | |
Descripción: | Puerto de salida del servidor de envío. |
2.11.3 Ejemplo de Utilización
- En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Archivos | Productos.
- Incluir uno o varios Productos para la generación de una Factura de Venta (NF).
- En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Archivos | Tipos de Entrada y Salida.
- Incluir el Tipo de Salida (TES) para el cálculo de impuestos de la Factura de Venta (NF)
- En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Archivos | Clientes.
Configurar el Cliente para la generación de la Factura de Venta (NF).
Proceso de Transmisión de Documentos
- Ingresar al módulo Facturación (SIGAFAT) e ir al menú "Actualización | Facturación | Facturación Electrónica" (MATA486).
- Informar los parámetros:
- ¿Tipo de Documento?: Factura
- ¿Serie?: <Serie de la factura creada en las "Pre-condiciones">
- ¿Estatus?: 0 - No transmitida
- ¿Fecha Inicial?: <Fecha de inclusión de la factura creada en las "Pre-condiciones">
- ¿Fecha Final?: <Fecha de inclusión de la factura creada en las "Pre-condiciones">
- ¿Envío a Email: Sí
- Dar clic en el botón "Transmitir".
- Informar los parámetros:
- ¿Serie de la Factura?: <Serie de la factura creada en las "Pre-condiciones">
- ¿Factura Inicial?: <Número de Documento de la factura creada en las "Pre-condiciones">
- ¿Factura Final?: <Número de Documento de la factura creada en las "Pre-condiciones">
- Dar clic en "Ok".
- Revisar la bandeja del email del correo que fue configurado para el envío automático, validando que se haya recibido un email que contiene adjuntos en un archivo .zip el XML y PDF del documento electrónico transmitido.
IMPORTANTE
El proceso de envío automático de los Documentos Eelctrónicos aplica para lso Documentos de tipo Factura de Venta (NF), Nota de Crédito de Cliente (NCC) y Nota de Débito de Cliente (NDC).
2.12 Medios de Pago para Documentos Electrónicos
2.12.1 Visión General
El Proveedor Tecnológico denominado The Factory HKA, tiene disponible la clase MediosDePago que corresponde a la información del pago del Documento Electrónico, para poder activar la funcionalidad de enviar los atributos medioPago y metodoDePago es necesario tener configurados los campos Método Pago (E4_MPAGSAT), Medio Pago (F1_TPDOC), Medio Pago (F2_TPDOC) y Medio Pago (F1_TPDOC).
Importante
Si se tiene compilado el Punto de Entrada M486OWSCOL, la funcionalidad tomará como prioridad el Punto de Entrada, por lo cual si quiere tomar la funcionalidad estándar deberá de descompilarse del rpo el Punto de Entrada.
La solución respecto a la clase Medios de Pago, aplica para todos los documentos que son transmitidos electrónicamente.
2.12.2 Configuraciones Previas
Contar con las siguientes rutina actualizadas, con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
LOCXCOL.PRW | Funciones Genéricas de Notas Fiscales Colombia | 28/11/2022 |
M486XFUNCO.PRW | Funciones Genéricas FE Colombia | 27/11/2022 |
MATA468N.PRX | Generación automática de Facturas/Remitos | 26/11/2022 |
MATA462AN | Generación de Remitos | 26/11/2022 |
- Ingresar al módulo Facturación (SIGAFAT) ir al menú "Actualizaciones | Archivos | Condiciones de Pago " (MATA360).
- Configurar una Condición de Pago informando el campo Método de Pago(E4_MPAGSAT) con el valor "2-Crédito".
- Contar con el catálogo de Medios de Pago actualizado:
- Configurar el parámetro MV_PATH814, con la ruta local donde se colocarán los archivos en formato .csv para la carga de Catálogos.
- Colocar los siguientes archivos en formato .csv en la ruta definida en el parámetro MV_PATH814, conteniendo las siguientes estructuras:
- 06Medios de Pago.csv
- 06Medios de Pago.csv
Configurar los siguientes campos en el Diccionario de Datos:
Consulta Estándar:
Alias | Tipo | Secuencia | Columna | Descripción | Contiene |
---|---|---|---|---|---|
ECU022 | 1 | 01 | RE | Medios de Pago | F3I |
ECU022 | 2 | 01 | 01 | F812SXB("S006","Codigo") | |
ECU022 | 5 | 01 | VAR_IXB |
Campo | C5_TPDOC |
---|---|
Tipo | C - Caracter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Medio Pago |
Descripción | Medio de Pago |
Estandar | "1" |
Consulta | COL006 |
Validación de sistema | Naovazio() .or. ValidF3I("S006", M->C5_TPDOC,1,2) |
Nivel | 1 |
Utilizado | Sí |
Browse | No |
Help | Informe el Medio de Pago para el Documento generado, de acuerdo al catálogo 06MediosPago. |
Campo | F2_TPDOC |
---|---|
Tipo | C - Caracter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Medio Pago |
Descripción | Medio de Pago |
Estandar | "1" |
Consulta | COL006 |
Validación de sistema | Naovazio() .or. ValidF3I("S006", M->F2_TPDOC,1,2) |
Nivel | 1 |
Utilizado | Sí |
Browse | No |
Help | Informe el Medio de Pago para el Documento generado, de acuerdo al catálogo 06MediosPago. |
Campo | F1_TPDOC |
---|---|
Tipo | C - Caracter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Título | Medio Pago |
Descripción | Medio de Pago |
Estandar | "1" |
Consulta | COL006 |
Validación de sistema | Naovazio() .or. ValidF3I("S006", M->F1_TPDOC,1,2) |
Nivel | 1 |
Utilizado | Sí |
Browse | No |
Help | Informe el Medio de Pago para el Documento generado, de acuerdo al catálogo 06MediosPago. |
2.10.3 Ejemplo de utilización.
Pre-condiciones:
Ingresar al módulo de Compras (SIGACOM), ir al menú | Actualizaciones | Archivos | Condiciones de Pago
Configurar una Condición de Pago, informado el campo Método Pago (E4_MPAGSAT) con la opción 1-Contado o 2- Crédito.
Documento Soporte.
- Ingresar al módulo de Compras (SIGACOM), ir al menú |Actualizaciones | Movimientos | Factura de Entrada (MATA101N)
- En la pregunta ¿Tipo de Factura? seleccionar “Docto Soporte” y confirmar.
- En la pantalla principal, en el encabezado confirmar que en título se informe que es un “Doc. Soporte”
Dar clic en el botón “Incluir”. - Seleccionar al Proveedor que está relacionado al Cliente.
- Seleccionar la Serie configurada para el Documento Soporte, automáticamente se cargará el Número Documento y la Serie 2.
- Informar el campo Medio Pago (F1_TPDOC).
Agregar un Producto, Cantidad, Valor Unitario, Valor Total y el Tipo de Entrada.
Nota
Los Impuestos Variables (SFB) relacionados a al Tipo de Entrada (TES) informada en la Factura de tipo Documento Soporte, deben contener información el campo Impuesto FE (FB_IMPSAT)
- En la pestaña “Títulos” indicar la Condición de Pago que fue configurada previamente.
- Grabar la Factura.
Transmisión de Documento Soporte.
- Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
- Capturar los parámetros correspondientes para realizar el filtro de documentos.
¿Tipo de Documento? seleccionar “Docto. Soporte”.
¿Serie? seleccionar “DCS”.
¿Estatus? seleccionar “0” para obtener todos los documentos.
Asignar las Fechas Inicio/Fin. - Confirmar.
- En la pantalla principal verificar que exista el Documento Soporte.
- Dar clic en el botón “Transmitir”.
- Asignar la serie “DCS” y el Número de Documento Inicial y Final.
- Confirmar Transmisión.
- Revisar el Log de transmisión y validar que la transmisión haya sido exitosa.
Imprimir PDF.
- Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
- Capturar los parámetros correspondientes para realizar el filtro de documentos.
¿Tipo de Documento? seleccionar “Docto. Soporte”.
¿Serie? seleccionar “DCS”.
¿Estatus? seleccionar “0” para obtener todos los documentos.
Asignar las Fechas Inicio/Fin. - Confirmar.
- Dar clic en el botón “Otras Acciones”.
- Seleccionar la opción "Imprimir PDF".
- Asignar la Serie “DCS”, el Número de Documento Inicial y Final e indicar el Formato PDF.
- Confirmar.
- Revisar la información impresa en el archivo PDF del Documento Soporte, y validar que en la parte inferior en la sección Medios de Pago se muestre la información de manera correcta.
2.13 Punto de Entrada para Modificar el atributo adjuntos (M486PEADJU)
2.13.1 Visión General
Punto de Entrada, que permite modificar el atributo Adjuntos, que es informado al realizar la transmisión de documentos y que actualmente se envía con el valor fijo "0", que corresponde a la opción de No se admiten adjuntos.
2.13.2 Configuraciones Previas
Contar con la siguiente rutina actualizada, con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
---|---|---|
M486XFUNCO | Funciones genéricas para generación de XML para Colombia | 17/04/2023 |
Compilar el punto de entrada M486PEADJU, el cual recibe los siguientes parámetros:
- Serie del documento.
- Folio del documento.
- Código del Cliente.
- Código de la Tienda.
- Prefijo (f-Factura, c-Nota de Crédito, d-Nota de Débito y n - Nota de Ajuste)
2.13.3 Ejemplo del Punto de Entrada
User Function M486PEADJU() Local cSerieDoc := PARAMIXB[1] //Serie Local cNumDoc := PARAMIXB[2] //Numero de Documento Local cCodCli := PARAMIXB[3] //Código de Cliente Local cCodLoj := PARAMIXB[4] //Código de la Tienda Local cPrefijo := PARAMIXB[5] //f-Factura, c-Nota de Crédito, d-Nota de Débito y n - Nota de Ajuste Local cAdjunto := "0" cAdjunto := "1" Return cAdjunto
2.14 Punto de Entrada para Agregar nuevas opciones de Leyendas (M486PELEYE)
2.14.1 Visión General
Punto de Entrada, que permite agregar nuevas opciones de Leyendas para la pantalla de Documentos Electrónicos (MATA486).
2.14.2 Configuraciones Previas
Contar con la siguiente rutina actualizada, con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
---|---|---|
MATA486 | Documentos Electrónicos | 17/04/2023 |
Compilar el punto de entrada M486PELEYE.
2.14.3 Ejemplo del Punto de Entrada
User Function M486PELEYE() Local aColorPE := {} aAdd(aColorPE, {"BR_PINK",OemToAnsi("En espera de adjunto")}) Return aColorPE
2.15 Punto de Entrada para Agregar nuevas opciones de Leyendas (M486PESTA)
2.15.1 Visión General
Punto de Entrada, que permitE visualizar las nuevas Leyendas en el Borwse de la pantalla de Documentos Electrónicos (MATA486).
2.15.2 Configuraciones Previas
Contar con la siguiente rutina actualizada, con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
---|---|---|
MATA486 | Documentos Electrónicos | 17/04/2023 |
Compilar el punto de entrada M486PESTA.
2.15.3 Ejemplo del Punto de Entrada
User Function M486PESTA() Local nTipoD := PARAMIXB //1 = SF2, 2 = SF1 y 3 = SFE Local aEstatus := {} If nTipoD == 1 aAdd(aEstatus, {"F2_FLFTEX=='2' .AND. F2_CODMUN =='05001'","BR_PINK"}) EndIf Return aEstatus
2.16 Ampliación de longitud del campo "Código" de tabla S014
2.16.1 Visión General
Se activa funcionalidad para ampliar la longitud permitida en el campo "Código" de la tabla S014 - "Tipos de Obligaciones-Respon." de 4 a 7 posiciones, para que al cargar el catálogo no se corten los códigos de responsabilidad existentes y permita transmitir Documentos de Soporte con dichos códigos.
2.16.2 Configuraciones Previas
Contar con la siguiente rutina actualizada, con fecha igual o posterior:
Rutina | Nombre técnico | Fecha |
---|---|---|
FISA812 | Definición de Catálogos. | 25/04/2023 |
FISA814 | Carga de Catálogos. | 25/04/2023 |
FISA827 | Registro Responsabilidades/Obligaciones DIAN y Tributos. | 27/04/2023 |
FATXFUMI | Funciones genéricas para Facturación - Mercado Internacional | 18/11/2022 |
En la rutina de Carga de Catálogos (FISA814), se amplia longitud permitida en el campo "Código" de Definición de la Tabla S014 - "Tipos de Obligaciones-Respon.", de 4 a 7 posiciones para que al cargar el Catálogo no se trunquen los Códigos de Responsabilidad de acuerdo a lo definido por la DIAN.
En la rutina de Registro de Responsabilidades/Obligaciones DIAN y Tributos (FISA827), para el campo Cod. Resp. (AIT_CODRES), se modificó para realizar la búsqueda por el campo "Código" de acuerdo al tamaño del campo configurado para la consulta de Tipos de Obligaciones y Responsabilidades (S014).
En la rutina de Definición de Catálogos (FISA812), se modifica la funcionalidad para que se permita el Borrado de la estructura y datos de las Tablas, para permitir volver a cargarlo cuando se requiera desde interfaz del sistema, este proceso solo se podrá realizar de usuarios que estén configurados como administradores.
Para mayor información : 16671949 DMINA-19202 DT Error 109 en transmisión de Docto. de Soporte MATA486 COL
2.16.3 Diccionario de Datos
Modificación en la tabla SX3 - Campos (Pacote:012097)
Campo | AIT_CODRES |
Tipo | C |
Tamaño | 7 |
Val. Sistema | Vazio() .Or. ValidF3I("S014", M->AIT_CODRES,1,7) |
2.17 Fabricante de Software campo extra 5170007 en la impresión de documentos transmitidos
Producto | TOTVS Backoffice | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | |||||||||
Segmento: | Backoffice | |||||||||
Módulo: | SIGAFAT - Facturación | |||||||||
Función: |
| |||||||||
País: | Colombia | |||||||||
Ticket: | No aplica. | |||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-21078 |
2.17.1 Visión general
En la rutina de Transmisión Electrónica (MATA486) al realizar la transmisión electrónica y ejecutar la impresión gráfica desde la acción "Imprimir PDF", a través del Proveedor Tecnológico denominado The Factory HKA de los documentos de tipo Factura de Venta (NF), Nota de Débito de Cliente (NDC) y Nota de Crédito de Cliente (NCC), Nota de Ajuste de Débito, Nota de Ajuste de Crédito y Documento de Soporte, se requiere que en la representación gráfica se visualice el Fabricante de Software.
2.17.2 Configuraciones Previas
En la rutina de Carga de Catálogos (FISA814):
Se agrega la estructura de la definición de la Tabla S019 - Fabricante de Software, para permitir incluir la información requerida para el campo extra 5170007 del fabricante de software.
En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Definición de Catálogos (FISA812).
Validar que para el catálogo S019 - Fabricante de Software exista la estructura y que sea la siguiente:
Información
Si se requiere se puede modificar el tamaño de los campos según se requiera solo es importante mencionar que la suma del tamaño de los campos no debe superar un total de 250.
En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Mantenimiento de Catálogos (FISA813).
Incluir manualmente o por medio del 19FabricanteSoftware.csv, la información de Fabricante de Software.
Ejemplo para el proceso manual
Ejemplo para el proceso por medio del archivo .CSV
Configurar el parámetro MV_PATH814, con la ruta local donde se colocarán los archivos en formato .csv para la carga de catálogos.
Tener el siguiente archivo con la información de la fabrica de software, el cual debe tener la siguiente información separa por pipes (|), donde:
Posición 1 = Valor para el atributo controlInterno1 (informar el nombre del Software).
Posición 2 = Valor para el atributo controlInterno2 (informar el NIT del Fabricante de Software).
Posición 3 = Valor para el atributo nombre (para el nombre de fabricante se debe colocar el valor 5170007).
Posición 4 = Valor para el atributo pdf (colocar el valor 1 para visualizar los datos del fabricante en el PDF de la representación gráfica).
Posición 5 = Valor para el atributo valor (informar la Razón Social del Fabricante de Software).
Posición 6 = Valor para el atributo xml (colocar el valor 1 para visualizar los datos del fabricante en el XML).
IMPORTANTE
Es importante indicar en el campo "Nombre" en la 3ra posición del catálogo el valor 5170007 ya que esté indica como el campo "Fabricante de Software" por parte del proveedor tecnológico denominado The Factory HKA.
2.17.3 Ejemplo de utilización
- En el módulo Facturación (SIGAFAT), ir al menú Actualización | Facturación | Documentos Electrónicos (MATA486).
- Informar los siguientes parámetros para el filtrado de los Documentos a transmitir:
- ¿Tipo de Documento? = Seleccionar “Factura”.
- ¿Serie? = <Serie de la Factura a transmitir>.
- ¿Estatus? = Seleccionar la opción “0”, para obtener todos los Documentos, sin realizar filtrado por estatus.
- Informar el rango de Fecha Inicial y Final para considerar el filtrado por la fecha de emisión del Documento a transmitir.
- Ejecutar la acción Transmitir.
- Informar los siguientes parámetros:
- ¿Serie de la Factura? = <Serie de la Factura a transmitir>
- ¿Factura Inicial? = <Folio Inicial de la Factura a transmitir>
- ¿Factura Final? = <Folio Final de la Factura a transmitir>
- Validar en el log del proceso que la transmisión haya sido exitosa y que el documento se actualice con estatus autorizado (F1_FLFTEX = '6').
- En Otras acciones ejecutar la acción Imprimir PDF.
- Informar los parámetros:
- ¿Serie de Documento? = <Serie de la Factura de Venta creada en las pre-condiciones>.
- ¿Documento Inicial? = <Folio de la Factura de Venta creada en las pre-condiciones>.
- ¿Documento Final? = <Folio de la Factura de Venta creada en las pre-condiciones>.
- Validar que la representación gráfica proporcionada por The Factory HKA en la sección Pie de Página se visualice la etiquetas de Fabricante de Software.
2.18 Cálculo de Impuestos saludables ICUI/IBUA y la impresión de documentos transmitidos
Línea de producto: | Línea Protheus | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Segmento: | Backoffice | ||||||||||||||||||
Módulo: | SIGAFAT - Facturación | ||||||||||||||||||
Función: |
| ||||||||||||||||||
País: | Colombia Pacote: 012985 | ||||||||||||||||||
Ticket: | NA | ||||||||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-21264 |
2.18.1 Visión general
Estatuto tributario - Articulo 513
Conforme al artículo 513 del Estatuto Tributario, titulado “Impuestos Saludables”, por el cual establecen los parámetros normativos para reportar los impuestos a bebidas Ultraprocesadas Azucaradas y Alimentos Ultraprocesados en el caso en el que el producto aplique.
Los impuestos saludables deben calcularse a los documentos de entrada como lo son Factura de Entrada(MATA101N), Documento Soporte(MATA101N), Notas de Crédito y Debito de Proveedor y Notas de ajuste(MATA466N) y a los documentos de salida como lo son Facturas de Cliente(MATA467N) y Notas de Crédito y Débito de cliente(MATA465N).
Regla de negocio.
- Para los documentos de entrada o de salida se realizará el cálculo cuando el documento tenga un producto con el campo ¿Imp Salud? igual a "S - Si", si el producto tiene informado el campo ¿Imp Salud? igual a "N - No" o esta vacio o el campo no existe, el impuesto no será calculado.
2.18.2 Configuraciones Previas
- En el módulo Facturación(SIGAFAT), ir al menú Actualizaciones | Archivos | Clientes.
- Configurar un Cliente con los valores estandar.
- En el módulo Compras(SIGACOM), ir al menú Actualizaciones | Archivos | Productos.
- Configurar un Producto con el campo ¿Imp Salud? igual a "S - Si"
- En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Tipos de Entrada y Salida.
- Configurar un Tipo de Salida, con cálculo de Impuesto a los productos comestibles.
- En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Imp. Variables
- Configurar el impuesto ICUI:
- Impuesto (FB_CODIGO): CUI
- Descripción (FB_DESCR): PRODUCTOS COMESTIBLES ULTRAPRO
- Fórmula Entrada (FB_FORMENT): M100ICUI
- Fórmula Salida (FB_FORSAI): M460ICUI
- % Alícuota (FB_ALIQ): 10
- Cpo del L.F. (FB_CPOLVRO): C
- Clase Impuesto (FB_CLASSE): I-Impuesto
- Impuesto FE (FB_IMPSAT): ZZ
- Configurar el impuesto ICUI:
- En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Definición de Catálogos (FISA812).
- Validar que para el catálogo S020 - Impuestos Extras y que sea la siguiente:
- Validar que para el catálogo S020 - Impuestos Extras y que sea la siguiente:
En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Mantenimiento de Catálogos (FISA813).
Incluir manualmente o por medio del 20ImpuestosExtras.csv, la información de los Impuestos que serán impresos como campos extras.
Ejemplo para el proceso manual
Ejemplo para el proceso por medio del archivo .CSV
Configurar el parámetro MV_PATH814, con la ruta local donde se colocarán los archivos en formato .csv para la carga de catálogos.
Tener el siguiente archivo con la información de la fabrica de software, el cual debe tener la siguiente información separa por pipes (|), donde:
Posición 1 = Valor para el atributo controlInterno1 (informar el nombre del Software).
Posición 2 = Valor para el atributo controlInterno2 (informar el NIT del Fabricante de Software).
Posición 3 = Valor para el atributo nombre (para el nombre de fabricante se debe colocar el valor 5170007).
Posición 4 = Valor para el atributo pdf (colocar el valor 1 para visualizar los datos del fabricante en el PDF de la representación gráfica).
Posición 5 = Valor para el atributo valor (informar la Razón Social del Fabricante de Software).
Posición 6 = Valor para el atributo xml (colocar el valor 1 para visualizar los datos del fabricante en el XML).
Posición 7 = Valor que se utilizará para determinar el Impuesto que se va a imprimir (colorcar el código del impuesto de la tabla SFB - Impuestos Varibles).
2.18.3 Ejemplo de utilización
Para Documento de Entrada con cálculo de impuestos saludables ICUI/IBUA
- En el Encabezado informar del Documento informar los campos:
- Proveedor (F1_FORNECE)
- Tienda (F1_LOJA)
- Serie (F1_SERIE)
- Num. de Doc. (F1_DOC)
- En los Ítems del Documento informar los siguientes campos:
- Producto (D1_COD) - campo ¿Imp Salud? igual a "S - Si"
- Cantidad (D1_QUANT)
- Valor Unit. (D1_VUNIT)
- Valor Total (D1_TOTAL)
- Tipo Entrada (D1_TES)
- En la pestaña "Impuestos" en el pie del Documento, validar el cálculo de impuestos saludables ICUI/BUA
Para Documento de Salida con cálculo de impuestos saludables ICUI/IBUA
- En el Encabezado informar del Documento informar los campos:
- Cliente (F2_CLIENTE)
- Tienda (F2_LOJA)
- Serie Docto. (F2_SERIE)
- N. Documento (F2_DOC)
- En los Ítems del Documento informar los siguientes campos:
- Producto (D2_COD) - campo ¿Imp Salud? igual a "S - Si"
- Cantidad (D2_QUANT)
- Valor Unit. (D2_PRCVEN)
- Valor Total (D2_TOTAL)
- Tipo Salida (D2_TES)
- En la pestaña "Impuestos" en el pie del Documento, validar el cálculo de impuestos saludables ICUI/IBUA
2.19 Rechazos al transmitir una Factura de Exportación (ZE02,FAR02,FAR03).
Producto | TOTVS Backoffice | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | |||||||||
Segmento: | Backoffice | |||||||||
Módulo: | SIGAFAT - Facturación | |||||||||
Función: |
| |||||||||
País: | Colombia (COL) | |||||||||
Ticket: | 20049456 | |||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-23201 |
SITUACIÓN/REQUISITO
En la rutina de Documentos Electrónicos (MATA486), al intentar transmitir una Factura de Exportación (NF) se presenta las siguientes reglas de rechazo:
- ZE02 ,Valor de la Firma inválido.
- FAR02, Descargo de Responsabilidad - "Remítase a regla FAD15b ya que al cumplirse dicha regla verifica que este elemento corresponder al mismo valor informado en DocumentCurrencyCode.
- FAR03, Descargo de Responsabilidad - "SourceCurrencyBaseRate trae valor diferente a 1.00.
SOLUCION
En la rutina de Funciones Genéricas de Facturación Electrónica - Colombia (M486XFUNCO):
En la función Función para llenado de oWSfactura solicitado por TheFactory HKA, se realiza el ajuste para cuando el documento es una Factura de Exportación, envié en los Datos adicionales (oWSextras) el valor del campo extra "FEXP2".
Regla de Rechazo ZE02- Mensaje: Valor de la Firma inválido
En la INI de Script de generación de archivos XML; NF y NDC de exportación (FATSECOL):
Para las reglas de rechazo FAR02 y FAR03 se requiere modificar las siguientes lineas en al archivo INI.
FATSECOL
(PRE) _aTotal[001] += ' <cbc:SourceCurrencyCode>' + "COP" + '</cbc:SourceCurrencyCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:SourceCurrencyBaseRate>' + Alltrim(Str(SF2->F2_TXMOEDA,11,2)) + '</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TargetCurrencyCode>' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) )
2.20 Transmisión de Factura de Venta (NF), Nota de Crédito (NCC) y Nota de Débito con Cliente Nacional con Moneda diferente de 1-Pesos (Anexo 1.9)
Producto | TOTVS Backoffice | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||||||||||||||||
Segmento: | Backoffice | ||||||||||||||||||
Módulo: | SIGAFAT - Facturación | ||||||||||||||||||
Función: |
| ||||||||||||||||||
País: | Colombia (COL) | ||||||||||||||||||
Ticket: | 20240417 | ||||||||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-23601 |
SITUACIÓN/REQUISITO
En la rutina de Documentos Electrónicos (MATA486), al realizar la transmisión de una Factura de Venta (NF), Nota de Crédito de Cliente (NCC) o Nota de Débito de Cliente (NDC) con Cliente Nacional no está realizando la conversión de los montos a Pesos Colombianos (COP) y los atributos MonedaOrigen, MonedaDestino, BaseMonedaOrigen y BaseMonedaDestino se envían invertidos, lo cual presenta los siguientes rechazos:
FAR02, Descargo de Responsabilidad - "Remítase a regla FAD15b ya que al cumplirse dicha regla verifica que este elemento corresponder al mismo valor informado en DocumentCurrencyCode.
FAR03, Descargo de Responsabilidad - "SourceCurrencyBaseRate trae valor diferente a 1.00
Al realizar la transmisión de una Factura de Venta de Exportación (Cliente Extranjero), en el SoapRequest en los nodos direccionCliente y direccionFiscal, se solicita que sólo se envíen los atributos Dirección y País.
SOLUCION
En la rutina de Funciones Genéricas de Documentos Electrónicos (M486XFUN):
En las Funciones que generan los nodos de Impuestos a nivel encabezado y detalle (fGetTaxas/fGetTaxDet), se desactivó el uso del parámetro MV_ANEXO19, que permitía desactivar la funcionalidad del Anexo 1.9, el cual ya es obligatorio a partir del 01 de Mayo del 2024, y se eliminó condición de que el Cliente sea Extranjero (A1_EST igual a 'EX') para que la conversión a moneda Pesos Colombianos (COP) de los Impuestos y la conversión se realizará si la especie del documento es Factura de Venta (NF), Nota de Crédito de Cliente (NDC) o Nota de Débito de Cliente (NDC) y la Moneda (F1_MOEDA/F2_MOEDA) es diferente de 1.
En la rutina de Funciones Genéricas de Facturación Electrónica de Colombia (M486XFUNCO):
Se realizaron los siguientes ajuste, que aplican si el Cliente es Extranjero (A1_EST = 'EX') o Nacional, y la Moneda DIAN (CTO_MOESAT) de la Moneda es diferente de (COP) :
- El atributo moneda se envía con el valor COP.
- Se envían los campos extras FEXP1, FEXP2 y FEXP3, para activar el UBL Extensión y enviar los valores en la moneda original del Documento.
- Se realiza ajuste para que no se envié en los campos extras la tasa de cambio para las Facturas de Exportación o Nacional.
Se realiza ajuste para que al transmitir una Factura de Venta (NF), Nota de Crédito de Cliente (NCC) o Nota de Débito de Cliente (NDC), si el Cliente es Extranjero (A1_EST igual a 'EX') en los nodos direccionCliente y direccionFiscal del Soap Request, se envien únicamente los atributos Direccion y Pais.
En los archivos de la Estructura del XML de Documentos de Salida y Estructura del XML de Documentos de Entrada (FATSCOL.INI/FATECOL.INI):
Se realizaron los siguientes ajustes, para cuando la moneda del documento es diferente de la moneda local:
- Informar el atributo SourceCurrencyCode con el valor COP.
- Informar el atributo SourceCurrencyBaseRate con el valor del campo Tasa Moneda (F1_TXMOEDA/F2_TXMOEDA).
- Informar el atributo TargetCurrencyCode con el valor del campo Moneda DIAN (CTO_MOESAT) de la moneda del documento.
- Realizar la conversión del Descuento y Precio de Venta para cada uno de los ítems.
En el archivo de la Estructura del XML de Documentos de Exportación (FATSECOL.INI): - Se elimina el uso del parámetro MV_ANEXO19, que permitía desactivar la funcionalidad del Anexo 1.9, el cual ya es obligatorio a partir del 01 de Mayo del 2024.
- Se realiza conversión del atributo LineExtensionAmount del nodo InvoiceLine/DebitNoteLine, para enviar de manera correcta el atributo MontoBase del nodo Descuentos del Soap Request.
2.20.1 Configuraciones Previas
Realizar los ajustes que se indican en color azul para cada uno de los archivos FATSCOL.INI ,FATECOL.INI y FATSECOL.INI:
FATSCOL.INI
FATSCOL.INI
//FATSCOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
[XXX POSICIONAMENTOS]
(PRE) SA2->(DbSetOrder(1))
(PRE) _aTotal[116] := If(SF2->(ColumnPos("F2_MARK")) > 0 ,If(SF2->F2_MARK=='S'.AND. Alltrim(SF2->F2_TIPOPE) $'10|11', .T.,.F. ) , .F.)
(PRE) If(_aTotal[116] ,SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI" .AND. !_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) ( If(!_aTotal[116],AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)), AI0->(MSSeek(xFilial("AI0")+SA2->(A2_CLIENTE+A2_LOJCLI)))), .T.)
[XXX INICIALIZACION]
(PRE) SD2->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))
(PRE) SE1->(DbSetOrder(2))
(PRE) _aTotal[117] := IIF(_aTotal[116] .AND. SF2->(ColumnPos("F2_TIPNOTA")) > 0, SF2->F2_TIPNOTA , "")
(PRE) _aTotal[033] := ALLTRIM (SF2->F2_ESPECIE)
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) _aTotal[093] := ""
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := DtoS(SF2->F2_EMISSAO)
(PRE) _aTotal[095] := Left(_aTotal[095],4) + "-" + Substr(_aTotal[095],5,2)+ "-" + Right(_aTotal[095],2)
(PRE) _aTotal[096] := SF2->F2_HORA
(PRE) _aTotal[097] := fGetTaxas(SF2->F2_DOC, SF2->F2_SERIE, SF2->F2_CLIENTE, SF2->F2_LOJA,SF2->F2_ESPECIE )
(PRE) _aTotal[098] := ALLTRIM( GETNEWPAR( "MV_ID_PROV" , "" ) )
(PRE) _aTotal[099] := ALLTRIM( GETNEWPAR( "MV_ID_SOFT" , "" ) )
(PRE) _aTotal[100] := ALLTRIM( GETNEWPAR( "MV_CODESEC" , "" ) )
(PRE) _aTotal[101] := {"SD2",""}
(PRE) _aTotal[102] := IIF( _aTotal[033] == "NF" , "1" , IIF( _aTotal[033] == "NCC" , "2" , IIF( _aTotal[033] == "NDC" , "3" , IIF( _aTotal[033] == "NDI" , "4" , IIF( _aTotal[033] == "NCI" , "5" , "" ) ) ) ) )
(PRE) _aTotal[103] := ""
(PRE) _aTotal[104] := PADR( Alltrim(SM0->M0_CGC) , 10 , "0" )
(PRE) _aTotal[105] := IIF( _aTotal[033] == "NF" , "f" , IIF( _aTotal[033] == "NCC" .or. _aTotal[033] == "NCI" , "c" , IIF( _aTotal[033] == "NDC" .or. _aTotal[033] == "NDI" , "d" , IIF( _aTotal[116] , "n" , "f" ) ) ) )
(PRE) _aTotal[106] := M486XHEX(PADR( ALLTRIM( substr( SF2->F2_DOC , 4 , Len(SF2->F2_DOC) - 3 ) ) , 10 , "0" ),10)
(PRE) _aTotal[107] := IIF(AllTrim(SF2->F2_ESPECIE)=="NDC" .OR. _aTotal[116],fGetRef(SF2->F2_DOC, SF2->F2_SERIE, SF2->F2_CLIENTE, SF2->F2_LOJA,SF2->F2_ESPECIE,_aTotal[117]),"")
(PRE) _aTotal[108] := ""
(PRE) _aTotal[109] := Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT")
(PRE) _aTotal[110] := {"SFP",""}
(PRE) _aTotal[111] := ""
(PRE) _aTotal[112] := ""
(PRE) _aTotal[113] := ""
(PRE) _aTotal[114] := "FP_FILUSO='" + cFilAnt + "' AND FP_SERIE='" + SF2->F2_SERIE + "' AND FP_ESPECIE= '" + IIf(_aTotal[033] == "NF","1",IIf(_aTotal[116] ,"8","3")) + "' AND FP_NUMINI <='" + SF2->F2_DOC + "' AND FP_NUMFIM >='" + SF2->F2_DOC + "' AND FP_ATIVO ='1'"
(PRE) _aTotal[115] := "SFP->FP_FILUSO=cFilAnt .AND. SFP->FP_SERIE=SF2->F2_SERIE .AND. SFP->FP_ESPECIE='" + IIf(_aTotal[033] == "NF","1",IIf(_aTotal[116] ,"8","3")) + "' .AND. SFP->FP_NUMINI<=SF2->F2_DOC .AND. FP_NUMFIM >=SF2->F2_DOC .AND. SFP->FP_ATIVO = '1'","FP_ATIVO"
(PREREG) FsQuery(_aTotal[101],1,"D2_DOC='" + SF2->F2_DOC + "' AND D2_SERIE='" + SF2->F2_SERIE + "' AND D2_CLIENTE='" + SF2->F2_CLIENTE + "' AND D2_LOJA='" + SF2->F2_LOJA + "'","SD2->D2_DOC=SF2->F2_DOC .AND. SD2->D2_SERIE=SF2->F2_SERIE .AND. SD2->D2_CLIENTE=SF2->F2_CLIENTE .AND. SD2->D2_LOJA=SF2->F2_LOJA","D2_ITEM") .And. .T.
(PREREG) FsQuery(_aTotal[110],1,_aTotal[114],_aTotal[115]) .And. .T.
[SFP CONTROL FOMULARIOS]
(PRE) _aTotal[103] := Dtos( SFP->FP_DTRESOL )
(PRE) _aTotal[103] := Left(_aTotal[103],4) + "-" + Substr(_aTotal[103],5,2)+ "-" + Right(_aTotal[103],2)
(PRE) _aTotal[111] := Alltrim( SFP->FP_NUMINI )
(PRE) _aTotal[112] := Alltrim( SFP->FP_NUMFIM )
(PRE) _aTotal[113] := Alltrim( SFP->FP_CAI )
[SD2 GENERANDO_XML]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",IIf(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)), SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA))) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
[XXX CABECERA]
Linha1 C 060 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
[XXX FACTURA]
(PRE) Iif(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) _aTotal[001] := IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116] ,'<fe:Invoice ','<fe:DebitNote ')
(PRE) _aTotal[001] += 'xmlns:fe="http://www.dian.gov.co/contratos/facturaelectronica/v1" '
(PRE) _aTotal[001] += 'xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" '
(PRE) _aTotal[001] += 'xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" '
(PRE) _aTotal[001] += 'xmlns:clm54217="urn:un:unece:uncefact:codelist:specification:54217:2001" '
(PRE) _aTotal[001] += 'xmlns:clm66411="urn:un:unece:uncefact:codelist:specification:66411:2001" '
(PRE) _aTotal[001] += 'xmlns:clmIANAMIMEMediaType="urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003" '
(PRE) _aTotal[001] += 'xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" '
(PRE) _aTotal[001] += 'xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" '
(PRE) _aTotal[001] += 'xmlns:sts="http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures" '
(PRE) _aTotal[001] += 'xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" '
(PRE) _aTotal[001] += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
(PRE) _aTotal[001] += 'xsi:schemaLocation="http://www.dian.gov.co/contratos/facturaelectronica/v1 ../xsd/DIAN_UBL.xsd '
(PRE) _aTotal[001] += 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2 ../../ubl2/common/UnqualifiedDataTypeSchemaModule-2.0.xsd '
(PRE) _aTotal[001] += 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2 ../../ubl2/common/UBL-QualifiedDatatypes-2.0.xsd" '
(PRE) _aTotal[001] += '>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceAuthorization>'+ _aTotal[113] +'</sts:InvoiceAuthorization>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>'+ _aTotal[103] +'</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>'+ _aTotal[103] +'</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:Prefix>'+ SF2->F2_SERIE2 +'</sts:Prefix>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:From>'+ _aTotal[111] +'</sts:From>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:To>'+ _aTotal[112] +'</sts:To>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode listAgencyID="6" listAgencyName="United Nations Economic Commission for Europe" listSchemeURI="urn:oasis:names:specification:ubl:codelist:gc:CountryIdentificationCode-2.0">CO</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:ProviderID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[098] +'</sts:ProviderID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[099] +'</sts:SoftwareID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareSecurityCode schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[100] +'</sts:SoftwareSecurityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:UBLVersionID>UBL 2.0</cbc:UBLVersionID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ProfileID>DIAN 1.0</cbc:ProfileID>' + ( chr(13)+chr(10) )
// Manual con serie
//(PRE) _aTotal[001] += ' <cbc:ID>'+ SF2->F2_SERIE2 + Alltrim( Str( Val( Substr( SF2->F2_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
// Manual sin serie
(PRE) _aTotal[001] += ' <cbc:ID>'+ Alltrim( Str( Val( Substr( SF2->F2_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) FsQuery(_aTotal[110],2)
// CUFE Aplica solo para NF
(PRE) _aTotal[093] := ""
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[016],' <cbc:UUID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[093] +'</cbc:UUID>' + ( chr(13)+chr(10) ),"")
(PRE) _aTotal[001] += ' <cbc:IssueDate>'+ _aTotal[095] +'</cbc:IssueDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IssueTime>'+ _aTotal[096] +'</cbc:IssueTime>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:InvoiceTypeCode listAgencyID="195" listAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" listSchemeURI="http://www.dian.gov.co/contratos/facturaelectronica/v1/InvoiceType">'+ IIF(AllTrim(SF2->F2_ESPECIE)=="NF","01","92") +'</cbc:InvoiceTypeCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Note><![CDATA['+ IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",SF2->F2_MOTIVO,"") + ']]></cbc:Note>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:DocumentCurrencyCode>'+ Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) +'</cbc:DocumentCurrencyCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CustomizationID>'+ Alltrim(SF2->F2_TIPOPE) +'</cbc:CustomizationID>' + ( chr(13)+chr(10) )
//Documentos referenciados (solo facturas)
(PRE) _aTotal[001] += IIf(SF2->(ColumnPos("F2_UUIDREL")) > 0 .And. AllTrim(SF2->F2_ESPECIE)=="NF",M486DRCOL(SF2->F2_UUIDREL,1),"")
// Orden de Compra
(PRE) _aTotal[001] += IIf(SF2->(ColumnPos("F2_UUIDREL")) > 0 .And. AllTrim(SF2->F2_ESPECIE)=="NF",M486DRCOL(SF2->F2_UUIDREL,2),"")
// DiscrepancyResponse Solo para la Nota de Débito
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' <cac:DiscrepancyResponse>' + chr(13)+chr(10),"")
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' <cbc:ReferenceID/>' + chr(13)+chr(10),"")
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' <cbc:ResponseCode listName="concepto de notas débito" listSchemeURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Anexo_Tecnico_001_Formatos_de_los_Documentos_XML_de_Facturacion_Electron.pdf" name="1:= intereses">' + SF2->F2_TIPREF + "</cbc:ResponseCode>"+ chr(13)+chr(10),"")
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' </cac:DiscrepancyResponse>' + chr(13)+chr(10),"")
// BillingReference solo para la Nota de Débito
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC" .OR. _aTotal[116], _aTotal[107],"")
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX EMISOR]
(PRE) _aTotal[001] := ' <fe:AccountingSupplierParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ "1" +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeID="31">'+ Alltrim(SM0->M0_CGC) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Name><![CDATA['+ _aTotal[075] +']]></cbc:Name>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SM0->M0_BAIRENT) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SM0->M0_CODMUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA['+ Alltrim(SM0->M0_CIDENT) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ Alltrim(SM0->M0_ENDENT) + " " + Alltrim(SM0->M0_COMPENT) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+ "CO" +'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode>'+ AllTrim(SM0->M0_DSCCNA) +'</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:TaxScheme/>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ _aTotal[075] +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingSupplierParty>'
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX RECEPTOR]
(PRE) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PRE) IIf(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)),SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
(PRE) _aTotal[001] := ' <fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ IIF( AllTrim(SA1->A1_PESSOA) == "F" , "2" , "1" ) +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '" schemeAgencyName="CO, DIAN (Dirección de Impuestos y Aduanas Nacionales)" schemeAgencyID="195">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode listName="' + Alltrim(AI0->AI0_TPREG) + '">' + AllTrim(M486RESOBL(SA1->A1_COD,SA1->A1_LOJA,"R")) + '</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID>' + Alltrim(SA1->A1_COD_MUN) + '</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA[' + Alltrim(POSICIONE("CC2",3,xFilial("CC2") + SA1->A1_COD_MUN,"CC2_MUN")) + ']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:PostalZone>' + Alltrim(SA1->A1_CEP) + '</cbc:PostalZone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentity><![CDATA[' + Alltrim(M486VALSX5('12' + SA1->A1_EST)) + ']]></cbc:CountrySubentity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentityCode>' + Alltrim(SA1->A1_EST) + '</cbc:CountrySubentityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA[' + Alltrim(SA1->A1_END) + ']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:Name><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:Name>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SA1->A1_BAIRRO) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SA1->A1_MUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA[' + Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI")) + ']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ AllTrim(SA1->A1_END) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += ' <cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ElectronicMail>' + AllTrim(SA1->A1_EMAIL) + '</cbc:ElectronicMail>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Telephone>' + AllTrim(SA1->A1_TEL) + '</cbc:Telephone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FirstName><![CDATA[' + Alltrim(SA1->A1_NOMEPRI) +']]></cbc:FirstName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:MiddleName><![CDATA[' + Alltrim(SA1->A1_NOMEPES) +']]></cbc:MiddleName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FamilyName><![CDATA[' + Alltrim(SA1->A1_NOMEPAT) + ' ' + Alltrim(SA1->A1_NOMEMAT) +']]></cbc:FamilyName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' </fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SF2->F2_VALBRUT,14,2)) + '</cbc:Amount>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF2->(F2_CLIENTE+F2_LOJA+F2_SERIE+F2_DOC),"E1_EMISSAO") ) , "@R 9999-99-99") + '</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF2->(F2_CLIENTE+F2_LOJA+F2_SERIE+F2_DOC),"E1_VENCTO") ) , "@R 9999-99-99") + '</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyCode>' + "COP" + '</cbc:SourceCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyBaseRate>' + Alltrim(Str(SF2->F2_TXMOEDA,11,2)) + '</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyCode>' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyBaseRate>1.00</cbc:TargetCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:CalculationRate>' + Alltrim(Str(SF2->F2_TXMOEDA,11,2)) + '</cbc:CalculationRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:Date>' + _aTotal[095] + '</cbc:Date>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' </cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX IMPUESTOS]
(PRE) _aTotal[001] := _aTotal[097][1]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX TOTALES]
(PRE) _aTotal[001] := _aTotal[097][2]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[SD2 INVOICE]
(PRE) DbGoTop()
(PREREG) (SB1->(DbSeek(xFilial("SB1") + SD2->D2_COD)),.T.)
(PREREG) (SAH->(DbSeek(xFilial("SAH") + SB1->B1_UM)),.T.)
(PREREG) _aTotal[108] := fGetTaxDet(SD2->D2_DOC,SD2->D2_SERIE,SD2->D2_CLIENTE,SD2->D2_LOJA,SD2->D2_TES,IIF(!_aTotal[116],AllTrim(SF2->F2_ESPECIE),"NDC"))
(PREREG) (_aTotal[001] := IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],' <fe:InvoiceLine>' + ( chr(13)+chr(10) ),' <cac:DebitNoteLine>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>'+ Alltrim(Str(Val(SD2->D2_ITEM))) +'</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],' <cbc:InvoicedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT, 14, 2)) +'</cbc:InvoicedQuantity>' + ( chr(13)+chr(10) ),' <cbc:DebitedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT)) +'</cbc:DebitedQuantity>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(AllTrim(SF2->F2_ESPECIE)$"NF|NDC" .And. SF2->F2_MOEDA<>1,Round(xMoeda(SD2->D2_TOTAL,SF2->F2_MOEDA,1,,MsDecimais(1)+1,SF2->F2_TXMOEDA),MsDecimais(1)),SD2->D2_TOTAL),14,2)) +'</cbc:LineExtensionAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][1],.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:ChargeIndicator>false</cbc:ChargeIndicator>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:AllowanceChargeReason><![CDATA[Aplicación de descuento]]></cbc:AllowanceChargeReason>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:MultiplierFactorNumeric>' + Alltrim(Str(SD2->D2_DESC,5,2)) + '</cbc:MultiplierFactorNumeric>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(IIf(SF2->F2_MOEDA<>1,Round(xMoeda(SD2->D2_DESCON,SF2->F2_MOEDA,1,,MsDecimais(1)+1,SF2->F2_TXMOEDA),MsDecimais(1)),SD2->D2_DESCON),14,2)) + '</cbc:Amount>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' </cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][2],.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],' <fe:Item>', ' <cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:Description><![CDATA['+ Alltrim(SB1->B1_DESC) +']]></cbc:Description>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:PackSizeNumeric>'+ IIf(!Empty(SB1->B1_CONV),Alltrim(STR(SB1->B1_CONV)),"1") +'</cbc:PackSizeNumeric>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>' + Alltrim(SD2->D2_COD) + '</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' </cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],' </fe:Item>', ' </cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],' <fe:Price>',' <cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:PriceAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(SF2->F2_MOEDA<>1,Round(xMoeda(SD2->D2_PRCVEN,SF2->F2_MOEDA,1,,MsDecimais(1)+1,SF2->F2_TXMOEDA),MsDecimais(1)),SD2->D2_PRCVEN),14,2)) +'</cbc:PriceAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:BaseQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT)) +'</cbc:BaseQuantity>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116] ,' </fe:Price>', ' </cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],' </fe:InvoiceLine>' ,' </cac:DebitNoteLine>') ,.T.)
(PREREG) ENCODEUTF8(_aTotal[001])
[XXX INVOICE_FIN]
(POS) FsQuery(_aTotal[101],2)
[XXX FACTURA]
(PRE) _aTotal[094] := &("Lower('face') + '_' + Lower(_aTotal[105]) + Lower(_aTotal[104]) + Lower(_aTotal[106]) + '.xml'")
(ARQ) _aTotal[094]
FACTURA C 019 0 ENCODEUTF8( IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116], '</fe:Invoice>','</fe:DebitNote>'))
FATECOL.INI
FATECOL.INI
//FATECOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
[XXX POSICIONAMENTOS]
(PRE) SA2->(DbSetOrder(1))
(PRE) _aTotal[116] := If(SF1->(ColumnPos("F1_SOPORT")) > 0 ,If(SF1->F1_SOPORT =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
(PRE) _aTotal[117] := If(SF1->(ColumnPos("F1_MARK")) > 0 ,If(SF1->F1_MARK =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
(PRE) _aTotal[089] := If(_aTotal[117] .AND. SF1->(ColumnPos("F1_TIPNOTA")) > 0, SF1->F1_TIPNOTA , "")
(PRE) _aTotal[090] := ""
(PRE) _aTotal[091] := SuperGetMV("MV_ANEXO19",.F.,.F.) Se debe eliminar
(PRE) If(_aTotal[116] .OR. _aTotal[117] ,SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(_aTotal[116] .OR. _aTotal[117] ,SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC" .AND. !_aTotal[116] .AND. !_aTotal[117] ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) IF( _aTotal[116] .OR. _aTotal[117], AI0->(MSSeek(xFilial("AI0")+SA2->(A2_CLIENTE+A2_LOJCLI))) , AI0->(MSSeek(xFilial("AI0")+SF1->(F1_FORNECE+F1_LOJA))) )
[XXX INICIALIZACION]
(PRE) SD1->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))
(PRE) SE1->(DbSetOrder(2))
(PRE) _aTotal[033] := ALLTRIM (SF1->F1_ESPECIE)
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) _aTotal[092] := IIF(_aTotal[116] .OR. _aTotal[117], Posicione("SA1",1,xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI,"A1_EST") ,Posicione("SA1",1,xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA,"A1_EST"))
(PRE) _aTotal[093] := ""
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := DtoS(SF1->F1_EMISSAO)
(PRE) _aTotal[095] := Left(_aTotal[095],4) + "-" + Substr(_aTotal[095],5,2)+ "-" + Right(_aTotal[095],2)
(PRE) _aTotal[096] := SF1->F1_HORA
(PRE) _aTotal[097] := fGetTaxas(SF1->F1_DOC, SF1->F1_SERIE, SF1->F1_FORNECE, SF1->F1_LOJA, If(_aTotal[116], "NCC",SF1->F1_ESPECIE))
(PRE) _aTotal[098] := ALLTRIM( GETNEWPAR( "MV_ID_PROV" , "" ) )
(PRE) _aTotal[099] := ALLTRIM( GETNEWPAR( "MV_ID_SOFT" , "" ) )
(PRE) _aTotal[100] := ALLTRIM( GETNEWPAR( "MV_CODESEC" , "" ) )
(PRE) _aTotal[101] := {"SD1",""}
(PRE) _aTotal[102] := IIF( _aTotal[033] == "NF" , "1" , IIF( _aTotal[033] == "NCC" , "2" , IIF( _aTotal[033] == "NDC" , "3" , IIF( _aTotal[033] == "NDI" , "4" , IIF( _aTotal[033] == "NCI" , "5" , "" ) ) ) ) )
(PRE) _aTotal[103] := ""
(PRE) _aTotal[104] := PADR( Alltrim(SM0->M0_CGC) , 10 , "0" )
(PRE) _aTotal[105] := IIF( _aTotal[033] == "NF" , "f" , IIF( _aTotal[033] == "NCC" .or. _aTotal[033] == "NCI" , "c" , IIF( _aTotal[033] == "NDC" .or. _aTotal[033] == "NDI" , "d" , IIF( _aTotal[033] == "NDP" , "n" , "f" )) ) )
(PRE) _aTotal[106] := M486XHEX(PADR( ALLTRIM( substr( SF1->F1_DOC , 4 , Len(SF1->F1_DOC) - 3 ) ) , 10 , "0" ),10)
(PRE) _aTotal[107] := fGetRef(SF1->F1_DOC, SF1->F1_SERIE, SF1->F1_FORNECE, SF1->F1_LOJA, SF1->F1_ESPECIE,_aTotal[089])
(PRE) _aTotal[108] := ""
(PRE) _aTotal[109] := Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT")
(PRE) _aTotal[110] := {"SFP",""}
(PRE) _aTotal[111] := ""
(PRE) _aTotal[112] := ""
(PRE) _aTotal[113] := ""
(PRE) _aTotal[114] := "FP_FILUSO='" + cFilAnt + "' AND FP_SERIE='" + SF1->F1_SERIE + "' AND FP_ESPECIE= " + If(_aTotal[116], "'1'",IIf(_aTotal[117] ,"'9'","'2'")) + " AND FP_NUMINI <='" + SF1->F1_DOC + "' AND FP_NUMFIM >='" + SF1->F1_DOC + "' AND FP_ATIVO ='1'"
(PRE) _aTotal[115] := "SFP->FP_FILUSO=cFilAnt .AND. SFP->FP_SERIE=SF1->F1_SERIE .AND. SFP->FP_ESPECIE=" + If(_aTotal[116], "'1'",IIf(_aTotal[117] ,"'9'","'2'")) + ".AND. SFP->FP_NUMINI<=SF1->F1_DOC .AND. FP_NUMFIM >=SF1->F1_DOC .AND. SFP->FP_ATIVO = '1'","FP_ATIVO"
(PREREG) FsQuery(_aTotal[101],1,"D1_DOC='" + SF1->F1_DOC + "' AND D1_SERIE='" + SF1->F1_SERIE + "' AND D1_FORNECE='" + SF1->F1_FORNECE + "' AND D1_LOJA='" + SF1->F1_LOJA + "'","SD1->D1_DOC=SF1->F1_DOC .AND. SD1->D1_SERIE=SF1->F1_SERIE .AND. SD1->D1_FORNECE=SF1->F1_FORNECE .AND. SD1->D1_LOJA=SF1->F1_LOJA","D1_ITEM") .And. .T.
(PREREG) FsQuery(_aTotal[110],1,_aTotal[114],_aTotal[115]) .And. .T.
[SFP CONTROL FOMULARIOS]
(PRE) _aTotal[103] := Dtos( SFP->FP_DTRESOL )
(PRE) _aTotal[103] := Left(_aTotal[103],4) + "-" + Substr(_aTotal[103],5,2)+ "-" + Right(_aTotal[103],2)
(PRE) _aTotal[111] := Alltrim( SFP->FP_NUMINI )
(PRE) _aTotal[112] := Alltrim( SFP->FP_NUMFIM )
(PRE) _aTotal[113] := Alltrim( SFP->FP_CAI )
[SD1 GENERANDO_XML]
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",If(_aTotal[116] .OR. _aTotal[117], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)),SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA))) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)
[XXX CABECERA]
Linha1 C 060 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
[XXX FACTURA]
(PRE) IIf(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) _aTotal[001] := IIF(_aTotal[116] .OR. _aTotal[117],'<fe:Invoice ','<fe:CreditNote ')
(PRE) _aTotal[001] += 'xmlns:fe="http://www.dian.gov.co/contratos/facturaelectronica/v1" '
(PRE) _aTotal[001] += 'xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" '
(PRE) _aTotal[001] += 'xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" '
(PRE) _aTotal[001] += 'xmlns:clm54217="urn:un:unece:uncefact:codelist:specification:54217:2001" '
(PRE) _aTotal[001] += 'xmlns:clm66411="urn:un:unece:uncefact:codelist:specification:66411:2001" '
(PRE) _aTotal[001] += 'xmlns:clmIANAMIMEMediaType="urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003" '
(PRE) _aTotal[001] += 'xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" '
(PRE) _aTotal[001] += 'xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" '
(PRE) _aTotal[001] += 'xmlns:sts="http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures" '
(PRE) _aTotal[001] += 'xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" '
(PRE) _aTotal[001] += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
(PRE) _aTotal[001] += 'xsi:schemaLocation="http://www.dian.gov.co/contratos/facturaelectronica/v1 ../xsd/DIAN_UBL.xsd '
(PRE) _aTotal[001] += 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2 ../../ubl2/common/UnqualifiedDataTypeSchemaModule-2.0.xsd '
(PRE) _aTotal[001] += 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2 ../../ubl2/common/UBL-QualifiedDatatypes-2.0.xsd" '
(PRE) _aTotal[001] += '>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceAuthorization>'+ _aTotal[113] +'</sts:InvoiceAuthorization>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>'+ _aTotal[103] +'</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>'+ _aTotal[103] +'</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:Prefix>'+ SF1->F1_SERIE2 +'</sts:Prefix>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:From>'+ _aTotal[111] +'</sts:From>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:To>'+ _aTotal[112] +'</sts:To>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode listAgencyID="6" listAgencyName="United Nations Economic Commission for Europe" listSchemeURI="urn:oasis:names:specification:ubl:codelist:gc:CountryIdentificationCode-2.0">CO</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:ProviderID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="NIT, RUT" schemeDataURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="NIT, RUT" schemeDataURI="www.dian.gov.co/contenidos/servicios/rut_preguntasfrecuentes.html"+ _aTotal[098] +'</sts:ProviderID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="Código de Activación" schemeDataURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Guia_del_usuario_Habilitacion_Adquirente.pdf" >'+ _aTotal[099] +'</sts:SoftwareID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareSecurityCode schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="Código de Seguridad del Software" schemeDataURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Anexo_Tecnico_003_Mecanismos_Sistema_Tecnico_de_Control.pdf">'+ _aTotal[100] +'</sts:SoftwareSecurityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:UBLVersionID>UBL 2.0</cbc:UBLVersionID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ProfileID>DIAN 1.0</cbc:ProfileID>' + ( chr(13)+chr(10) )
// Manual con serie
//(PRE) _aTotal[001] += ' <cbc:ID>'+ SF1->F1_SERIE2 + Alltrim( Str( Val( Substr( SF1->F1_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
// Manual sin serie
(PRE) _aTotal[001] += ' <cbc:ID>'+ Alltrim( Str( Val( Substr( SF1->F1_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IssueDate>'+ _aTotal[095] +'</cbc:IssueDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IssueTime>'+ _aTotal[096] +'</cbc:IssueTime>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Note><![CDATA['+ Alltrim(SF1->F1_MOTIVO) + ']]></cbc:Note>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:InvoiceTypeCode listAgencyID="195" listAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" listSchemeURI="http://www.dian.gov.co/contratos/facturaelectronica/v1/InvoiceType">91</cbc:InvoiceTypeCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:DocumentCurrencyCode>'+ Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) +'</cbc:DocumentCurrencyCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CustomizationID>'+ Alltrim(SF1->F1_TIPOPE) +'</cbc:CustomizationID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:DiscrepancyResponse>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ReferenceID/>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ResponseCode>' + Alltrim(SF1->F1_TIPREF) + '</cbc:ResponseCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:DiscrepancyResponse>' + ( chr(13)+chr(10) )
// BillingReference
(PRE) _aTotal[001] += _aTotal[107]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX EMISOR]
(PRE) _aTotal[001] := ' <fe:AccountingSupplierParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ "1" +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeID="31">'+ Alltrim(SM0->M0_CGC) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Name><![CDATA['+ _aTotal[075] +']]></cbc:Name>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SM0->M0_BAIRENT) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SM0->M0_CODMUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA['+ Alltrim(SM0->M0_CIDENT) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ Alltrim(SM0->M0_ENDENT) + " " + Alltrim(SM0->M0_COMPENT) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+ "CO" +'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode>'+ AllTrim(SM0->M0_DSCCNA) +'</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:TaxScheme/>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ _aTotal[075] + ']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingSupplierParty>'
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX RECEPTOR]
(PRE) AllTrim(SF1->F1_ESPECIE) <> "NCC"
(PRE) If(_aTotal[116] .OR. _aTotal[117], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
(PRE) _aTotal[001] := '<fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ IIF( AllTrim(SA1->A1_PESSOA) == "F" , "2" , "1" ) +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '" schemeAgencyName="CO, DIAN (Dirección de Impuestos y Aduanas Nacionales)" schemeAgencyID="195">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode listName="' + Alltrim(AI0->AI0_TPREG) + '">' + AllTrim(M486RESOBL(SA1->A1_COD,SA1->A1_LOJA,"R")) + '</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID>' + Alltrim(SA1->A1_COD_MUN) + '</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA[' + Alltrim(POSICIONE("CC2",3,xFilial("CC2") + SA1->A1_COD_MUN,"CC2_MUN")) + ']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:PostalZone>' + Alltrim(SA1->A1_CEP) + '</cbc:PostalZone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentity><![CDATA[' + Alltrim(M486VALSX5('12' + SA1->A1_EST)) + ']]></cbc:CountrySubentity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentityCode>' + Alltrim(SA1->A1_EST) + '</cbc:CountrySubentityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA[' + Alltrim(SA1->A1_END) + ']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:Name><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:Name>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SA1->A1_BAIRRO) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SA1->A1_MUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA['+ Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI")) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ AllTrim(SA1->A1_END) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ElectronicMail>' + AllTrim(SA1->A1_EMAIL) + '</cbc:ElectronicMail>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Telephone>' + AllTrim(SA1->A1_TEL) + '</cbc:Telephone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FirstName><![CDATA[' + Alltrim(SA1->A1_NOMEPRI) +']]></cbc:FirstName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:MiddleName><![CDATA[' + Alltrim(SA1->A1_NOMEPES) +']]></cbc:MiddleName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FamilyName><![CDATA[' + Alltrim(SA1->A1_NOMEPAT) + ' ' + Alltrim(SA1->A1_NOMEMAT) +']]></cbc:FamilyName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' </fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SF1->F1_VALBRUT,14,2)) + '</cbc:Amount>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF1->(F1_FORNECE+F1_LOJA+F1_SERIE+F1_DOC),"E1_EMISSAO") ) , "@R 9999-99-99") + '</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF1->(F1_FORNECE+F1_LOJA+F1_SERIE+F1_DOC),"E1_VENCTO") ) , "@R 9999-99-99") + '</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyCode>' + "COP" + '</cbc:SourceCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:SourceCurrencyBaseRate>' + Alltrim(Str(SF1->F1_TXMOEDA,11,2)) + '</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyCode>' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:TargetCurrencyBaseRate>1.00</cbc:TargetCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:CalculationRate>' + Alltrim(Str(SF1->F1_TXMOEDA,11,2)) + '</cbc:CalculationRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' <cbc:Date>' + _aTotal[095] + '</cbc:Date>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , ' </cac:PaymentExchangeRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX IMPUESTOS]
(PRE) _aTotal[001] := _aTotal[097][1]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX TOTALES]
(PRE) _aTotal[001] := _aTotal[097][2]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[SD1 INVOICE]
(PRE) DbGoTop()
(PREREG) (SB1->(DbSeek(xFilial("SB1") + SD1->D1_COD)),.T.)
(PREREG) (SAH->(DbSeek(xFilial("SAH") + SB1->B1_UM)),.T.)
(PREREG) _aTotal[108] := fGetTaxDet(SD1->D1_DOC,SD1->D1_SERIE,SD1->D1_FORNECE,SD1->D1_LOJA,SD1->D1_TES,If(_aTotal[116] .OR. _aTotal[117], "NCC",AllTrim(SF1->F1_ESPECIE)))
(PREREG) (_aTotal[001] := IIF( _aTotal[116] .OR. _aTotal[117],' <fe:InvoiceLine>' + ( chr(13)+chr(10) ),' <cac:CreditNoteLine>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>' + Alltrim(Str(Val(SD1->D1_ITEM))) + '</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(_aTotal[116] .OR. _aTotal[117],' <cbc:InvoicedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD1->D1_QUANT, 14, 2)) +'</cbc:InvoicedQuantity>' + ( chr(13)+chr(10) ),' <cbc:CreditedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD1->D1_QUANT)) +'</cbc:CreditedQuantity>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(Alltrim(SF1->F1_ESPECIE)=="NCC" .And. SF1->F1_MOEDA<>1,Round(xMoeda(SD1->D1_TOTAL,SF1->F1_MOEDA,1,,MsDecimais(1)+1,SF1->F1_TXMOEDA),MsDecimais(1)),SD1->D1_TOTAL))) +'</cbc:LineExtensionAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][1],.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:ChargeIndicator>false</cbc:ChargeIndicator>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:AllowanceChargeReason><![CDATA[Aplicación de descuento]]></cbc:AllowanceChargeReason>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:MultiplierFactorNumeric>' + Alltrim(Str(SD1->D1_DESC,5,2)) + '</cbc:MultiplierFactorNumeric>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(IIf(Alltrim(SF1->F1_ESPECIE)=="NCC" .And. SF1->F1_MOEDA<>1,Round(xMoeda(SD1->D1_VALDESC,SF1->F1_MOEDA,1,,MsDecimais(1)+1,SF1->F1_TXMOEDA),MsDecimais(1)),SD1->D1_VALDESC))) + '</cbc:Amount>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, ' </cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][2],.T.)
(PREREG) (_aTotal[001] += IIF(_aTotal[116] .OR. _aTotal[117] ,' <fe:Item>', ' <cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:Description><![CDATA[' + Alltrim(SB1->B1_DESC) +']]></cbc:Description>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:PackSizeNumeric>'+ IIf(!Empty(SB1->B1_CONV),Alltrim(STR(SB1->B1_CONV)),"1") +'</cbc:PackSizeNumeric>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>' + Alltrim(SD1->D1_COD) + '</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' </cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116] .OR. _aTotal[117],' </fe:Item>', ' </cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116] .OR. _aTotal[117],' <fe:Price>',' <cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) _aTotal[090] := Alltrim(IIf(AllTrim(SF1->F1_ESPECIE)=="NCC" .And. SF1->F1_MOEDA<>1,Str(Round(xMoeda(SD1->D1_VUNIT,SF1->F1_MOEDA,1,,MsDecimais(1)+1,SF1->F1_TXMOEDA),MsDecimais(1)),14,2),Str(SD1->D1_VUNIT,14,2)))
(PREREG) (_aTotal[001] += ' <cbc:PriceAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + _aTotal[090] +'</cbc:PriceAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:BaseQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">' + Alltrim(Str(SD1->D1_QUANT)) + '</cbc:BaseQuantity>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(_aTotal[116] .OR. _aTotal[117],' </fe:Price>', ' </cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116] .OR. _aTotal[117],' </fe:InvoiceLine>' ,' </cac:CreditNoteLine>') ,.T.)
(PREREG) ENCODEUTF8(_aTotal[001])
[XXX INVOICE_FIN]
(POS) FsQuery(_aTotal[101],2)
[XXX FACTURA]
(PRE) _aTotal[094] := &("Lower('face') + '_' + Lower(_aTotal[105]) + Lower(_aTotal[104]) + Lower(_aTotal[106]) + '.xml'")
(ARQ) _aTotal[094]
FACTURA C 019 0 ENCODEUTF8( IIF( _aTotal[116] .OR. _aTotal[117], '</fe:Invoice>','</fe:CreditNote>'))
FATSECOL.INI
FATSECOL.INI
//FATSCOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
[XXX POSICIONAMENTOS]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
[XXX INICIALIZACION]
(PRE) SD2->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))
(PRE) SE1->(DbSetOrder(2))
(PRE) _aTotal[033] := ALLTRIM (SF2->F2_ESPECIE)
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) _aTotal[093] := ""
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := DtoS(SF2->F2_EMISSAO)
(PRE) _aTotal[095] := Left(_aTotal[095],4) + "-" + Substr(_aTotal[095],5,2)+ "-" + Right(_aTotal[095],2)
(PRE) _aTotal[096] := SF2->F2_HORA
(PRE) _aTotal[097] := fGetTaxas(SF2->F2_DOC, SF2->F2_SERIE, SF2->F2_CLIENTE, SF2->F2_LOJA,SF2->F2_ESPECIE )
(PRE) _aTotal[098] := ALLTRIM( GETNEWPAR( "MV_ID_PROV" , "" ) )
(PRE) _aTotal[099] := ALLTRIM( GETNEWPAR( "MV_ID_SOFT" , "" ) )
(PRE) _aTotal[100] := ALLTRIM( GETNEWPAR( "MV_CODESEC" , "" ) )
(PRE) _aTotal[101] := {"SD2",""}
(PRE) _aTotal[102] := IIF( _aTotal[033] == "NF" , "1" , IIF( _aTotal[033] == "NCC" , "2" , IIF( _aTotal[033] == "NDC" , "3" , IIF( _aTotal[033] == "NDI" , "4" , IIF( _aTotal[033] == "NCI" , "5" , "" ) ) ) ) )
(PRE) _aTotal[103] := ""
(PRE) _aTotal[104] := PADR( Alltrim(SM0->M0_CGC) , 10 , "0" )
(PRE) _aTotal[105] := IIF( _aTotal[033] == "NF" , "f" , IIF( _aTotal[033] == "NCC" .or. _aTotal[033] == "NCI" , "c" , IIF( _aTotal[033] == "NDC" .or. _aTotal[033] == "NDI" , "d" , "f" ) ) )
(PRE) _aTotal[106] := M486XHEX(PADR( ALLTRIM( substr( SF2->F2_DOC , 4 , Len(SF2->F2_DOC) - 3 ) ) , 10 , "0" ),10)
(PRE) _aTotal[107] := IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",fGetRef(SF2->F2_DOC, SF2->F2_SERIE, SF2->F2_CLIENTE, SF2->F2_LOJA,SF2->F2_ESPECIE),"")
(PRE) _aTotal[108] := ""
(PRE) _aTotal[109] := {"SFP",""}
(PRE) _aTotal[110] := ""
(PRE) _aTotal[111] := ""
(PRE) _aTotal[112] := ""
(PRE) _aTotal[113] := "FP_FILUSO='" + cFilAnt + "' AND FP_SERIE='" + SF2->F2_SERIE + "' AND FP_ESPECIE= '" + IIf(_aTotal[033] == "NF","1","3") + "' AND FP_NUMINI <='" + SF2->F2_DOC + "' AND FP_NUMFIM >='" + SF2->F2_DOC + "' AND FP_ATIVO ='1'"
(PRE) _aTotal[114] := "SFP->FP_FILUSO=cFilAnt .AND. SFP->FP_SERIE=SF2->F2_SERIE .AND. SFP->FP_ESPECIE='" + IIf(_aTotal[033] == "NF","1","3") + "' .AND. SFP->FP_NUMINI<=SF2->F2_DOC .AND. FP_NUMFIM >=SF2->F2_DOC .AND. SFP->FP_ATIVO = '1'","FP_ATIVO"
(PRE) _aTotal[115] := SuperGetMV("MV_ANEXO19",.F.,.F.) Se debe eliminar
(PREREG) FsQuery(_aTotal[101],1,"D2_DOC='" + SF2->F2_DOC + "' AND D2_SERIE='" + SF2->F2_SERIE + "' AND D2_CLIENTE='" + SF2->F2_CLIENTE + "' AND D2_LOJA='" + SF2->F2_LOJA + "'","SD2->D2_DOC=SF2->F2_DOC .AND. SD2->D2_SERIE=SF2->F2_SERIE .AND. SD2->D2_CLIENTE=SF2->F2_CLIENTE .AND. SD2->D2_LOJA=SF2->F2_LOJA","D2_ITEM") .And. .T.
(PREREG) FsQuery(_aTotal[109],1,_aTotal[113],_aTotal[114]) .And. .T.
[SFP CONTROL FOMULARIOS]
(PRE) _aTotal[103] := Dtos( SFP->FP_DTRESOL )
(PRE) _aTotal[103] := Left(_aTotal[103],4) + "-" + Substr(_aTotal[103],5,2)+ "-" + Right(_aTotal[103],2)
(PRE) _aTotal[110] := Alltrim( SFP->FP_NUMINI )
(PRE) _aTotal[111] := Alltrim( SFP->FP_NUMFIM )
(PRE) _aTotal[112] := Alltrim( SFP->FP_CAI )
[SD2 GENERANDO_XML]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
[XXX CABECERA]
Linha1 C 060 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
[XXX FACTURA]
(PRE) Iif(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) _aTotal[001] := IIF(AllTrim(SF2->F2_ESPECIE)=="NF",'<fe:Invoice ','<fe:DebitNote ')
(PRE) _aTotal[001] += 'xmlns:fe="http://www.dian.gov.co/contratos/facturaelectronica/v1" '
(PRE) _aTotal[001] += 'xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" '
(PRE) _aTotal[001] += 'xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" '
(PRE) _aTotal[001] += 'xmlns:clm54217="urn:un:unece:uncefact:codelist:specification:54217:2001" '
(PRE) _aTotal[001] += 'xmlns:clm66411="urn:un:unece:uncefact:codelist:specification:66411:2001" '
(PRE) _aTotal[001] += 'xmlns:clmIANAMIMEMediaType="urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003" '
(PRE) _aTotal[001] += 'xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" '
(PRE) _aTotal[001] += 'xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" '
(PRE) _aTotal[001] += 'xmlns:sts="http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures" '
(PRE) _aTotal[001] += 'xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" '
(PRE) _aTotal[001] += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
(PRE) _aTotal[001] += 'xsi:schemaLocation="http://www.dian.gov.co/contratos/facturaelectronica/v1 ../xsd/DIAN_UBL.xsd '
(PRE) _aTotal[001] += 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2 ../../ubl2/common/UnqualifiedDataTypeSchemaModule-2.0.xsd '
(PRE) _aTotal[001] += 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2 ../../ubl2/common/UBL-QualifiedDatatypes-2.0.xsd" '
(PRE) _aTotal[001] += '>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceAuthorization>'+ _aTotal[112] +'</sts:InvoiceAuthorization>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>'+ _aTotal[103] +'</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>'+ _aTotal[103] +'</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizationPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:Prefix>'+ SF2->F2_SERIE2 +'</sts:Prefix>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:From>'+ _aTotal[110] +'</sts:From>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:To>'+ _aTotal[111] +'</sts:To>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:AuthorizedInvoices>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceControl>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode listAgencyID="6" listAgencyName="United Nations Economic Commission for Europe" listSchemeURI="urn:oasis:names:specification:ubl:codelist:gc:CountryIdentificationCode-2.0">CO</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:InvoiceSource>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:ProviderID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[098] +'</sts:ProviderID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[099] +'</sts:SoftwareID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:SoftwareProvider>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <sts:SoftwareSecurityCode schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[100] +'</sts:SoftwareSecurityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </sts:DianExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:ExtensionContent>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtension>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </ext:UBLExtensions>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:UBLVersionID>UBL 2.0</cbc:UBLVersionID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ProfileID>DIAN 1.0</cbc:ProfileID>' + ( chr(13)+chr(10) )
// Manual con serie
//(PRE) _aTotal[001] += ' <cbc:ID>'+ SF2->F2_SERIE2 + Alltrim( Str( Val( Substr( SF2->F2_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
// Manual sin serie
(PRE) _aTotal[001] += ' <cbc:ID>'+ Alltrim( Str( Val( Substr( SF2->F2_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) FsQuery(_aTotal[109],2)
// CUFE Aplica solo para NF
(PRE) _aTotal[093] := ""
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' <cbc:UUID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _aTotal[093] +'</cbc:UUID>' + ( chr(13)+chr(10) ),"")
(PRE) _aTotal[001] += ' <cbc:IssueDate>'+ _aTotal[095] +'</cbc:IssueDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IssueTime>'+ _aTotal[096] +'</cbc:IssueTime>' + ( chr(13)+chr(10) )
// DiscrepancyResponse Solo para la Nota de Débito
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' <cac:DiscrepancyResponse>' + chr(13)+chr(10),"")
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' <cbc:ReferenceID/>' + chr(13)+chr(10),"")
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' <cbc:ResponseCode listName="concepto de notas débito" listSchemeURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Anexo_Tecnico_001_Formatos_de_los_Documentos_XML_de_Facturacion_Electron.pdf" name="1:= intereses">' + SF2->F2_TIPREF + "</cbc:ResponseCode>"+ chr(13)+chr(10),"")
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",' </cac:DiscrepancyResponse>' + chr(13)+chr(10),"")
// BillingReference solo para la Nota de Débito
(PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",_aTotal[107],"")
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX EMISOR]
(PRE) _aTotal[001] := ' <fe:AccountingSupplierParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ "1" +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeID="31">'+ Alltrim(SM0->M0_CGC) +'</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Name><![CDATA['+ _aTotal[075] +']]></cbc:Name>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SM0->M0_BAIRENT) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SM0->M0_CODMUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA['+ Alltrim(SM0->M0_CIDENT) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ Alltrim(SM0->M0_ENDENT) + " " + Alltrim(SM0->M0_COMPENT) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+ "CO" +'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode>'+ AllTrim(SM0->M0_DSCCNA) +'</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:TaxScheme/>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ _aTotal[075] +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingSupplierParty>'
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX RECEPTOR]
(PRE) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PRE) SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
(PRE) _aTotal[001] := ' <fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:AdditionalAccountID>'+ IIF( AllTrim(SA1->A1_PESSOA) == "F" , "2" , "1" ) +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '" schemeAgencyName="CO, DIAN (Dirección de Impuestos y Aduanas Nacionales)" schemeAgencyID="195">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TaxLevelCode listName="' + Alltrim(AI0->AI0_TPREG) + '">' + AllTrim(M486RESOBL(SA1->A1_COD,SA1->A1_LOJA,"R")) + '</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ID>' + Alltrim(SA1->A1_COD_MUN) + '</cbc:ID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA[' + Alltrim(POSICIONE("CC2",3,xFilial("CC2") + SA1->A1_COD_MUN,"CC2_MUN")) + ']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:PostalZone>' + Alltrim(SA1->A1_CEP) + '</cbc:PostalZone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentity><![CDATA[' + Alltrim(M486VALSX5('12' + SA1->A1_EST)) + ']]></cbc:CountrySubentity>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CountrySubentityCode>' + Alltrim(SA1->A1_EST) + '</cbc:CountrySubentityCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA[' + Alltrim(SA1->A1_END) + ']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:RegistrationAddress>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PartyIdentification>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:Name><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:Name>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </cac:PartyName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += ' <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Department><![CDATA['+ AllTrim(SA1->A1_BAIRRO) +']]></cbc:Department>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SA1->A1_MUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CityName><![CDATA['+ Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI")) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Line><![CDATA['+ AllTrim(SA1->A1_END) +']]></cbc:Line>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:AddressLine>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Country>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:Address>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , ' </fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
(PRE) _aTotal[001] += ' <cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:ElectronicMail>' + AllTrim(SA1->A1_EMAIL) + '</cbc:ElectronicMail>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Telephone>' + AllTrim(SA1->A1_TEL) + '</cbc:Telephone>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:Contact>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FirstName><![CDATA[' + Alltrim(SA1->A1_NOMEPRI) +']]></cbc:FirstName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:MiddleName><![CDATA[' + Alltrim(SA1->A1_NOMEPES) +']]></cbc:MiddleName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' <cbc:FamilyName><![CDATA[' + Alltrim(SA1->A1_NOMEPAT) + ' ' + Alltrim(SA1->A1_NOMEMAT) +']]></cbc:FamilyName>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , ' </fe:Person>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += ' </fe:Party>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SF2->F2_VALBRUT,14,2)) + '</cbc:Amount>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:StartDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF2->(F2_CLIENTE+F2_LOJA+F2_SERIE+F2_DOC),"E1_EMISSAO") ) , "@R 9999-99-99") + '</cbc:StartDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:EndDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF2->(F2_CLIENTE+F2_LOJA+F2_SERIE+F2_DOC),"E1_VENCTO") ) , "@R 9999-99-99") + '</cbc:EndDate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:SettlementPeriod>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PaymentTerms>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cac:PaymentExchangeRate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:SourceCurrencyCode>' + "COP" + '</cbc:SourceCurrencyCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:SourceCurrencyBaseRate>' + Alltrim(Str(SF2->F2_TXMOEDA,11,2)) + '</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TargetCurrencyCode>' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:TargetCurrencyBaseRate>1.00</cbc:TargetCurrencyBaseRate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:CalculationRate>' + Alltrim(Str(SF2->F2_TXMOEDA,11,2)) + '</cbc:CalculationRate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' <cbc:Date>' + _aTotal[095] + '</cbc:Date>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] += ' </cac:PaymentExchangeRate>' + ( chr(13)+chr(10) )
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX IMPUESTOS]
(PRE) _aTotal[001] := _aTotal[097][1]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[XXX TOTALES]
(PRE) _aTotal[001] := _aTotal[097][2]
(PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
(PREREG) _aTotal[001]
[SD2 INVOICE]
(PRE) DbGoTop()
(PREREG) (SB1->(DbSeek(xFilial("SB1") + SD2->D2_COD)),.T.)
(PREREG) (SAH->(DbSeek(xFilial("SAH") + SB1->B1_UM)),.T.)
(PREREG) _aTotal[108] := fGetTaxDet(SD2->D2_DOC,SD2->D2_SERIE,SD2->D2_CLIENTE,SD2->D2_LOJA,SD2->D2_TES,AllTrim(SF2->F2_ESPECIE))
(PREREG) (_aTotal[001] := IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' <fe:InvoiceLine>' + ( chr(13)+chr(10) ),' <cac:DebitNoteLine>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>' + Alltrim(Str(Val(SD2->D2_ITEM))) + '</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' <cbc:InvoicedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT)) +'</cbc:InvoicedQuantity>' + ( chr(13)+chr(10) ),' <cbc:DebitedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT)) +'</cbc:DebitedQuantity>' + ( chr(13)+chr(10) )),.T.)
(PREREG) (_aTotal[001] += ' <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(AllTrim(SF2->F2_ESPECIE)$"NF|NDC" .And. SF2->F2_MOEDA<>1,Round(xMoeda(SD2->D2_TOTAL,SF2->F2_MOEDA,1,,MsDecimais(1)+1,SF2->F2_TXMOEDA),MsDecimais(1)),SD2->D2_TOTAL),14,2)) +'</cbc:LineExtensionAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][1],.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:ChargeIndicator>false</cbc:ChargeIndicator>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:AllowanceChargeReason><![CDATA[Aplicación de descuento]]></cbc:AllowanceChargeReason>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:MultiplierFactorNumeric>' + Alltrim(Str(SD2->D2_DESC,5,2)) + '</cbc:MultiplierFactorNumeric>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(IIf(AllTrim(SF2->F2_ESPECIE)$"NF|NDC" .And. SF2->F2_MOEDA<>1,Round(xMoeda(SD2->D2_DESCON,SF2->F2_MOEDA,1,,MsDecimais(1)+1,SF2->F2_TXMOEDA),MsDecimais(1)),SD2->D2_DESCON),14,2)) + '</cbc:Amount>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, ' </cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
(PREREG) (_aTotal[001] += _aTotal[108][2],.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' <fe:Item>', ' <cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:Description><![CDATA['+ Alltrim(SB1->B1_DESC) +']]></cbc:Description>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:PackSizeNumeric>'+ IIf(!Empty(SB1->B1_CONV),Alltrim(STR(SB1->B1_CONV)),"1") +'</cbc:PackSizeNumeric>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:ID>' + Alltrim(SD2->D2_COD) + '</cbc:ID>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' </cac:SellersItemIdentification>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' </fe:Item>', ' </cac:Item>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' <fe:Price>',' <cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:PriceAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(AllTrim(SF2->F2_ESPECIE)$"NF|NDC" .And. SF2->F2_MOEDA<>1,Round(xMoeda(SD2->D2_PRCVEN,SF2->F2_MOEDA,1,,MsDecimais(1)+1,SF2->F2_TXMOEDA),MsDecimais(1)),SD2->D2_PRCVEN),14,2)) +'</cbc:PriceAmount>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += ' <cbc:BaseQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT)) +'</cbc:BaseQuantity>' + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' </fe:Price>', ' </cac:Price>') + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF",' </fe:InvoiceLine>' ,' </cac:DebitNoteLine>') ,.T.)
(PREREG) ENCODEUTF8(_aTotal[001])
[XXX INVOICE_FIN]
(POS) FsQuery(_aTotal[101],2)
[XXX FACTURA]
(PRE) _aTotal[094] := &("Lower('face') + '_' + Lower(_aTotal[105]) + Lower(_aTotal[104]) + Lower(_aTotal[106]) + '.xml'")
(ARQ) _aTotal[094]
FACTURA C 019 0 ENCODEUTF8( IIF(AllTrim(SF2->F2_ESPECIE)=="NF", '</fe:Invoice>','</fe:DebitNote>'))
2.20.2 Ejemplo de utilización
En el módulo Facturación (SIGAFAT):
Desde el Actualizaciones | Archivos | Clientes, configurar un Cliente Nacional para la Factura de Venta/Nota de Crédito de Cliente.
Desde el Actualizaciones | Archivos | Productos, configurar el o los Productos para la Factura de Venta/Nota de Crédito de Cliente.
Desde el Actualizaciones | Archivos | Tipos de Entrada y Salida, configurar el Tipo de Salida (TES) para la Factura de Venta y Tipo de Entrada (TES) para la Nota de Crédito de Cliente.
En el módulo Facturación (SIGAFAT):
- Ir al menú Actualizaciones | Facturación | Facturaciones (MATA467N).
- Incluir una nueva Factura de Venta (NF).
- Informar en el encabezado el Cliente Nacional configurado previamente.
- Informar en el detalle el o los Productos (D2_COD), Cantidad (D2_QUANT), Valor Unit. (D2_PRCVEN), Valor Total D2_TOTAL) y Tipo Salida (D2_TES).
- Ir al menú Actualizaciones | Facturación | Transmisión Electrónica (MATA486).
- Realizar la transmisión de la Factura de Venta (Validar que la transmisión haya sido exitosa)
- Desde Otras acciones ejecutar la acción Imprimir PDF.
- Validar que en el formato PDF, los montos se muestren en moneda COP, y que se visualice la información en la moneda origen del Documento.
2.21 Catálogo TRIBUTOS DIAN en Proveedores/Clientes
Producto | TOTVS Backoffice | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | |||||||||
Segmento: | Backoffice | |||||||||
Módulo: | SIGAFAT - Facturación | |||||||||
Función: |
| |||||||||
País: | Colombia (pacote 014357) | |||||||||
Ticket: | 20750366 | |||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-23942 |
SITUACIÓN/REQUISITO
Se solicita habilitar una tabla para el catálogo de los Tributos en la rutina de Mantenimiento de Catálogos "FISA812", y esta asociarla al campo Cód. Tributo (AIT_CODTRI), debido a que la consulta la actual que esta relacionada al campo Cód. Tributo (AIT_CODTRI) esta usando una tabla con información que no es correspondiente a los Tributos válidos por la DIAN.
Por lo tanto, se solicita que la consulta que se muestra para informar el Tributo DIAN en Clientes y Proveedores, use el catálogo correcto y solo muestre las opciones correspondientes a los Tributos válidos.
SOLUCION
En la rutina de Carga de Catálogos (FISA814):
Se realiza ajuste para crea la estructura y contenido para la Tabla S021 - "Tributos".
En la rutina de Registro de Responsabilidades/Obligaciones DIAN y Tributos (FISA827):
Se realiza ajuste para el campo Cód. Tributo (AIT_CODTRI), donde se modificó la consulta asociada al campo con la nueva tabla creada de Tributos (S021).
IMPORTANTE
- Contar con los cambios a diccionario indicados en 2.21.1 Configuraciones Previas
- En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Definición de Catálogos (FISA812).
Cargar el catálogo S021- Tributos.
Se debe configurar el parámetro MV_PATH814 con la ruta donde se encuentra el archivo 21Tributos.csv, con los código de Tributos de acuerdo al catálogo definido por la SUNAT, ya que de no ser así únicamente se genera le definición de la tabla y los datos de la tabla no son generados:
Es importante considerar que cuando se cuente con la rutina Registro de Responsabilidades/Obligaciones DIAN y Tributos (FISA827) con fecha 05/08/2024 o superior se debe realizar la generación de la tabla "S021 - Tributos", para poder asignar un tributo al Proveedor/Cliente, en caso contrario no se mostrará la descripción del Tributo seleccionado.
2.21.1 Configuraciones Previas
Creación de consulta COL021:
Alias | Tipo | Secuencia | Columna | Descripción | Contenido |
COL021 | 1 | 01 | RE | Tributos | F3I |
COL021 | 2 | 01 | 01 | Tributos | F812SXB("S021","Codigo") |
COL021 | 5 | 01 | VAR_IXB |
Modificación en la tabla SX3 - Campos
Campo | AIT_CODTRI |
Tipo | C |
Consulta | COL021 |
Val. Sistema | Vazio() .Or. ValidF3I("S021", M->AIT_CODTRI,1,2) |
2.22 Transmisión Electrónica en el guardado de los Documentos.
Producto | TOTVS Backoffice | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | |||||||||||||||||||||
Segmento: | Backoffice | |||||||||||||||||||||
Módulo: | SIGAFAT - Facturación | |||||||||||||||||||||
Función: |
| |||||||||||||||||||||
País: | Colombia (pacote 014357) | |||||||||||||||||||||
Ticket: | No aplica (Pacote: 014412) | |||||||||||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-23953 |
SITUACIÓN/REQUISITO
Al finalizar la inclusión de una Factura de Venta (NF), Nota de Crédito de Cliente (NCC), Nota de Débito de Cliente (NDC), Documento Soporte (NF), Nota de Ajuste de Crédito (NCP) y Nota de Ajuste de Débito (NDP), se debe permitir la tranmisión electrónica de los documentos.
SOLUCION
En la rutina de Documentos Fiscales - Colombia (LOCXCOL):
Se crea la función LxTraCOL(), para llamar las funciones que Realiza Pre-validación de Datos para Transmisión (M486VLDDOC), Genera el XML (M486GERXML), Realiza la Transmisión Electrónica (M486SENDPT) y Actualiza el Estatus (M486UPDST).
En la función que Carga la configuración de los documentos 22 y 23 (NCP y NDP de Ajuste) en el array aCfg (lxEstrcCol), se ajustó la posición 3 a .T. para Notas de Ajuste de Crédito (NCP) y Notas de Ajuste de Débito (NDP) para permitir el llamado de la función CFDVerific() para validar si se realiza la transmisión electrónica después de guardar los documentos.
En la rutina de Documentos Fiscales (LOCXNF):
En la Función que realiza el grabado de las Notas Fiscales (GravaNfGeral), se excluye para el país Colombia el llamado a la Función para la creación de documentos electrónicos en formato XML (CFDGerXML) para que se realice cuando el usuario confirme la transmisión electrónica de acuerdo al uso del parámetro MV_CFDUSO, y se realiza el llamado a la Función que Realiza la transmisión electrónica de documentos fiscales para el país Colombia (LxTraCOL), para llamar las funciones que Realiza Pre-validación de Datos para Transmisión (M486VLDDOC), Genera el XML (M486GERXML), Realiza la Transmisión Electrónica (M486SENDPT) y Actualiza el Estatus (M486UPDST).
En la rutina de Funciones Genéricas Notas Fiscales (LOCXFUNA):
En la Función para la creación de documentos electrónicos en formato XML (CFDGerXML), se realiza ajuste para que se realice la generación del XML, sin importar si la rutina llamadora es la rutina de Documento Electrónicos (MATA486).
En la rutina de Documentos Electrónicos (MATA486):
En la Función que Realiza la Transmisión Electrónica (M486SENDPT), se activan parámetros para la funcionalidad de envío por email, desde rutinas diferentes de Documentos Electrónicos (MATA486), para evitar el uso de la pregunta ¿Envío a Email? (MV_PAR07 )del grupo de preguntas MATA486.
Se realiza ajuste para eliminar que las funciones que Realiza Pre-validación de Datos para Transmisión (M486VLDDOC), Genera el XML (M486GERXML), Realiza la Transmisión Electrónica (M486SENDPT) y Actualiza el Estatus (M486UPDST) no sean estáticas y se puedan mandar llamar desde cualquier rutina diferente de la de Documentos Electrónicos (MATA486)
Para la funcionalidad del parámetro MV_CFDUSO, se tienen las siguientes reglas:
Valor | Comportamiento |
---|---|
1 | Preguntará si se quiere transmitir el documento una vez finalizado el registro, si es afirmativa la respuesta, también preguntará si se realizará el envío por mail. |
2 | Preguntará si se quiere transmitir el documento una vez finalizado el registro, y si no hubo errores, enviará por mail el documento sin preguntar. |
3 | No preguntará si se quiere transmitir el documento una vez finalizado el registro, lo transmitirá y realizará el envío por mail del documento sin preguntar. |
Importante
Si el parámetro MV_CFDUSO, contiene un valor diferente de 1, 2, 3, vacio o no existe, no se realizará el proceso de transmisión electrónica al guardar los documentos de tipo Factura de Venta (NF), Nota de Crédito de Cliente (NCC), Nota de Débito de Cliente (NDC), Documento Soporte (NF), Nota de Ajuste de Crédito (NCP) o Nota de Ajuste de Débito (NDP).
Las Facturas de Venta (NF), generadas a partir del Pedido de Venta desde la rutina de Generación de Notas (MATA468N), deben ser transmitidas desde la rutina de Documentos Electrónico (MATA486).
2.22.1 Configuraciones previas
En la sección [XXX INVOICE_FIN] del archivo FATECOL.INI agregar la siguiente línea:
Configurar el siguiente parámetro:
Nombre de la Variable | MV_CFDUSO |
Tipo | C - Caracter |
Descripción | Indica modo de trans. electrónica al guardar doc., 1-Confirma trans. y envío,2-Confirma trans. y envío automático, 3-trans. y envío automático. |
Valor Estándar | 0 |
2.22.2 Ejemplo de utilización
a) Parámetro MV_CFDUSO igual a 1
- Configurar el parámetro MV_CFDUSO con el valor 1.
- En el módulo Facturación (SIGAFAT), menú Actualizaciones | Facturación | Facturaciones (MATA467N).
- Incluir una Factura de Venta (NF).
- Informar los datos del Encabezado e ítems.
- Presionar el botón Grabar, para realizar el grabado de la Factura.
- Confirmar la transmisión del documento:
Información
Si el usuario selecciona la opción No en la confirmación de la Transmisión Eletrónica, no se realiza la validación para la transmisión, generación del XML, transmisión del documento electrónico, y no se visualiza la pregunta de confirmación de envío por email.
Confirmar el envío por mail del documento electrónico.
Información
Si el usuario selecciona la opción No en la confirmación del envío por email, no se realiza el proceso de envío de email una vez finalizado el proceso de transmisión.
El envío de email, es un proceso que es realizado por el Proveedor Tecnológico denominado The Factory HKA, durante el proceso de transmisión electrónica.
- Una vez que se realizó la validación, generación del XML y transmisión del documento electrónico, se visualiza el aviso que informa que la Factura de Venta Electrónica fue Autorizada.
b) Parámetro MV_CFDUSO igual a 2
- Configurar el parámetro MV_CFDUSO con el valor 2.
- En el módulo Facturación (SIGAFAT), menú Actualizaciones | Facturación | Facturaciones (MATA467N).
- Incluir una Factura de Venta (NF).
- Informar los datos del Encabezado e ítems.
- Presionar el botón Grabar, para realizar el grabado de la Factura.
Confirmar la transmisión del documento:
Información
Cuando el parámetro MV_CFDUSO está configurado con el valor 2, no se visualiza pregunta para confirmar el envío de mail ya que este proceso se realiza en automático, enviando el documento autorizado al correo que fue informado en el campo E-Mail (A1_EMAIL) del Cliente.
El envío de email, es un proceso que es realizado por el Proveedor Tecnológico denominado The Factory HKA, durante el proceso de transmisión electrónica.
- Una vez que se realizó la validación, generación del XML y transmisión del documento electrónico, se visualiza el aviso que informa que la Factura de Venta Electrónica fue Autorizada.
c) Parámetro MV_CFDUSO igual a 3
- Configurar el parámetro MV_CFDUSO con el valor 3.
- En el módulo Facturación (SIGAFAT), menú Actualizaciones | Facturación | Facturaciones (MATA467N).
- Incluir una Factura de Venta (NF).
- Informar los datos del Encabezado e ítems.
Presionar el botón Grabar, para realizar el grabado de la Factura.
Información
Cuando el parámetro MV_CFDUSO está configurado con el valor 3, se realiza en automático el proceso de transmisión electrónica y envío de email.
El envío de email, es un proceso que es realizado por el Proveedor Tecnológico denominado The Factory HKA, durante el proceso de transmisión electrónica.
- Una vez que se realizó la validación, generación del XML y transmisión del documento electrónico, se visualiza el aviso que informa que la Factura de Venta Electrónica fue Autorizada.
2.23 Tag Obligatorias en XML de Factura por mandato(Tipo operación 11 - Mandato)
Producto | TOTVS Backoffice | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||||||||||||||||
Segmento: | Backoffice | ||||||||||||||||||
Módulo: | SIGAFAT - Facturación | ||||||||||||||||||
Función: |
| ||||||||||||||||||
País: | COL (pacote 014724) | ||||||||||||||||||
Ticket: | 21140115 | ||||||||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMICNS-21549 |
SITUACIÓN/REQUISITO
Se realiza la generación de una factura de venta desde la rutina de Facturaciones (MATA467N), informando el campo Tipo Oper. (F2_TIPOPE) con el valor "11" para indicar que se trata de una factura de venta por mandato.
Se identifica que al realizar la transmisión de la factura, ya sea desde la rutina Transmitir Factura electrónica (MATA486) o directamente desde la rutina Facturaciones (MATA467N), el SOAP-REQUEST generado por el sistema no contiene todos los tags que indica the factory para la transmisión de este documento.
De acuerdo con la documentación proporcionada por The Factory, las etiquetas obligatorias para este tipo de documento con operaciones por mandato a nivel detalle de la factura son las siguientes:
- idEsquema
- mandatorioNumeroIdentificacion
- mandatorioNumeroIdentificacionDV
- mandatorioTipoIdentificacion
Documentación
Para más información puede consultar la siguiente documentación proporcionada por The Factory:
https://felcowiki.thefactoryhka.com.co/index.php/M%C3%A9todos_Servicio_Emisi%C3%B3n_Web_TFHKA_-_Indice_Manual_Integraci%C3%B3n_Directa#Class.DetalleDeFactura
SOLUCION
Dentro de la rutina de Carga de catálogos(FISA814), se realizan los siguientes ajustes:
- En la función encargada de crear los catálogos para país Colombia (f814CatCol), se realiza la creación de la estructura y la carga de datos de la nueva tabla "S022 - Mandatorios", para que el usuario pueda informar los datos que serán presentados en las etiquetas mandatorioNumeroIdentificacion, mandatorioNumeroIdentificacionDV y mandatorioTipoIdentificacion del SOAP-REQUEST.
Dentro de la rutina Funciones Documentos Fiscales(LOCXCOL), se realizan los siguientes ajustes:
- Se crean la nueva función aVldMdCol, la cual está encargada de validar que los productos tengan informado el campo Cod. Mandato (B1_CODMAN) con un código de la nueva tabla "S022 - Mandatorios" cuando el tipo de operación informada en el encabezado del pedido de venta (C5_TIPOPE) o en el encabezado de la factura de venta (F2_TIPOPE) sea igual a "11". En caso de que existan productos no cuenten con Cod. Mandato(B1_CODMAN) informando, se manda un mensaje al usuario para que confirme o no el proceso de guardado.
- Se crea la nueva función a410TudOkCol, la cual se encargara de realizar las validaciones específicas para Colombia al momento de guardar o editar algún pedido de venta.
- Dentro de la nueva función a410TudOkCol y en la función NfTudOkCol, se realiza el llamado a la nueva función aVldMdCol cuando el campo Tipo Oper.(C5_TIPOPE | F2_TIPOPE) es igual a "11 - Mandato".
Dentro de la rutina Funciones genéricas para Pedidos de Venta (MATV410A), se realizan los siguientes ajustes:
- Se realiza el llamado a la nueva función a410TudOkCol para el país Colombia.
Dentro del archivo Estructura del XML de Documentos de Salida(FATSCOL), se realiza los siguientes ajustes:
- Se agrega una nueva etiqueta llamada cbc:IDMandatory a nivel detalle de factura, la cual toma el valor del campo Cód Mandato (B1_CODMAN) y solo se mostrará cuando el campo Cód Mandato (B1_CODMAN) exista y no este vacío.
Dentro de la rutina Funciones Genéricas de Facturación Electrónica de Colombia(M486XFUNCO), se realizan los siguientes ajustes:
- En la función para Llenado de oWSdetalleDeFactura solicitado por TheFactory HKA(M486DETDOC), se realiza el ajuste para generar las tags idEsquema, mandatorioNumeroIdentificacion, mandatorioNumeroIdentificacionDV y mandatorioTipoIdentificacion tomando en cuenta el código informando de la etiqueta cbc:IDMandatory del XML generado por el archivo FATSCOL.INI para buscar la información en el nuevo catálogo S022 - Mandatorios.
2.23.1 Configuraciones previas
a) Configuraciones de diccionario y archivo FATSCOL.INI:
Archivo FATSCOL.INI:
Se requiere editar el script actual de generación de archivo XML, actualizando las secciones de acuerdo al siguiente modelo, en donde se agregaron o fueron modificadas líneas para integrar esta nueva funcionalidad.
FATSCOL.INI
En el apartado de [XXX INICIALIZACION] agregar la validación para comprobar si existe el nuevo campo B1_CODMAN :
(PRE) _aTotal[034] := IIF(SB1->(ColumnPos("B1_CODMAN")) > 0, .T., .F.)
En el apartado de [SD2 INVOICE], agregar la referencia al nuevo campo B1_CODMAN para que cuando exista y no este vacio se genere la nueva tag cbc:IDMandatory:
(PREREG) (_aTotal[001] += IIF( _aTotal[034] .And. !Empty(SB1->B1_CODMAN),' <cbc:IDMandatory>'+AllTrim(SB1->B1_CODMAN)+'</cbc:IDMandatory>' + ( chr(13)+chr(10) ),""),.T.)
Creación de campos en el archivo SX3 - Campos:
Campo | B1_CODMAN |
---|---|
Tipo | C - Caracter |
Tamaño | 3 |
Decimal | 0 |
Picture | @! |
Título | Cód Mandato |
Descripción | Código Mandatorio |
Val Sistema | Vazio() .Or. ValidF3I("S022", M->B1_CODMAN,1,3) |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Help | Indica el código de mandatorio de la tabla S022 - Mandatorios al que pertenece el producto. Para las facturas por mandato es necesario informar este campo para generar las tags idEsquema, mandatorioNumeroIdentificacion, mandatorioNumeroIdentificacionDV y mandatorioTipoIdentificacion |
Creación de consulta COL022 en el archivo SBX - Consultas:
Alias | Tipo | Secuencia | Columna | Descripción | Contenido |
COL022 | 1 | 01 | RE | Mandatorios | F3I |
COL022 | 2 | 01 | 01 | Mandatorios | F812SXB("S022","Codigo") |
COL022 | 5 | 01 | VAR_IXB |
b) Pre-condiciones
Aplicar el parche correspondiente al issue DMICNS-21549
- Validar que las rutinas actualizadas correspondan a las indicadas en la sección Función del punto 01. DATOS GENERALES
- Realizar un respaldo del archivo FATSCOL.INI que se encuentra en la ruta configurada en el parámetro MV_CFDFTS.
- Tener los ajustes necesarios para poder realizar la transmisión de documentos electrónicos: Facturación Electrónica
- En el módulo Facturación(SIGAFAT), ir al menú Actualizaciones | Archivos | Clientes.
- Configurar un Cliente con los valores estandar.
- En el módulo Facturación(SIGAFAT):
- Ir al menú Actualizaciones | Archivos | Definición de Catálogos
- Al entrar a la rutina se creará de forma automatica el nuevo catálogo S022 - Mandatorios como se muestra en la siguiente imágen:
- Ir al menú Actualizaciones | Archivos | Mantenimiento de Catálogos
- Ingresar los datos en el nuevo catálogo
- En el módulo de Facturación(SIGAFAT), ir al menú Actualizaciones | Archivos | Productos
- Configurar para los productos a utilizar el campo Cód Mandato(B1_CODMAN) con un código de mandatorio del nuevo catálogo S022 - Mandatorios.
2.23.2 Ejemplo de utilización
En el módulo Facturación (SIGAFAT):
- Ir al menú Actualizaciones | Facturación | Facturaciones (MATA467N).
- Incluir una nueva Factura de Venta (NF).
- Informar en el encabezado Cliente configurado previamente.
- Informar en el encabezado el campo Tip Oper.(F2_TIPOPE) con valor igual a "11 - Mandatos".
- Informar en el detalle el o los Productos configurados previamente.
- Grabar la factura.
- Ir al menú Actualizaciones | Facturación | Transmisión Electrónica (MATA486).
- Realizar la transmisión de la Factura de Venta
- Validar que en el SOAP-REQUEST las nuevas etiquetas idEsquema, mandatorioNumeroIdentificacion, mandatorioNumeroIdentificacionDV y mandatorioTipoIdentificacion se muestren correctamente a nivel detalle de factura y que la transmisión sea exitosa.
2.24 Ejecución de Transmisión electrónica por JOB nuevo Schedule
Producto | TOTVS Backoffice | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||||||||||
Segmento: | Backoffice | ||||||||||||
Módulo: | SIGAFAT - Facturación | ||||||||||||
Función: |
| ||||||||||||
País: | COL | ||||||||||||
Ticket: | NA | ||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMICNS-21518 |
SITUACIÓN/REQUISITO
Se requiere disponibilizar un JOB, en cual el cliente pueda configurar la trasmisión electrónica de Factura de Venta (NF), Nota de Crédito de Cliente (NCC), Nota de Débito de Cliente (NDC), Documento Soporte (NF), Nota de Ajuste de Crédito (NCP) y Nota de Ajuste de Débito (NDP) conforme a su regla de negocio.
SOLUCIÓN
En la rutina de Documentos Fiscales - Colombia (LOCXCOL):
Dentro de la función LxTraCOL, se agregan validaciones para cuando se realiza la ejecución del JOB, se realice correctamente la transmisión de los documentos electrónicos.
En la rutina de Documentos Electrónicos (MATA486):
Dentro de las funciones Realiza Pre-validación de Datos para Transmisión (M486VLDDOC) y Genera el Log de transmisión electrónica(M486GENLOG), se agrega un parámetro que reciben dichas funciones para saber cuando se esta ejecutando el JOB. Se agregan bifurcaciones para que el proceso se ejecute correctamente al validar los datos de transmisión y generar el log del proceso cuando se esta ejecutando la transmisión electrónica desde JOB.
Se crea la nueva rutina Transmisión Electrónica automática de documentos Colombia(autoCOLNfeTrans), la cual permite la ejecución de la transmisión electrónica de Colombia por medio del nuevo Schedule.
En dicha rutina se manda llamar la función LxTraCOL para cada serie y especie informada en el nuevo grupo de preguntas y que este configurada en la tabla SFP - Control de Formularios.
2.24.1 Configuraciones previas
a) Configuraciones de diccionario:
Tablas Genéricas en el archivo SX5 – Tablas Genéricas:
Crear una nueva tabla genérica con las especies de documentos que son transmitidos:
Tabla | 00 |
Clave | 1E |
Descripción | Especies de documentos Transmisión Electrónica |
Crear nuevos registros en la 00 - 1E Especies de documentos Transmisión Electrónica
CLAVE | Descripción |
---|---|
1 | FACTURA/DOCUMENTO SOPORTE |
2 | NOTA DE CRÉDITO CLIENTE |
3 | NOTA DE DÉBITO CLIENTE |
8 | NOTA DE CRÉDITO AJUSTE |
9 | NOTA DE DÉBITO AJUSTE |
Consulta Estándar en el archivo SXB – Consulta Estándar:
Alias | Tipo | Secuencia | Columna | Descripción | Contenido |
ESPDOC | 1 | 01 | DB | Especie Transm Elect | SX5 |
ESPDOC | 2 | 01 | 01 | Codigo | |
ESPDOC | 4 | 01 | 01 | Codigo | X5_CHAVE |
ESPDOC | 4 | 01 | 02 | Descripcion | X5_DESCRI |
ESPDOC | 5 | 01 | Alltrim(X5_CHAVE) | ||
ESPDOC | 6 | 01 | 1E |
Creación de Preguntas en el archivo SX1 – Archivo de Preguntas:
Grupo: MATA486K
Orden | 01 | 02 |
Pregunta | ¿Tipo de Documento? | ¿Serie? |
Tipo | C | C |
Tamaño | 12 | 50 |
Variable | MV_PAR01 | MV_PAR02 |
Validación | ||
Objeto | R -Rango | R -Rango |
Consulta Estándar | ESPDOC | SERNF |
Contenido | FP_ESPECIE | FP_SERIE |
Pacote Diccionario (uso exclusivo interno)
Código: 014812
Pacote: MI - DMICNS-21518 - COL TRANSMISIÓN AUTO
b) Configuraciones de Schedule:
- En el archivo de configuración del servidor(appserver.ini), agregar la siguiente información:
[Drivers]
MultiProtocolPort=1[General]
App_Environment=NOMBRE_AMBIENTE(ambiente donde se activará nuevo Schedule)
- En el módulo Libros Fiscales(SIGAFIS), ir al menú Actualizaciones | Archivos | Contr. Formularios
- Contar con las series correctamente configuradas para los documentos a transmitir: Factura de Venta (NF), Nota de Crédito de Cliente (NCC), Nota de Débito de Cliente (NDC), Documento Soporte (NF), Nota de Ajuste de Crédito (NCP) y Nota de Ajuste de Débito (NDP)
Para la ejecución del proceso por medio del nuevo Schedule, se requiere contar con una rutina compilada en el repositorio como la que muestra a continuación:
#INCLUDE 'rwmake.ch' #INCLUDE 'PROTHEUS.CH' /*/{Protheus.doc} WFPRUEBA3 Función principal que se debe informar en el Schedule /*/ Function WFPRUEBA3(aPar) If IsBlind() BatchProcess("Teste","Teste",,{ || TSTExec3() }) EndIf Return Nil /*/{Protheus.doc} TSTExec3 Función informanda en la función BatchProcess, la cual se ejecutará conforme a la periodicidad informada en el Schedule. /*/ Function TSTExec3() Local cPerg := "MATA486K" If !Pergunte(cPerg,.T.) Return .F. Else MakeSqlExpr(cPerg) DSVFAT1(MV_PAR01,MV_PAR02) Endif Return /*/{Protheus.doc} SchedDef Función requerida para ejecución en el Schedule. /*/ Static Function SchedDef() Local aParam := {} aParam := { "P",; //Tipo R para relatorio P para processo "MATA486K",; //Pergunte do relatorio, caso nao use passar ParamDef ,; //Alias ,; //Array de ordens ""} //Titulo - "Calculo de Depreciacao e Correcao Monetaria" Return aParam
En el módulo Configurador (SIGACFG):
Ir al menú Entorno| Schedule| Schedule
En la nueva pantalla, seleccionar la opción "Agenda":
Dar clic en "Nuevo", posteriormente informar el nombre de la rutina que se va a ejecutar:
A continuación se debe confirmar la periodicidad con la que se va a ejecutar la rutina:
- Unica - Solo se ejecutará el día y la hora ingresados en los campos Día y Hora.
- Tarifa diaria
- Opción de frecuencia: Si se marca como sí, se debe ingresar una frecuencia de ejecución en horas o minutos, y debe haber una hora de inicio y finalización para esta ejecución. Si se marca como no, solo debe ingresar una hora para ejecutar el cronograma.
- Opción Recurrente: Si se marca como sí, considera los parámetros de frecuencia para su ejecución. Si se marca como no, solo considera los parámetros de la primera ejecución.
- Semanal
- Opción de frecuencia: Si se marca como sí, se debe ingresar una frecuencia de ejecución en horas o minutos, y debe haber una hora de inicio y finalización. Si marca como no, solo deberá ingresar una única vez. Para ambas opciones se deberá informar los días de la semana de ejecución.
- Opción Recurrente: Si se marca como sí, considera los parámetros de frecuencia para su ejecución. Si se marca como no, solo considera los parámetros de la primera ejecución.
- Mensual
- Opción de frecuencia: Si se marca como sí, se debe ingresar una frecuencia de ejecución en días, horas o minutos, y debe haber una hora de inicio y finalización y un día de inicio y finalización. Si se marca como no, sólo se deberá indicar el día y hora de ejecución.
- Opción Recurrente: Si se marca como sí, considera los parámetros de frecuencia para su ejecución. Si se marca como no, solo considera los parámetros de la primera ejecución.
Al elegir la opción "Tarifa diaria", se mostrará la siguiente información:
Posteriormente, se requiere informar los datos de la Empresa, Sucursal, Módulo y Usuario.
Al dar clic en "Edite parámetros", se mostrará una ventana con las preguntas para informar las especies y las series que serán consideradas al momento de ejecutar el proceso de transmisión electrónica,
- ¿Tipo Documento? - Especies de los documentos a ser transmitidos. El número de especie y descripción se obtiene de la tabla genérica 00 - 1E Especies de documentos Transmisión Electrónica.
- ¿ Serie? - Serie de los documentos a ser transmitidos.
NOTA: Importante borrar el contenido de cada pregunta antes de informar la especie y serie usando la consulta estándar.
Al finalizar se mostrará la información de ejecución:
c) Log de ejecución:
Al ejecutarse el proceso de transmisión electrónica por medio del Schedule, se generará un Log en la carpeta estándar "system\transmision_auto_log\" con el resumen del proceso como se muestra a continuación:
3. PROBLEMAS COMUNES
3.1 Facturas de Venta
3.1.1 Transmisión de más de 200 Facturas de Venta
Si al transmitir más de 200 documentos electrónicos desde la rutina Facturación Electrónica (MATA486), se presenta el error.log:
THREAD ERROR ([12408], cristian.hidalgo, 4069-NB) 03/06/2020 13:51:53
Application Server Work area table full (Max= 1024)
( PREVIOUS ERROR : Application Server Work area table full (Max= 1024) )
on MPSYSOPENQUERY(MPSYSOPENTABLES.PRW) 28/06/2019 18:27:43 line : 697
Solución:
Eliminar del archivo FATSCOL.INI la sección de generación del Código Único de Facturación Electrónica (CUFE), ya que es un dato que NO es enviado a los servicios web del proveedor tecnológico The Factory HKA, el CUFE es generado por proveedor tecnológico e incluido en el XML retornado dentro del nodo cbc:UUID.
Adicional se requiere contar con la siguientes solución: 9091119 DMINA-9855 DT Application Server Work area table full (Max= 1024) Documentos Electrónicos COL
4. Anexo Técnico versión 1.8 DIAN
Descripción de actualizaciones de acuerdo al Anexo Técnico de Factura Electrónica de Venta - Versión 1.8 de la DIAN, vigente a partir del 9 de Mayo de 2021.
4.1 Generales
- En la generación de NCC/NDC se eliminan los códigos de tipo de operación que hacen referencia a facturas del modelo de validación posterior.
- Los Grupos de Direcciones (nodos de direcciones del emisor y del receptor) ahora son opcionales, sin embargo, el comprobante electrónico continua incluyendo estas informaciones.
- Anticipo a la factura, dato informativo opcional en el comprobante electrónico. El sistema no usa esta información.
- Aproximaciones de impuesto sobre las ventas cobradas. Proceso opcional que no es necesario adoptar en el sistema.
- Código postal de la dirección del adquiriente. Actualmente el sistema no usa la tabla correspondiente, el usuario registra el dato que proporciona el adquiriente, sin restricción.
- Tipos de operación no controlados en el sistema:
- Sector Transporte
- Sector Salud
- Sector Notaria
4.2 Actualizaciones a catálogos
La siguiente lista corresponde a conceptos de códigos nuevos, eliminados o modificados de las tablas de la DIAN consideradas en el sistema.
El usuario deberá realizar el movimiento según corresponda en la rutina SIGAFAT | Actualizaciones | Archivos | Mantenimiento de Catálogos.
Código de tabla en el sistema | Descripción | Movimiento | Códigos afectados - Descripción |
---|---|---|---|
S002 | Tipos de Documentos de Identidad | Agrega registro | 47 - PEP |
S003 | Conceptos de Notas de Crédito | Cambio de descripciones | 3 - Rebaja o Descuento Parcial o Total 4 - Ajuste de Precio 5 - Otros |
Elimina registro | 6 - Otros | ||
S005 | Catálogo de Tributos DIAN | Agrega registro | 08 - IC Porcentual 30 - IC Datos |
Cambio de descripciones | 06 - ReteRenta 22 - INC Bolsas | ||
S009 | Tipos de Org. Jurídica | Cambio de descripciones | 1 - Persona Jurídica y Asimiladas 2 - Persona Natural y Asimiladas |
S014 | Tipos de Obligaciones - Responsabilidades | Cambio de descripción | R-99-PN - No Aplica - Otros |
S017 | Tipo de Operación | Elimina registro | 23 - NCC v1 33 - NDC v1 |
Nota:
- Los documentos del sistema (NF, NCC, NDC) así como los electrónicos (XML/UBL) que actualmente utilizan códigos que sufren alteración o que son eliminados, no serán afectados ni inválidos.
4.2.1 TABLA S005 - Impuestos F. E.
En base a la última Resolución DIAN - No. 000012, la actual tabla de Tributos DIAN (S005 - Impuestos FE) corresponde a los siguientes datos:
Para consultar cualquier cambio o actualización de esté u otro catálogo de la resolución información aquí Resolución DIAN 000012
4.3 Nuevas reglas de rechazo
La lista a continuación indica los códigos que corresponden a los ID de condiciones técnicas de formato de la DIAN para la generación, transmisión, validación, expedición y recepción de documentos electrónicos.
Estas reglas de rechazo corresponden a condiciones previas, así como de nuevos casos, en los datos de los archivos XML/UBL.
ID | Descripción | Funcionalidad |
FAJ71 | Correo electrónico de recepción de documentos electrónicos del ecosistema de facturación electrónica de venta con validación previa. | Configurar cuenta de email en el módulo de datos fiscales del portal TFHKA-Dfactura. |
FAU14 | Valor total factura sin incluir anticipos. | No aplica. |
FAQ01 | Descuentos o cargos a nivel factura, deben reflejarse en las bases de impuestos. | El sistema ya tiene esa funcionalidad. |
FAQ06, CAQ06, DAQ06 | Porcentaje de descuento a nivel factura no debe ser > 100. | El sistema ya tiene esa funcionalidad. |
FAQ07, CAQ07, DAQ07 | Valor del cargo o descuento no debe ser mayor al monto base. | El sistema ya tiene esa funcionalidad. |
FAQ09, CAQ09, DAQ09 | Valor base para calcular descuento o cargo, debe ser mayor a cero, el descuento no puede superior al valor total de la factura. | El sistema ya tiene esa funcionalidad. |
FAV08a, FAV08b | schemeID debe ser informado cuando el tipo de operación es “11”. | Tipo de Operación no controlada en el sistema. |
FBE01 | Grupo de campos de cargo o descuento a nivel ítem. Deben incluirse los campos indicador, porcentaje, monto y montoBase. | El sistema ya tiene esa funcionalidad. |
FBE03, CBE03, DBE03 | Indicador de cargo o descuento a nivel ítem. | El sistema ya tiene esa funcionalidad. |
FBE05, CBE05, DBE05 | Porcentaje de descuento en ítem no debe ser > 100. | El sistema ya tiene esa funcionalidad. |
FBE06, CBE06, DBE06 | Valor del descuento no puedes er superior al valor base a nivel detalle factura. | El sistema ya tiene esa funcionalidad. |
FBE08, CBE08, DBE08 | Valor base para calcular de cargo o descuento a nivel detalle, no debe ser mayor al valor total de la factura. | El sistema ya tiene esa funcionalidad. |
FBE09, CBE09, DBE09 | Código de moneda de acuerdo a la tabla de monedas. | El sistema ya tiene esa funcionalidad. |
CAD09c, CAD09d | En la emisión de NCC, la fecha factura debe estar entre 5 días anteriores y hasta 10 posteriores a la fecha actual. | Ya se tiene esa funcionalidad por parte de TFHKA. |
CAD12b | Tipo de NCC válido de acuerdo a la tabla de tipos de operación. | El sistema ya tiene esa funcionalidad. |
CAD15b | NCC con el mismo código de divisa en todo el documento. | El sistema ya tiene esa funcionalidad. |
CAJ08, DAK08 | En NCC informar datos de dirección: municipio, ciudad, departamento, código departamento, dirección y país. | El sistema ya tiene esa funcionalidad. |
CAJ50 | Prefijo de la NCC. | El sistema ya tiene esa funcionalidad. |
CAJ60 | En NCC, el DV del NIT dbe ser informado. | El sistema ya tiene esa funcionalidad. |
CAJ56 | En NCC, informar Nombre o Razón Social de participante de consorcio. | Ya se tiene esa funcionalidad por parte de TFHKA. |
CAJ57 | En NCC, informar el NIT del participante de consorcio | Ya se tiene esa funcionalidad por parte de TFHKA. |
CAV06, DAV06 | El Valor Total de la línea de detalle, debe ser igual Cantidad x Precio Unidad - Descuentos + Recargos. | El sistema ya tiene esa funcionalidad. |
CAZ02, DAZ02 | Informar la descripción de producto en NCC y NDC. | El sistema ya tiene esa funcionalidad. |
CAZ12, DAZ12 | Código de producto en NCC/NDC. Se puede informar subpartida arancelaria a 10 dígitos (EXP), UNSPSC, GTIN o partida arancelaria. | Se utiliza el código “999” (Estándar de adopción del contribuyente). |
CBB05, DBB05 | En NCC y NDC la Unidad de medida debe corresponder con la tabla indicada por la DIAN (inciso 13.3.6 del Anexo Técnico). | El sistema ya tiene esa funcionalidad. |
DAD09c, DAD09d | En la emisión de NDC, la fecha factura debe estar entre 5 días anteriores y hasta 10 posteriores a la fecha actual. | Ya se tiene esa funcionalidad por parte de TFHKA. |
DAD15b | NDC con el mismo código de divisa en todo el documento. | El sistema ya tiene esa funcionalidad. |
DAJ41 | NDC con la descripción del identificador tributario del emisor correspondiente (Catálogo definido en la tabla 13.2.6.2 del Anexo Técnico). | El sistema ya tiene esa funcionalidad. |
DAJ50 | Prefijo de NDC. | El sistema ya tiene esa funcionalidad. |
DAK20 | En NDC indicar el nombre o razón social del adquiriente. | El sistema ya tiene esa funcionalidad. |
DAK21 | En NDC informar el NIT del adquiriente. | El sistema ya tiene esa funcionalidad. |
DAV05 | En NDC la unidad de medida del artículo solicitado debe ser de acuerdo a la tabla 13.3.6 del Anexo Técnico. | El sistema ya tiene esa funcionalidad. |
FAV04b | En NF, las cantidades deben ser mayor a cero. | El sistema ya tiene esa funcionalidad. |
FBF04, CAZ17, DAZ17 | Informar la cantidad del bien en tipo de operación 12. | No aplica. |
FBF05, CAZ18, DAZ18 | Informar la unidad de medida del bien en tipo de operación 12. | No aplica. |
FAS18, CAS18, DAS18 | Redondeo agregado al total de impuesto. | No aplica. |
FAS19, CAS19, DAS19 | Código de moneda, en redondeo de impuestos, de acuerdo a la tabla 13.3.3. | No aplica. |
FAX18, CAX18, DAX18 | Redondeo al total del impuesto. | No aplica. |
FAX19, CAX19, DAX19 | Código de moneda en impuestos, de acuerdo a la tabla 13.3.3. | El sistema ya tiene esa funcionalidad. |
FAV04b, CAV04b, DAV04b | Cantidad de producto en todas las líneas del documento. | El sistema ya tiene esa funcionalidad. |
CDG01 | Correspondencia de códigos de departamento y municipio. | El sistema ya tiene esa funcionalidad. |
RUT01 | Estado activo del Facturador electrónico y del Proveedor tecnológico en el RUT. | Responsabilidad de los actores involucrados, Facturador electrónico y Proveedor tecnológico. |
5. Anexo Técnico versión 1.9 DIAN
Producto | TOTVS Backoffice | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | |||||||||||||||||||||
Segmento: | Backoffice | |||||||||||||||||||||
Módulo: | SIGAFAT - Facturación | |||||||||||||||||||||
Función: |
| |||||||||||||||||||||
País: | Colombia (COL) | |||||||||||||||||||||
Ticket: | 18954487 | |||||||||||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-21954 (pacote 013347) |
El anexo técnico 1.9, que forma parte esencial de la resolución Resolución 000165 de 01-11-2023, debe ser implementado de manera obligatoria por los emisores de facturas electrónicas a partir del 2 de febrero de 2024. Se otorga plazo hasta dicha fecha para que realicen las adecuaciones necesarias en sus sistemas de información, cumpliendo con lo establecido en esta resolución, a continuación se informan los cambios mas relevantes.
IMPORTANTE
Debido a que se aplazó la obligatoriedad del Anexo 1.9 para el 01 de Mayo de 2024, se activó el parámetro MV_ANEXO19, para activar la funcionalidad, el cual deberá ser configurado con el valor .T..
Para tener activo el parámetro se deben tener en el repositorio las siguientes rutinas, con fecha igual o superior:
Rutina | Nombre Técnico | Fecha |
---|---|---|
M486XFUN | Funciones Genéricas de Documentos Electrónicos | 28/02/2024 |
M486XFUNCO | Funciones Genéricas de Facturación Electrónica de Colombia | 27/02/2024 |
LOCXCOL | Funciones localizadas de Documentos fiscales - Colombia | 27/02/2024 |
INPUTFIELDSCOL | Estructura de campos documentos de entrada para país Colombia | 28/02/2024 |
OUTPUTFIELDSCOL | Estructura de campos documentos de salida para país Colombia | 01/03/2024 |
FATSECOL.INI | Estructura del XML de Facturas de Exportación | 29/02/2024 |
FATECOL.INI | Estructura del XML de Notas de Crédito | 29/02/2024 |
Creación del parámetro en la tabla SX6 - Parámetros:
Ajustes en el Estructura del XML de Facturas de Exportación:
Campo | Valor |
---|---|
Nombre de Var. | MV_ANEXO19 |
Tipo | 3 - Lógico |
Cont. Esp | |
Descripción | Permite activar la funcionalidad del Anexo 1.9 para el país Colombia, con el valor .T. se activa, en caso contrario queda desactivado. |
5.1 Generales
- Separación de catálogos del anexo técnico
- Se elimina el redondeo al total de impuesto a nivel de detalle y total para facturas, notas crédito y débito.
- Se elimina la regla de 10 días posterior e inferior a la fecha y se ha incorporado una nueva regla de rechazo.
- Medios de pago.
- Nombre o razón social del emisor debe coincidir al informado en el RUT.
- Se crea el tipo de documento PPT.
- Factura de exportación.
- Nuevos tipos de operación.
- Cambios incorporados en las notas crédito.
5.2 Separación de catálogos del anexo técnico
Dentro del proceso de revisión, se ha tomado la decisión de eliminar los catálogos de datos del anexo. Este ajuste tiene la finalidad de facilitar la modificación de los valores de manera más ágil y eficiente. En adelante, estos catálogos permanecerán fuera del anexo y estarán disponibles en una caja de herramientas independiente. Además, se establecerá un proceso de actualización de los catálogos de forma independiente a las resoluciones vigentes.
5.3 Se elimina el redondeo al total de impuesto a nivel de detalle y total para facturas, notas crédito y débito
Reglas eliminadas:
FAS18, CAS18,DAS18:
Redondeo aplicado al total del impuesto a nivel de FacturaGeneral, nota crédito, nota débito (no se manejaría el atributo RoundingAmount del nodoTaxTotal que pertenece al Invoice/CreditNote/DebitNote).
FAX18, CAX18, DAX18:
Redondeo aplicado al total del impuesto a nivel de FacturaDetalle, nota crédito, nota débito(no se manejaría el atributo RoundingAmount del nodoTaxTotal que pertenece al InvoiceLine/CreditNoteLine/DebitNoteLine)
5.4 Se elimina la regla de 10 días posterior e inferior a la fecha y se ha incorporado una nueva regla de rechazo
Reglas eliminadas:
FAD09c, CAD09c, DAD09c:
La fecha de emisión no puede ser inferior a 10 días calendarios de la fecha actual.
FAD09d, CAD09d, DAD09d:
La fecha de emisión no sea posterior a 10 días calendarios de la fecha actual.
Reglas nuevas:
FAD09e, CAD09e, DAD09e
Valida que fecha de generación sea igual a la fecha de firma, aplica para facturas, notas crédito y débito.
5.5 Medios de pago
Anteriormente, se establecía la obligatoriedad de indicar el medio de pago únicamente en las facturas de contado. Sin embargo, según el Anexo 1.9, esta obligación se extenderá tanto a las facturas de contado como a las de crédito.
5.6 Nombre o Razón social del emisor debe coincidir al informado en el RUT
Se llevará a cabo una validación para asegurar que el Número de Identificación Tributaria (NIT) y el nombre del emisor de las facturas concuerden con los datos registrados en el Registro Único Tributario (RUT), tanto en el proceso de emisión como en el de recepción de dichas facturas.
Reglas nuevas:
FAJ44a: NIT no autorizado a facturar electrónicamente.
FAJ43b: Nombre o Razón Social del emisor debe corresponder al informado en el RUT y debe coincidir con el NIT informado.
FAJ44b: NIT o documento de identificación del emisor debe corresponder al informado en el RUT y debe coincidir con la Razón Social o Nombre comercial registrado.
FAJ43a: Nombre o Razón Social del emisor debe ser informado.
5.7 Se crea el tipo de documento PPT
Dentro del catálogo de tipo de documento se crea PPT (Permiso de protección temporal) con el código 48, el cual es un documento de identificación para personas en movilidad humana provenientes de Venezuela, este documento permite aplicar a los programas sociales del estado, y acceder de manera amplia a derechos como la salud, la educación y el trabajo. (Tabla S002 - Tipos de Docs de Identidad de Mantenimiento de Tablas de Protheus).
5.8 Factura de exportación
Las facturas de exportación deben expresarse en COP, y se crea una segmento XML para poner los valores en otra moneda, se puede colocar en las dos monedas en la representación gráfica.
5.9 Nuevos tipos de operación
Para el control cambiario se Incluyen dos modos de operación (Compra Divisas y Venta Divisas) con los códigos 15 y 16 respectivamente (Tabla S017- Tipos de operación de Mantenimiento de Tablas de Protheus).
5.10 Cambios incorporados en las notas crédito
- No se permite notas crédito referenciadas para facturas aceptadas, es decir, se debe realizar una nota crédito no referenciada.
- Solo se puede anular facturas cuando el tipo de operación es igual a 20, es decir, Nota Crédito que referencia una factura electrónica.
- Para todas las notas sin referencia debe incluir el periodo (mes) que afecta.
5.11 Configuraciones
Para la funcionalidad del Anexo 1.9 en Protheus se deben de realizar los siguientes ajustes:
Para la Factura de Exportación, agregar las siguientes líneas para la generación del nodo cac:PaymentExchangeRate, el cual generará en el SOAP Request que es enviado a The Factory HKA en nodo de Tasa de Cambio.
Crear los siguientes campos para la funcionalidad de Transmisión de Notas de Crédito de Cliente (NCC) con tipo de Operación 22 (Nota de Crédito sin referencia a facturas) y Notas de Débito de Cliente (NDC) con tipo de Operación 32 (Nota de débito sin referencia a facturas):
Tabla SF1- Encabezado Doc. de Entrada.
Campo | F1_PTOEMIS |
Tipo | C |
Tamaño | 7 |
Decimal | 0 |
Formato | 99-9999 |
Título | Period Fact |
Descripción | Periodo de Facturación |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | Vazio() .Or. (FindFunction("LxVldPeri") .And. LxVldPeri('SF1')) |
Help | Digite el mes y año del periodo de facturación en formato "MM-YYYY. |
Tabla SF2- Encabezado Doc. de Salida.
FATSECOL
Campo | F2_PTOEMIS |
Tipo | C |
Tamaño | 7 |
Decimal | 0 |
Formato | 99-9999 |
Título | Period Fact |
Descripción | Periodo de Facturación |
Nivel | 1 |
Utilizado | Si |
Obligatorio | No |
Browse | No |
Opciones | |
When | |
Relación | |
Val. Sistema | Vazio() .Or. (FindFunction("LxVldPeri") .And. LxVldPeri('SF2')) |
Help | Digite el mes y año del periodo de facturación en formato "MM-YYYY. |
- base_conocimiento
- protheus
- documento_tecnico
- mercado_internacional
- colombia
- validacion_previa
- 6241101
- locxnf
- locxnf2
- mata468n
- fisa814
- matn030
- facturacion_electronica
- the_factory_hka
- 12117
- 12_1_17
- 12123
- 12_1_23
- 12125
- 12_1_25
- dmina-7002
- fatscol
- fatsecol
- fatecol
- m486xfun
- m486xfunco
- mata486
- fisa827
- mv_tipofe
- mv_wsrtss
- sigafat
- col
- dmina-7572
- dmina-7459
- dmina-8044
- 12_1_27
- 12127
- m486pdfcol
- dmina-8271
- envio_correo
- dmina-5484
- dmina-6420
- pe_m486cext
- dmina-8101
- 7837635
- m485dorife
- dmina-8877
- 8674296
- dmina-8799
- 8394670
- implementacion
- factura
- electronica
- m486owscol