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
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 ahí 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

Párametro 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