01. DATOS GENERALES


Producto

Línea de producto: 

Segmento:

Módulo:SIGAFAT - Facturación
Función:
RutinaNombreFecha
M486XFUNFunciones Genéricas de facturación electrónica07/04/2025
M486XFUNCOFunciones Genéricas de facturación electrónica de Colombia07/04/2025
FATECOLEstructura del XML de Documentos de Entrada07/04/2025
FATSCOLEstructura del XML de Documentos de Salida07/04/2025
MATA486Documentos Electrónicos09/04/2025
País:COL (Colombia)
Ticket:23094663
Requisito/Story/Issue (informe el requisito vinculado):DMICNS-23033


02. SITUACIÓN/REQUISITO

Al momento de realizar la transmisión de un Documento Soporte o Nota de Ajuste (Crédito | Débito) en moneda extranjera, se requiere que el sistema pueda realizar las conversiones a moneda nacional (COP) de todos los montos del documento.

Acorde a la resolución 00165 DIAN mencionando los cambios para la integración del Anexo 1.9, no es obligatorio para Documento Soporte y Notas de Ajuste realizar la conversión a moneda nacional (COP), sin embargo existen varios clientes que quieren transmitir dichos documentos con sus montos en moneda nacional.

Se creará un parámetro para que el usuario pueda transmitir Documento Soporte y Notas de Ajuste en moneda nacional (COP) o en moneda extrajera según lo requiera.


Documentación The Factory:

Cambios Integración Anexo 1.9

Reglas de rechazo anexo técnico V 1.9 -Cambios Integración Anexo V 1.9

Resolución:

Resolución 000165 de 01-11-2023.


 

03. SOLUCIÓN

En la rutina de Funciones Genéricas de Documentos Electrónicos (M486XFUN):

En la rutina de Funciones Genéricas de Facturación Electrónica de Colombia (M486XFUNCO):



  1. Realizar un respaldo del repositorio del ambiente (archivo .rpo).
  2. Aplicar el parche del issue DMICNS-23033
  3. Validar que las rutinas especificadas en la sección 01. DATOS GENERALES se hayan actualizado con una fecha igual o superior a la mencionada.
  4. Contar con el parámetro MV_CONVEXP informado con el valor .T..
  5. Realizar un respaldo del archivo FATSECOL.INI que se encuentra en la ruta configurada en el parámetro MV_CFDFTSE.
  6. Actualizar el archivo FATSECOL.INI que viene anexo en la carpeta del parche, en la ruta configurada en el parámetro MV_CFDFTSE.
  7. Configurar los ajustes al Diccionario de Datos de acuerdo a lo mencionado en la sección 04. INFORMACIÓN ADICIONAL.
  8. En el módulo Compras (SIGACOM): 
    • Desde el Actualizaciones | Movimientos Factura de Entrada,
      • Registrar un Documento Soporte en moneda extranjera.
    • Desde el Actualizaciones | Movimientos | Nota Cred/Debito,
      • Registrar la nota de ajuste crédito en moneda extranjera del documento soporte previamente registrado
      • Registrar la nota de ajuste débito en moneda extranjera del documento soporte previamente registrado

En el módulo Facturación (SIGAFAT): 

  1. Ir al menú Actualizaciones | Facturación | Transmisión Electrónica (MATA486).
    • Realizar la transmisión del Documento Soporte en Moneda extranjera (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 y moneda destino del Documento.

En el módulo Facturación (SIGAFAT): 

  1. Ir al menú Actualizaciones | Facturación | Transmisión Electrónica (MATA486).
    • Realizar la transmisión de la Nota de Ajuste Débito (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 y moneda destino del Documento.

En el módulo Facturación (SIGAFAT): 

  1. Ir al menú Actualizaciones | Facturación | Transmisión Electrónica (MATA486).
    • Realizar la transmisión de la Nota de Ajuste Crédito (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 y moneda destino del Documento.


04. INFORMACIÓN ADICIONAL

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.


En el apartado de [XXX INICIALIZACION] agregar la validación para comprobar los documentos para los cuales se va a realizar la conversión de moneda:

(PRE) _aTotal[091] := _aTotal[033]$"NF|NDC" .Or.(SuperGetMV("MV_CONVEXP",.F.,.F.) .and. (SF2->(ColumnPos("F2_MARK")) > 0 .and. SF2->F2_MARK =='S'))


En el apartado de [XXX RECEPTOR], agregar los ajustes para generar correctamente los nodos SourceCurrencyCode,SourceCurrencyBaseRate y TargetCurrencyCode:

(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:SourceCurrencyCode>' + Iif(_aTotal[091],"COP",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>' +  Iif(_aTotal[091] ,Alltrim(Str(SF2->F2_TXMOEDA,11,2)),"1.00") + '</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:TargetCurrencyCode>' + Iif(_aTotal[091],Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ),"COP") + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) ) , "" )


En la sección de [SD2 INVOICE], agregar los ajustes para generar correctamente los nodos cbc:LineExtensionAmount, cac:AllowanceCharge\cbc:Amount y fe:Price\cbc:PriceAmount 

(PREREG) (_aTotal[001] += '        <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(AllTrim(_aTotal[091].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] += '            <cbc:PriceAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(_aTotal[091].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] += IIF(SD2->D2_DESCON > 0, '            <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(IIf(_aTotal[091] .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.)


Archivo FATECOL.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.


En el apartado de [XXX INICIALIZACION] agregar la validación para comprobar los documentos para los cuales se va a realizar la conversión de moneda:

(PRE) _aTotal[091] := _aTotal[033] == "NCC" .Or. (SuperGetMV("MV_CONVEXP",.F.,.F.) .and. ((SF1->(ColumnPos("F1_SOPORT")) > 0 .and. SF1->F1_SOPORT =='S') .Or. (SF1->(ColumnPos("F1_MARK")) > 0 .and. SF1->F1_MARK =='S')))


En el apartado de [XXX RECEPTOR], agregar los ajustes para generar correctamente los nodos SourceCurrencyCode,SourceCurrencyBaseRate y TargetCurrencyCode:

(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:SourceCurrencyCode>' + Iif(_aTotal[091],"COP",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>' +  Iif(_aTotal[091] ,Alltrim(Str(SF1->F1_TXMOEDA,11,2)),"1.00") + '</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
(PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:TargetCurrencyCode>' + Iif(_aTotal[091],Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ),"COP") + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) ) , "" )


En la sección de [SD1 INVOICE], agregar los ajustes para generar correctamente los nodos cbc:LineExtensionAmount, cac:AllowanceCharge\cbc:Amount y fe:Price\cbc:PriceAmount 

(PREREG) (_aTotal[001] += '        <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(IIf(_aTotal[091] .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] += IIF(SD1->D1_VALDESC > 0, '            <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(IIf(_aTotal[091] .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[090] := Alltrim(IIf(_aTotal[091] .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.)


Parámetros en el archivo SX6 – Parámetros:

Nombre de la Variable

MV_CONVEXP

Tipo

Lógico

Descripción

Parámetro para activar la conversión a moneda nacional (COP) al momento de transmitir Documento Soporte y Notas de Ajuste Crédito\Débito.

Valor Estándar.F.

Código: 015412
Pacote: MI - DMICNS-23033 - COL PARÁMETRO MV_CONVEXP



05. ASUNTOS RELACIONADOS