01. DATOS GENERALES


Producto

Línea de producto: 

Segmento:

Módulo:SIGACOM - Compras
Función:
RutinaNombre TécnicoFecha
MATA486.PRWDocumentos Electrónicos26/09/2022
M486XFUNCO.PRWFunciones genéricas para transmisión de Documentos Electrónicos26/09/2022
M486PDFCOL.PRWGeneración de Factura Electrónica en PDF26/09/2022
LOCXNF.PRWNotas Fiscales26/09/2022
LOCXNF2.PRW

Funciones genéricas de Documentos Fiscales

26/09/2022
LOCXCOL.PRWFunciones Genéricas de Notas Fiscales Colombia26/09/2022
LOCXGEN.PRWComponentes de Ventanas en Notas Fiscales26/09/2022
SIGACUS.PRWFunciones Genéricas para Documentos Fiscales23/09/2022
LOCXFUNA.PRXFunciones Genéricas para Notas Fiscales26/09/2022
M486XFUN.PRWFunciones genéricas de Facturación Electrónica 26/09/2022


Archivos de Configuración

ArchivoNombre TécnicoFecha
FATECOL.INIGeneración de XML para Documentos de Entrada26/09/2022
FATSCOL.INIGeneración de XML para Documentos de Salida26/09/2022
País:Colombia
Ticket:14655123
Pacote Atusx:011023
Requisito/Story/Issue (informe el requisito vinculado):DMINA-16565


02. SITUACIÓN/REQUISITO

Las notas de ajuste son documentos electrónicos o físicos según el caso, que constituyen el medio por el cual se realizan ajustes o se anula el documento soporte, por errores aritméticos o de contenido, cumpliendo las condiciones, términos, mecanismos técnicos y tecnológicos que para el efecto señale la DIAN conforme al contenido del anexo técnico previsto en el artículo 17 de la Resolución 000167 de 2021. https://www.dian.gov.co/normatividad/Normatividad/Resoluci%C3%B3n%20000167%20de%2030-12-2021.pdf

Realizar las modificaciones necesarias para generar Notas de Ajuste de tipo Débito o Crédito referenciadas únicamente a Documentos Soporte e implementar la Transmisión Electrónica para estos documentos.


03. SOLUCIÓN

Se realizan modificaciones a los siguientes Fuentes:

LOCXNF


LOCXNF2


LOCXCOL


SIGACUS


LOCXGEN

LOCXFUNA

MATA486

M486XFUN


M486XFUNCO


M486PDFCOL


FATECOL

FATSCOL



  1. Realizar un respaldo del repositorio (RPO).
  2. Aplicar el parche correspondiente al issue DMINA-16565.
  3. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como las fechas.
  4. Contar con la configuración mencionada en el Documento Técnico de la sección 05. ASUNTOS RELACIONADOS.
  5. Modificar el diccionario de datos como se indica en la sección 04. INFORMACIÓN ADICCIONAL.
  6. Los proveedores no obligados a facturar, se registran como clientes con toda la información de identificación, dirección, responsabilidades, etc..
    1. Crear un Cliente (MATA030) con los datos del Proveedor y asignar los tributos de la DIAN.
    2. Crear un Proveedor (MATA020) y relacionarlo al Cliente mediante los campos Cod. Cliente (A2_CLIENTE) y Tda. Cliente (A2_LOJCLI).
  7. Dentro del configurador Protheus (SIGACFG), en la opción "Diccionarios / tablas genéricas", en la tabla genérica "00 - 01 - Series de Facturas", agregar la serie "NAJ" y el número inicial para las Notas de Ajuste.
  8. Dentro de Control de Formularios (MATA992)

    1. Agregar Serie para Notas de Ajuste de Crédito.

      1. Asignar la Serie "NAJ" con Especie "8=NCP" y en la Serie 2 agregar el prefijo MXAJ, también asignar el Número Inicial y Final y los campos que son obligatorios.

    2. Agregar Serie para Notas de Ajuste de Débito.
      1. Asignar la Serie "NAJ" con Especie "9=NDP" y en la Serie 2 agregar el prefijo MXAJ, también asignar el Número Inicial y Final y los campos que son obligatorios.

  9. El prefijo (Serie 2) debe estar conformado por 4 caracteres y éste debe estar configurado en los “Secuenciales” del portal de Facturación Electrónica de Factory.


  10. Configurar los siguientes parámetros (SX6), considerando que la implementación se realiza en un ambiente de homologación/pruebas:

    Parámetro

    Contenido

    Descripción

    MV_CFDIAMB  2Indica el ambiente de trabajo de certificación de factura electrónica: 1=Producción, 2=Homologación.
    MV_PROVFE    DFACTURAIdentifica el Fact. Electrónico/Prov. Tecnológico servicios de certificación de factura electrónica. Indicar alguno de estos: TSS o DFACTURA
    MV_TIPOFE     1Indica el modelo de transmisión electrónica, 0 o vacío = Val. Posterior y 1 = Val. Previa.
    MV_TKN_EMP <Proporcionado por The Factory HKA>Token Empresa - The Factory HKA.
    MV_TKN_PAS <Proporcionado por The Factory HKA>Token Password - The Factory HKA.
    MV_WSRTSS    http://demoemision21v4.thefactoryhka.com.co/ws/v1.0/Service.svc?wsdlURL del servicio web.
    MV_CFDDOCSGetSrvProfString('startpath','')+'\cfd\facturas\'                                   Directorio donde se grabaran las facturas electrónicas.      
  11. 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 reemplazan.

    //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) 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="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>' +  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] .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(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] .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[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] .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>'))



  12. Realizar las siguientes modificaciones al archivo de configuración FATSCOL.INI. Las líneas en color azul se agregan, las líneas en color verde se reemplazan.

    //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>' +  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) ) , "" )
    (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(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(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(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>'))

  1. 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.
    • Incluir Documentos Soporte para el Proveedor que está relacionado al Cliente.
    • Transmitir los documentos.

  2. Nota Ajuste de Crédito.

    Por medio de las Notas de Ajuste de tipo Crédito (NCP) se puede realizar la “Anulación”, “Devolución” y “Descuento” del Documento Soporte.

    Las Notas de Ajuste de tipo Crédito aplicadas a Documentos Soporte funcionan de la misma manera que las Notas de Crédito de Proveedor (NCP) aplicadas a las Facturas de Entrada.

    • Ingresar al módulo de Compras (SIGACOM), ir al menú | Actualizaciones | Movimientos | Nota Crédit/Débito (MATA466N).
    • En la pregunta ¿Formulario Propio? seleccionar “Si”.
    • En la pregunta ¿Tipo de Factura? seleccionar “Nota Ajuste Créd”.
    • Confirmar dando clic en el botón "OK".
    • En el encabezado de la pantalla principal confirmar que se muestre el título “Nota de Crédito – Nota de Ajuste”.
    • Dar clic en el botón “Incluir”.
    • En el encabezado del formulario de captura confirmar que se muestre el título “Nota de Crédito – Nota de Ajuste”.

    • Seleccionar al Proveedor que está relacionado al Cliente.
    • Seleccionar la Serie configurada para la Nota de Ajuste, automáticamente se cargará el Número Documento y la Serie 2.
    • Seleccionar el Tipo de Ajuste (Concepto de Corrección para Notas de Ajuste).
    • Referenciar un Documento Soporte por medio del menú "Otras Acciones" opciones "Factura" o "Doc. Orig"

      Las opciones "Factura" o "Doc. Orig" mostrarán únicamente documentos de tipo “Documentos Soporte” (F1_SOPORT = ’S’). Los Documentos Soporte que no han sido transmitidos no se podrán seleccionar, el sistema lo notificará con un mensaje.

    • Verificar que los campos "Doc. Original" y "Serie Org." cuenten con información relacionada al Documento Soporte referenciado.
    • En la pestaña “Títulos” indicar la Condición de Pago.
    • Guardar la Nota de Ajuste.

      Solo se podrán borrar las Notas de Ajuste que no han sido transmitidas, si el documento ya fue transmitido, éste no se podrá borrar y se notificará con un mensaje.

  3. Transmisión de Nota de Ajuste. 
    • 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 “Nota de Ajuste”.
      ¿Serie? seleccionar “NAJ”.
      ¿Estatus? seleccionar “0” para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
      ¿Tipo Nota Ajuste? seleccionar “Crédito”.

      Si la pregunta ¿Tipo de Documento? es “Nota de Ajuste” es necesario indicar la pregunta ¿Tipo Nota Ajuste? con alguna de las opciones “Débito” o “Crédito”.

    • Confirmar.
    • En el encabezado de la pantalla principal, confirmar que se muestre el título “Nota de Ajuste Crédito”.

    • En la pantalla principal verificar que exista la Nota de Ajuste Crédito.
    • Dar clic en el botón “Transmitir”.
    • Asignar la serie “NAJ” y el Número de Documento Inicial y Final.
    • Confirmar Transmisión.
    • Revisar el Log de transmisión.


  4. Nota Ajuste de Débito.

    Por medio de las Notas de Ajuste de tipo Débito (NDP) se puede realizar “Ajustes de Precio”, cobro de “Intereses” y “Comisiones” sobre el Documento Soporte. Los ajustes de precio aplican cuando se ha facturado un costo menor en el Documento Soporte y se debe ajustar para asignar un costo mayor.

    Las Notas de Ajuste de tipo Débito aplicadas a Documentos Soporte  funcionan de la misma forma que las Notas de Débito de Proveedor (NDP) aplicadas a las Facturas de Entrada.

    • Ingresar al módulo de Compras (SIGACOM), ir al menú | Actualizaciones | Movimientos | Nota Crédit/Débito (MATA466N).
    • En la pregunta ¿Formulario Propio? seleccionar “Si” .
    • En la pregunta ¿Tipo de Factura? seleccionar “Nota Ajuste Débi”.
    • Confirmar dando clic en el botón "OK".
    • En el encabezado de la pantalla principal confirmar que se muestre el título “Nota de Débito – Nota de Ajuste”.
    • Dar clic en el botón “Incluir”.
    • En el encabezado del formulario de captura confirmar que se muestre el título “Nota de Débito – Nota de Ajuste”.

    • Seleccionar al Proveedor que está relacionado al Cliente.
    • Seleccionar la Serie configurada para la Nota de Ajuste, automáticamente se cargará el Número Documento y la Serie 2.
    • Seleccionar el Tipo de Ajuste (Concepto de Corrección para Notas de Ajuste).
    • Referenciar un Documento Soporte por medio del menú "Otras Acciones" opción "Factura". 

      La opción "Factura" mostrará únicamente documentos de tipo “Documentos Soporte” (F1_SOPORT = ’S’). Los Documentos Soporte que no han sido transmitidos no se podrán seleccionar, el sistema lo notificará con un mensaje.

    • Verificar que los campos "Doc. Original" y "Serie Org." cuenten con información relacionada al Documento Soporte referenciado.
    • En la pestaña “Títulos” indicar la Condición de Pago.
    • Guardar la Nota de Ajuste.

      Solo se podrán borrar las Notas de Ajuste que no han sido transmitidas, si el documento ya fue transmitido, éste no se podrá borrar y se notificará con un mensaje.


  5. Transmisión de Nota de Ajuste. 
    • 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 “Nota de Ajuste”.
      ¿Serie? seleccionar “NAJ”.
      ¿Estatus? seleccionar “0” para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
      ¿Tipo Nota Ajuste? seleccionar “Débito”.

      Si la pregunta ¿Tipo de Documento? es “Nota de Ajuste” es necesario indicar la pregunta ¿Tipo Nota Ajuste? con alguna de las opciones “Débito” o “Crédito”.

    • Confirmar.
    • En el encabezado de la pantalla principal, confirmar que se muestre el título “Nota de Ajuste Débito”.

    • En la pantalla principal verificar que exista la Nota de Ajuste Débito.
    • Dar clic en el botón “Transmitir”.
    • Asignar la serie “NAJ” y el Número de Documento Inicial y Final.
    • Confirmar Transmisión.
    • Revisar el Log de transmisión.


  6. Archivo XML de las Notas de Ajuste.
    Los archivos XML autorizados se crean en la carpeta configurada en el parámetro MV_CFDDOCS + "/autorizados/"
    Los documentos XML de las Notas de Ajuste utilizan el identificador "n" en el nombre del archivo.
    Ejemplo: face_n53485215000000000012.xml

    Abrir el archivo XML. Ejemplo de nodos del documento:


    • Revisar que el elemento "tipoDocumento" sea igual a "95" que indica que se transmitió una Nota de Ajuste. Ejemplo:
      <cbc:CreditNoteTypeCode>95</cbc: CreditNoteTypeCode>

    • Revisar que el elemento "numeroDocumento" sea similar a "MXAJ18" que indica el Prefijo+Consecutivo de la Nota de Ajuste
      Ejemplo:
      <cbc:ID> MXAJ18</cbc: ID>

    • Revisar que el elemento "cufeDocReferenciado" se informe correctamente con el UUID de la Nota de Ajuste.
      Ejemplo:
      <cbc:UUID schemeID="2" schemeName="CUDS-SHA384">f0fe261c357e71e5ccd2ed78e6f4cc0fdaec11a95d132d9aeb41122be5207edbd11f40ef77323f29e34cf84d3698011b</cbc:UUID>

    • Revisar que el elemento "numeroDocumento" del documento referenciado (DiscrepancyResponse) sea similar a "MXDS831" que indica el Prefijo+Consecutivo del Documento Soporte.
      Ejemplo:
      <cbc:ReferenceID> MXDS831</cbc: ReferenceID >

    • Revisar el elemento "descripción" del documento referenciado (DiscrepancyResponse) sea igual a "ANULACION DEL DOCUMENTO SOPORTE"
      Ejemplo:
      <cbc:Description> ANULACION DEL DOCUMENTO SOPORTE </cbc: Description >

    • Revisar que el elemento "numeroDocumento" del documento referenciado (BillingReference / InvoiceDocumentReference) sea similar a "MXDS831" que indica el Prefijo+Consecutivo del Documento Soporte.
      Ejemplo:
      <cbc: ID>MXDS831</cbc:ID >

    • Revisar que el elemento "cufeDocReferenciado" del documento referenciado (BillingReference / InvoiceDocumentReference) sea igual al UUID del Documento Soporte.
      Ejemplo:
      <cbc:UUID schemeName="CUDE-SHA384">97a0cb911509cfa267e871fec06647eff3b4b50c075bbe4155495aab28882ccb26714e25f966eecab6b7a160f9ab761f</cbc:UUID>

    • Revisar que el elemento "fecha" del documento referenciado (BillingReference / InvoiceDocumentReference) sea igual la fecha de emisión del Documento Soporte.
      Ejemplo:
      <cbc:IssueDate>2022-09-14</cbc:IssueDate>


  7. 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 “Nota de Ajuste”.
      ¿Serie? seleccionar “NAJ”.
      ¿Estatus? seleccionar “0” para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
      ¿Tipo Nota Ajuste? seleccionar “Débito” o "Crédito".

    • Confirmar.
    • Dar clic en el botón “Monitor”.
    • Asignar la Serie NAJ” y el Número de Documento Inicial y Final.
    • Confirmar.
    • Revisar el estatus de la Nota de Ajuste.


  8. 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 “Nota de Ajuste”.
      ¿Serie? seleccionar “NAJ”.
      ¿Estatus? seleccionar “0” para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
      ¿Tipo Nota Ajuste? seleccionar “Débito” o "Crédito".
    • Confirmar.
    • Dar clic en el botón “Otras Acciones”.
    • Seleccionar la opción "Imprimir PDF".
    • Asignar la Serie NAJ”, el Número de Documento Inicial y Final e indicar el Formato PDF.
    • Confirmar.
    • Revisar la información impresa en el archivo PDF de la Nota de Ajuste.


  9. 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 “Nota de Ajuste”.
      ¿Serie? seleccionar “NAJ”.
      ¿Estatus? seleccionar “0” para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
      ¿Tipo Nota Ajuste? seleccionar “Débito” o "Crédito".
    • Confirmar.
    • Dar clic en el botón “Otras Acciones”.
    • Seleccionar la opción "Recuperar XML".
    • Asignar la Serie NAJ”, el Número de Documento Inicial y Final.
    • Asignar la Carpeta dónde será guardado el archivo.
    • Confirmar.
    • Revisar que el archivo XML de la Nota de Ajuste se haya almacenado en la carpeta indicada.


04. INFORMACIÓN ADICIONAL

Actualizaciones al diccionario.

Campos en el archivo SX3 - Campos:

Crear campo F2_MARK

Campo

F2_MARK

Orden

ZZ

Tipo

Caracter

Tamaño

1

Decimal

0

Formato

@!

Título

Nota Ajuste

Descripción

Nota de Ajuste

Utilizado

Si

Obligatorio

No

Browse

No

Val. Sistema

Pertence("SN")

Inicializador

"S"

Opciones

S=Si;N=No

Help

Si la Nota que registra corresponde a un ajuste o anulación del Documento Soporte en adquisiciones con sujetos no obligados a facturar electrónicamente y será transmitida a la DIAN, indique Si, de lo contrario indique No.


Crear campo F2_TIPNOTA


Campo

F2_TIPNOTA

Orden

ZZ

Tipo

Caracter

Tamaño

1

Decimal

0

Formato

@!

Título

Tipo Ajuste

Descripción

Corrección Nota Ajuste  

Utilizado

Si

Obligatorio

No

Browse

No

Consulta

1D

Val. Sistema

Pertence("12345") .and. NaoVazio()

Inicializador


Help

Concepto de Corrección para Notas de Ajuste. Seleccione las opciones disponibles en la consulta.


Crear campo  F1_MARK


Campo

F1_MARK

Orden

ZZ

Tipo

Caracter

Tamaño

1

Decimal

0

Formato

@!

Título

Nota Ajuste

Descripción

Nota de Ajuste

Utilizado

Si

Obligatorio

No

Browse

No

Val. Sistema

Pertence("SN")

Inicializador

"S"

Opciones

S=Si;N=No

Help

Si la Nota que registra corresponde a un ajuste o anulación del Documento Soporte en adquisiciones con sujetos no obligados a facturar electrónicamente y será transmitida a la DIAN, indique Si, de lo contrario indique No.


Crear campo F1_TIPNOTA


Campo

F1_TIPNOTA

Orden

ZZ

Tipo

Caracter

Tamaño

1

Decimal

0

Formato

@!

Título

Tipo Ajuste

Descripción

Corrección Nota Ajuste  

Utilizado

Si

Obligatorio

No

Browse

No

Consulta

1D

Val. Sistema

Pertence("12345") .and. NaoVazio()

Inicializador


Help

Concepto de Corrección para Notas de Ajuste. Seleccione las opciones disponibles en la consulta.


Modificar campo FP_ESPECIE

Agregar la información presentada en color azul.


Campo

FP_ESPECIE

Orden

ZZ

Tipo

Carácter

Tamaño

1

Decimal

0

Formato

@!

Título

Especie    

Descripción

Especie de la Fact.     

Val. Sistema

Pertence("1234589")

Opciones

1=FCT;2=NCC;3=NDC;4=NDI;5=NCI;8=NCP;9=NDP


Preguntas en el archivo SX1 – Archivo de Preguntas:

Agregar la información presentada en color azul.


Modificar grupo MT466N


Orden

02

Pregunta

¿Tipo De Factura ?           

Tipo

N

Tamaño

1

Decimal

0

Objeto

Combo

Ítem 1

Débito        

Ítem 2

Crédito       

Ítem 3

Nota Ajust Débi

Ítem 4

Nota Ajust Créd


Modificar grupo MATA486


Orden

01

Pregunta

¿Tipo de Documento ?         

Tipo

N

Tamaño

1

Decimal

0

Objeto

Combo

Ítem 1

Factura       

Ítem 2

Nota de Débito         

Ítem 3

Nota de Crédito

Ítem 4

Docto Suporte 

Ítem 5

Nota de Ajuste 


Agregar pregunta a grupo MATA486


Orden

06

Pregunta

¿Tipo Nota Ajuste ?         

Tipo

N

Tamaño

1

Decimal

0

Objeto

Combo

Ítem 1

Ninguno     

Ítem 2

Débito        

Ítem 3

Crédito


Crear grupo MATA486J


Orden

01

02

03

Pregunta

¿Serie de la Nota de Ajuste?         

¿ Nota de Ajuste Inicial?

¿ Nota de Ajuste 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



Grupo094018018

Help

Serie de la Nota de Ajuste.

Número inicial de la Nota de Ajuste.

Número final de la Nota de Ajuste. 



05. ASUNTOS RELACIONADOS