Árvore de páginas

01. DATOS GENERALES


Producto

TOTVS Backoffice

Línea de producto: 

Línea Protheus

Segmento:

Backoffice

Módulo:SIGAFAT - Facturación.
Función:
RutinaNombre TécnicoFecha
FISA814.PRWCarga de catálogos desde archivos .CSV23/11/2022
FATXFUMI.PRWFunciones genéricas para Facturación - Mercado Internacional18/11/2022
M486XFUNEQ.PRWFunciones Genéricas de Facturación Electrónica - Ecuador18/11/2022
FATCRECU20.INIEsquema de XML para Comprobantes de Retención 2.0 ATS24/11/2022
GERXMLA1Funciones Genéricas XML para ATS23/11/2022
EQUATF.INIEsquema de XML para Anexo Transaccional Simplificado23/11/2022
País:Ecuador (EQU) Pacote: 011449
Ticket:15425265
Requisito/Story/Issue (informe el requisito vinculado):DMINA-17603


02. SITUACIÓN/REQUISITO

El 27 de mayo de 2022 el Servicio de Rentas Internas emitió la Resolución No. NAC-DGERCGC22-00000024, a través de la cual establece disposiciones respecto a la emisión de los Comprobantes de Retención Electrónicos en la versión ATS.

A través de esta resolución, se dispone que los sujetos pasivos del Impuesto a la Renta obligados a facturar que, a la fecha de entrada en vigencia de la presente Resolución, todavía no se encuentren obligados a emitir comprobantes de venta, retención y documentos complementarios en la modalidad electrónica, deberán incorporar este tipo de esquema a su actividad hasta el 29 de noviembre de 2022.

03. SOLUCIÓN

En la rutina Funciones genéricas para Facturación - Mercado Internacional (FATXFUMI):

Se creó la función que Realiza búsqueda de datos en tabla F3I - Mantenimiento de Tablas (FATXVALF3I), para realizar búsquedas en la tabla Mantenimiento de Tablas (F3I) por nombre de campo, y evitar la búsqueda por posiciones.

En la rutina Carga de catálogos desde archivos .CSV (FISA814):

Se ajusta la función de Creación de tablas auxiliares estándar para el país Ecuador (f814CatEcu), para que al entrar a la rutina de Mantenimiento de Catálogos (FISA813), si existen los archivos 21TarifaRetIVASRI.csv o 22TipoPago.csv en la ruta local configurada en el parámetro MV_PATH814 sean creadas las estructuras y los datos de las tablas S021 - Catálogo de Tarida Ret. IVA y S022 - Catálogos de Tipos de Pago.

En la rutina Funciones Genéricas de Facturación Electrónica - Ecuador (M486XFUNEQ):

Se creó la función M486XIMTOS(), para la generación del nodo <impuestosDocSustento> con los atributos para informar los Impuestos que contiene la Factura de Entrada con la cual se generó el Certificado de Retención que se incluye en el Comprobante de Retención 2.0 versión ATS.

Se creó la función M486CODRET(), para obtener el código de Retención que aplica para el atributo <codigoRetencion>, donde para la Retención de IVA es obtenido de la tabla S021 - Catálogo de Tarifa Ret. IVA y para Retención de la Renta del campo Concepto (FE_CONCEPT).

Se generó el archivo FATCRECU20.INI con el esquema para la generación del XML para los Comprobantes de Retención 2.0 versión ATS.

Ajustes para el Anexo Transaccional Simplificado (ATS):

En la rutina Funciones Genéricas XML para ATS (GERXMLA1):

En la función LFeqXMLan1(), se realizaron ajustes para crear los siguientes campos en la tabla temporal TRA, para la generación del nodo <pagoExterior> de Compras..

CampoValorAtributo
TIPOPROV'01' Si Tipo(A2_TIPO) es igual a 1-Singular, en caso contrario '02'tipoProv
DENOPROVA2_NOMEdenoProv
PGOLOCEXTA2_CONTRBEpagoLocExt
TPOREGFISA2_RETENEDtipoRegi
PAISPGGENA2_CODICApaisEfecPagoGen
PAISPFISA2_RETICApaisEfecPagoParFis
PAISEFEPGA2_CODICA2paisEfecPago
DOBTRIB"SI" si el campo A2_ECDTEX es igual a S-Si, en caso contrario "NO"aplicConvDobTrib
RETNORLEG"SI" si el campo A2_CBUCOM es igual a S-Si, en caso contrario "NO"pagExtSujRetNorLeg

 

  1. Realizar un respaldo del repositorio del ambiente (archivo .rpo)
  2. Aplicar el parche generado para la issue DMINA-17603.
  3. Validar que las rutinas se encuentren actualizada con fecha mayor o igual a la informada en la sección 01. DATOS GENERALES.
  4. Para la generación del Anexo Transaccional Simplificado (ATS), es necesario:
    • Tener las configuración a diccionario que se mencionan en la sección 04. INFORMACIÓN ADICIONAL.
    • Tener el archivo EQUATF.INI en la carpeta system del ambiente, así como realizar los ajustes mencionados en la sección 04. INFORMACIÓN ADICIONAL.
  5. En el parámetro MV_CFDFTCR configurar el nombre y la ruta del ambiente, para el archivo FATCRECU.INI (por ejemplo: GetSrvProfString('startpath','')+'\cfd\inicfd\fatcrecu20.ini')

    Importante

    En caso de realizar merge en el anterior archivo FATCRECU.INI en lugar de utilizar el nuevo estándar FATCRECU20.INI, es muy importante validar que no se tenga la siguiente línea, ya que al generarse está tabla temporal con el nombre "SD1", causa conflicto con la nueva función M486XIMTOS() que genera los impuestos del documento para el Comprobante de Retención 2.0 versión ATS.

    (PREREG) FsQuery(_aTotal[004],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.

  6. En la ruta configurada en el parámetro MV_CFDTCR colocar el archivo FATCREQU.INI:
  7. Configurar el parámetro MV_PATH814, con la ruta local donde se colocarán los archivos en formato .csv para la carga de Catálogos.
  8. Colocar los siguientes archivos en formato .csv en la ruta definida en el parámetro MV_PATH814, conteniendo las siguientes estructuras:
    • 16ImpuestosSRI.csv
    • 17TarifaIVASRI.csv
    • 20TipoImpARetenerSRI.csv
    • 21TarifaRetIVASRI.csv
    • 24FormasPagoSRI.csv
    • 22TipoPago
    • 27TiposRegimenFiscalExterior.csv
      }
    • 28Paises.csv
    • 29ParaisosFiscales.csv
  9. En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Mantenimiento de Catálogos (FISA813)
  10. Validar que se haya generado el catálogo S016 - Catálogo de impuestos, con la siguiente estructura:
  11. Validar que se haya generado el catálogo S017 - Catálogo de Tarifa del IVA, con la siguiente estructura:
  12. Validar que se haya generado el catálogo S020 - Catálogo Tipos Impuestos a Ret, con la siguiente estructura:
  13. Validar que se haya generado el catálogo S021 - Catálogo de Tarifa Ret. IVA, con la siguiente estructura:
  14. Validar que se haya generado el catálogo S022 - Catálogo de Tipos de Pago, con la siguiente estructura:
  15. Validar que se haya generado el catálogo S024 - Catálogo Formas de Pago, con la siguiente estructura:
  16. Validar que se haya generado el catálogo S027 - Catálogo de Régimen Fiscal del Exterior, con la siguiente estructura:
  17. Validar que se haya generado el catálogo S028 - Catálogo de Países, con la siguiente estructura:
  18. Validar que se haya generado el catálogo S029 - Catálogo de Paraísos Fiscales, con la siguiente estructura:
  19. En el Módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Impuestos Variable (MATA996)
    • Para los impuestos que tienen configurado el campo Clase Imp. (FB_CLASSE) esa igual a I-Impuesto, es necesario informar el campo Cod.Impuesto (FB_CODIMP).
  20. En el Módulo Libros Fiscales (SIGAFIS), ir al menú Actualizaciones | Archivos | Conceptos.
    • Para cada Concepto configurar el campo Cód. Ret SRI (CCR_RETSRI), el cual debe corresponder a las tablas 3.10 Conceptos de retención en la fuente de Impuesto a la renta del SRI (tablas del Catálogo de Anexo Transaccional Simplificado)
  21. En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Proveedores
    • Configurar un Proveedor, donde es importante configurar los campos Forma Pago (A2_MPAGO) y E-Mail (A1_EMAIL)

      Importante

      Adicional en el Proveedor deberán ser configurados los siguientes campo Pago Resid. (A2_CONTRBE), Tp. Reg. Fis (A2_RETENED), País/Estab. (A2_CODICA), País P. Fisc (A2_RETICA), País Efec Pg (A2_CODICA2), Doble Trib (A2_ECDTEX) y Pgo Ext Ret (A2_CBUCOM), los cuales son necesarios para la generación de los atributos del nodo <pagoExterior> del Anexo Transaccional Simplificado (ATS).

  22. En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Tipos de Entrada y Salida (MATA080)
    • Configurar un Tipo de Entrada (TES) con el cálculo del Impuesto IVA, Retención de IVA y Retención de la Renta.
  23. En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Modalidades (FINA010)
    • Configurar la Modalidad que aplica para la generación de la Factura de Entrada.
  24. En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Productos (MATA010)
    • Configurar el o los Productos que aplica para la generación de la Factura de Entrada.
  25. En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Movimientos | Facturas de Entrada (MATA101N)
    • Incluir una Factura de Entrada (NF), la cual debe realizar el cálculo de IVA, Retención de IVA y Retención de la Renta.
    • En el encabezado se deben informar los siguientes campos: No. Autoriz (F1_NUMAUT), Cod Estable (F1_ESTABL), Cód. Pto Emi (F1_PROEMIS), Tipo Comp (F1_TIPOPE) y Cód.Sustent (F1_CODCTR)
    • En los ítems se deben informar los siguientes campos: Producto (D1_COD), Cantidad (D1_QUANT), Valor Unit. (D1_VUNIR), Valor Total (D1_TOTAL), Tipo Entrada (D1_TES) 

      Importante

      Para el calculo del Retención de la Renta (RIR), es es necesario informar en el ítem el campo Concepto (D1_CONCEPT).

      Para visualizar datos en la consulta del campo Concepto (D1_CONCEPT), se debe configurar registros desde el módulo Libros Fiscales (SIGAFIS), en el menú Actualizaciones | Archivos | Conceptos.

    • Presionar Guardar para confirmar el guardado de la Factura de Entrada.
    • Validar que se visualice el Folio del Comprobante de Retención generado.
  1. En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Comprobantes Retención (MATA486B)
  2. Ejecutar la acción Enviar.
  3. Informar los parámetros:
    • ¿De Comprobante de Retención? = <Folio del Comprobante de Retención creado previamente>
    • ¿A Comprobante de Retención? = <Folio del Comprobante de Retención creado previamente>
  4. Validar que el proceso de envío haya sido exitoso.
  5. Confirmar la consulta del Monitor.
  6. Validar que el retorno de respuesta sea un estatus Autorizado (Verde)
  7. Validar que el Certificado de Retención haya llegado al email configurado en el Proveedor, en el campo E-Mail (A1_EMAIL).
  1. En el módulo Libros Fiscales (SIGAFAT) ir al menú Miscelánea | Cálculos | Archivos Magnéticos" (MATA950)
  2. En el Wizard para la captura de información del encabezado, informar los parámetros requeridos hasta finalizar y realizar la generación del archivo indicado.
  3. Validar la correcta generación del Anexo Transaccional Simplificado (ATS), y realizar la validación desde el DIMM.


04. INFORMACIÓN ADICIONAL

Archivos .CSV de Catálogos de la SRI:

Archivos de ejemplo


Ajustes a Diccionario de Datos:

Creación de Consultas Estándar

  • Consulta Específica ECU022 - Tipos de Pago.

Alias

Tipo

Secuencia

Columna

Descripción

Contiene

ECU022101RETipos de PagoF3I
ECU02220101
F812SXB("S022","Codigo")
ECU022501

VAR_IXB
  • Consulta Específica ECU027 - Tip. Reg. Fis. Ext.

Alias

Tipo

Secuencia

Columna

Descripción

Contiene

ECU027101RETip. Reg. Fis. Ext.F3I
ECU02720101
F812SXB("S027","Codigo")
ECU027501

VAR_IXB
  • Consulta Específica ECU028 - Países

Alias

Tipo

Secuencia

Columna

Descripción

Contiene

ECU028101REPaísesF3I
ECU02820101
F812SXB("S028","Codigo")
ECU028501

VAR_IXB


  • Consulta Específica ECU029 - Paraísos Fiscales

Alias

Tipo

Secuencia

Columna

Descripción

Contiene

ECU029101REParaísos FiscalesF3I
ECU02920101
F812SXB("S029","Codigo")
ECU029501

VAR_IXB


Creación de campos en SX3

Tabla SA2 - Proveedores

  • Campo A2_CONTRBE
CampoContenido
CampoA2_CONTRBE
Tipo1 - Carácter
Tamaño2
Decimal0
Formato@!
Propiedad1 - Modificar
Tit. EspañolPago Resid.
Des. EspañolPago Residente/No Resid. 
Modo Edición
Cons.ECU022
Val. SistemaVazio() .Or. ValidF3I("S022",M->A2_CONTRBE,1,2)
ObligatorioNo
UsadoSi
BrowseNo
Help

Se debe reportar si el pago realizado por la transacción ingresado se realizó a un residente o no residente. Corresponde a uno de los
códigos de la Tabla 15 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS).


  • Campo A2_RETENED
CampoContenido
CampoA2_RETENED
Tipo1 - Carácter
Tamaño2
Decimal0
Formato@!
Propiedad1 - Modificar
Tit. EspañolTp. Reg. Fis
Des. EspañolTp. De Reg. Fis. Exterior
Modo Edición
Cons.ECU027
Val. SistemaVazio() .Or. ValidF3I("S027",M->A2_RETENED,1,2)
ObligatorioNo
UsadoSi
BrowseNo
Help

Se debe reportar si el pago realizado fue a un no residente (A2_CONTRBE igual a 02). Corresponde a uno de los códigos de la tabla 19 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS).


  • Campo A2_CODICA
CampoContenido
CampoA2_CODICA
Tipo1 - Carácter
Tamaño3
Decimal0
Formato@!
Propiedad1 - Modificar
Tit. EspañolPaís/Estab. 
Des. EspañolPaís Pago Régimen General
Modo Edición
Cons.ECU028
Val. SistemaVazio() .Or. ValidF3I("S028",M->A2_CODICA,1,3)
ObligatorioNo
UsadoSi
BrowseNo
Help

Se debe reportar si el pago realizado al no residente es a un Régimen General (Campo A2_RETENED igual a 01). Corresponde a uno de los códigos de la Tabla 16 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS).


  • Campo A2_RETICA
CampoContenido
CampoA2_RETICA
Tipo1 - Carácter
Tamaño2
Decimal0
Formato@!
Propiedad1 - Modificar
Tit. EspañolPaís P. Fisc
Des. EspañolPaís Paraíso Fiscal 
Modo Edición
Cons.ECU029
Val. SistemaVazio() .Or. ValidF3I("S029",M->A2_RETICA,1,2)
ObligatorioNo
UsadoSi
BrowseNo
Help

Se debe reportar si el pago realizado al no residente ubicado en el paraíso fiscal. Corresponde a uno de los códigos de la Tabla 17 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS).


  • Campo A2_CODICA2
CampoContenido
CampoA2_CODICA2
Tipo1 - Carácter
Tamaño3
Decimal0
Formato@!
Propiedad1 - Modificar
Tit. EspañolPaís Efec Pg
Des. EspañolPaís a quién efectúa Pago
Modo Edición
Cons.ECU028
Val. SistemaVazio() .Or. ValidF3I("S028",M->A2_CODICA2,1,3)
ObligatorioNo
UsadoSi
BrowseNo
Help

Se debe ingresar el país al que se efectúa al pago por el bien o servicio. Corresponde a uno de los códigos
de la Tabla 16 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS). 


  • Campo A2_ECDTEX
CampoContenido
CampoA2_ECDTEX
Tipo1 - Carácter
Tamaño2
Decimal0
Formato@!
Propiedad1 - Modificar
Tit. EspañolDoble Trib
Des. EspañolAplica Conv. Doble Tribut
Modo Edición
Lista EspañolS=Si;N=No
Inic. Estándar'N'
ObligatorioNo
UsadoSi
BrowseNo
Help

Se debe indicar si el pago efectuado está sujeto a algún convenio de doble tributación. Debe siempre seleccionarse una opción (S-Sí / N-No)


  • Campo A2_CBUCOM 
CampoContenido
CampoA2_CBUCOM
Tipo1 - Carácter
Tamaño2
Decimal0
Formato@!
Propiedad1 - Modificar
Tit. EspañolPgo Ext Ret 
Des. EspañolPago Exterior Sujeto Ret 
Modo Edición
Lista EspañolS=Si;N=No
Inic. Estándar'N'
ObligatorioNo
UsadoSi
BrowseNo
Help

Se debe indicar si el pago realizado al exterior aplica retención en aplicación a la norma legal. Debe siempre seleccionarse una opción (S-Sí / No)


Ajustes al Archivo EQUATF.INI:

EQUATF.INI

?{"Nombre del Archivo INI","EQUATF.INI"}
?{"Descripcion Completa del Archivo Magnetico","Declaracion de Retencion del Impuesto de Renta - IR."}
?{"Comentarios",""}

@XML

[XXX Inicializacao variaveis]
(PRE) _aTotal[001] := MV_PAR01                     
(PRE) _aTotal[002] := MV_PAR02
(PRE) _aTotal[003] := {}
(PRE) _aTotal[004] := {}
(PRE) _aTotal[005] := .F.
(PRE) _aTotal[006] := {}
(PRE) _atotal[020] := 0
(PRE) _aTotal[021] := IIf(SF2->(ColumnPos("F2_TPDOC"))==0 .OR. SF2->(ColumnPos("F2_TPVENT"))==0 .OR. SF2->(ColumnPos("F2_TIPOPE"))==0,.F.,.T.)
(PRE) _aTotal[022] := {}
(PRE) _aTotal[023] := {}
(PRE) _aTotal[024] := 0
(PRE) _aTotal[025] := ""

[XXX Montagem do CFP Utilizado pela rotina - PRINCIPAL]
(PRE) aAdd (_aTotal[003], "Formulario 103 - Declaracion de Retencion del Impuesto de Renta - IR")
(PRE) aAdd (_aTotal[003], "")
(PRE) aAdd (_aTotal[003], "Rellene correctamente la informacion solicitada.")
(PRE) aAdd (_aTotal[003], "Informacion necesarias para el rellenado automatico del Formulario 103: Declaracion de Retencion del Impuesto de Renta - IR.")

[XXX Montagem do CFP Utilizado pela rotina - COMPLEMENTAR]
(PRE) aAdd (_aTotal[004], {})
(PRE) aAdd (_aTotal[004][1], "Formulario 103 - Declaracion de Retencion del impuesto de Renta - IR")
(PRE) aAdd (_aTotal[004][1], "Rellene correctamente la informacion solicitada.")
(PRE) aAdd (_aTotal[004][1], {})
(PRE) aAdd (_aTotal[004][1][3], {1, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Tipo Declaracion",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Si fuera sustitutiva:",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {3,,,,,{"O=Original", "S=Sustitutiva"},,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Version Formulario",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Nº Formulario",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 9.9",2,1,,,3})
(PRE) aAdd (_aTotal[004][1][3], {2,,"9999999999999",2,0,,,13})
(PRE) aAdd (_aTotal[004][1][3], {1, "Cod. Version Form.",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Impuesto Pagado",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"9999999999",2,0,,,10})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 999,999,999.99",2,2,,,14})
(PRE) aAdd (_aTotal[004][1][3], {1, "ID Representante legal",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Mora / Interesses",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 9999999999999",2,0,,,13})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 999,999,999.99",2,2,,,14})
(PRE) aAdd (_aTotal[004][1][3], {1, "RUC Contador",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Multa / Intereses",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 9999999999999",2,0,,,13})

[XXX Chamada do Wizard]
(PRE) _atotal[005] := xMagWizard (_aTotal[003], _atotal[04], "EQUATF")
(PRE) Iif (_atotal[005], xMagLeWiz ("EQUATF", @_atotal[06], .T.), Nil)
(PRE) lAbtMT950    := !_atotal[005]

[XXX - monta o Nome do arquivo] 
(PRE) mv_par04 := Alltrim(mv_par04) + "."
(PRE) mv_par04 := stuff(mv_par04,rat(".",mv_par04),rat(".",mv_par04),".XML")
(PRE) _aTotal[07] := mv_par04
(PRE) _aTotal[15] := .F.
//(PRE) _aTotal[16] := .F.


[XXX Header]
//(IMP) {.T.,1,1,"IVA"}
//(CMP) {{"NUMRUC","Contribuyente"},{"RAZSOC","Razon Social"},{"MES","Mes"},{"ANIO","Ano"}}
(PRE) _aTotal[010] := "version="+'"1.0"'+" encoding="+'"ISO-8859-1"'+" standalone="+'"yes"'+" ?"
(PRE) _atotal[30] := LFeqXMLanV(DTOS(MV_PAR01),DTOS(MV_PAR02)) 
Linha1     C 000 0 MontaXML("?xml"                ,                        ,,,,,  ,.T.,.F.,.T.,_aTotal[010])
IVA        C 003 0 MontaXML("iva"                ,                        ,,,,,1 ,.T.,.F.,.T.)
TIdInf     C 015 0 MontaXML("TipoIDInformante"    ,"R"                    ,,,,,4 ,.T.,.T.,.T.)
NUMRUC     C 015 0 MontaXML("IdInformante"      ,SM0->M0_CGC            ,,,,,4 ,.T.,.T.,.T.)
RAZSOC     C 100 0 MontaXML("razonSocial"        ,GXMLCarEsp(SM0->M0_NOMECOM),,,,,4 ,.T.,.T.,.T.)
ANIO       C 004 0 MontaXML("Anio"               ,substr(dTOs(MV_PAR01),1,4)    ,,,,,4 ,.T.,.T.,.T.)
MES        C 002 0 MontaXML("Mes"                ,substr(dTOs(MV_PAR01),5,2)    ,,,,,4 ,.T.,.T.,.T.)
NUMESTRUC  C 015 0 MontaXML("numEstabRuc"          ,_atotal[30][2]            ,,,,,4 ,.T.,.T.,.T.)
TVentas    C 015 0 MontaXML("totalVentas"          ,STRTRAN(TRANSFORM(0 ,"@E 9999999999.99"),',','.')  ,,,,,4 ,.T.,.T.,.T.)
CodOpera   C 015 0 MontaXML("codigoOperativo"   ,"IVA"                    ,,,,,4 ,.T.,.T.,.T.)
Compras    C 000 0 MontaXML("compras"            ,                        ,,,,,4 ,.T.,.F.,.T.)
(POS)

[XXX Extraindo Livro fiscal Compras]
(PRE) _atotal[31] := LFeqXMLan1(DTOS(MV_PAR01),DTOS(MV_PAR02)) 

[TRA Geração do XML]
//(IMP) {.T.,1,1,"Compras"}
//(CMP) {{"CODSUST","Sustento"},{"IDPROV","Ident."},{"TPCOMPROV","Tipo Compr."},{"ESTABL","Estab."},{"PONTOVEND","Punto Venta"},{"SEQUEN","Secu."}}
//,{"Autoriz","Autoriz"},{"BasNoGRiva","Base IVA 0%"},{"BasImponib","Base IVA Dif 0%"},{"BasImpGrav","Base obj IVA"},{"ValIVA","Monto IVA"}}
(PRE) TRA->(dbGoTop())
(PREREG) _aTotal[024] := IIF(_aTotal[021], IIF(Alltrim(TRA->TPDOC) =='01' .AND. Alltrim(TRA->TPVENT) =='1' .AND. Alltrim(TRA->TIPOPE) =='41', 1,0),0)
(PREREG) _aTotal[012] := RetIR(TRA->FILIAL, TRA->CLIEFOR, TRA->LOJA, TRA->NFISCAL, TRA->SERIE)
(PREREG) _aTotal[022] := IIF(_aTotal[024] > 0 , obtTotReem(TRA->NFISCAL,TRA->SERIE, TRA->CLIEFOR, TRA->LOJA),{})
(PREREG) _aTotal[023] := IIF(_aTotal[024] > 0 , ObtReem (TRA->FILIAL, TRA->NFISCAL, TRA->SERIE, TRA->CLIEFOR, TRA->LOJA),{})
(PREREG) _aTotal[025] := IIf(_aTotal[024] > 0 .AND. LEN(_aTotal[023])>0,_aTotal[023][1], "" )

DetCompr   C 000 0 MontaXML("detalleCompras"     ,                        ,,,,,8 ,.T.,.F.,.T.)
CODSUST    C 002 0 MontaXML("codSustento"        ,TRA->CDSUSTEN            ,,,,,12,.T.,.T.,.T.)
TpIdProv   C 000 0 MontaXML("tpIdProv"           ,TRA->TPLDPROV            ,,,,,12,.T.,.T.,.T.)
IDPROV     C 013 0 MontaXML("idProv"             ,TRA->IDPROV              ,,,,,12,.T.,.T.,.T.)
TPCOMPROV  C 002 0 MontaXML("tipoComprobante"    ,TRA->TPCOMPRO            ,,,,,12,.T.,.T.,.T.)
TIPOPROV   C 002 0 IIf(TRA->TPLDPROV == "03", MontaXML("tipoProv"        ,TRA->TIPOPROV,,,,,12,.T.,.T.,.T.), "")
DENOPROV   C 002 0 IIf(TRA->TPLDPROV == "03", MontaXML("denoProv"        ,TRA->DENOPROV,,,,,12,.T.,.T.,.T.), "")
PARRELC    C 002 0 MontaXML("parteRel"            ,"NO"                    ,,,,,12,.T.,.T.,.T.)
dTReg      C 000 0 MontaXML("fechaRegistro"      ,DToC(TRA->DTFECH)         ,,,,,12,.T.,.T.,.T.)

ESTABL     C 003 0 MontaXML("establecimiento"    ,TRA->ESTABEL            ,,,,,12,.T.,.T.,.T.)
PONTOVEND  C 003 0 MontaXML("puntoEmision"        ,TRA->PTEMIS            ,,,,,12,.T.,.T.,.T.)
SEQUEN     C 009 0 MontaXML("secuencial"        ,TRA->SEQUENC            ,,,,,12,.T.,.T.,.T.)
DtEmis     C 000 0 MontaXML("fechaEmision"        ,TRA->DTEMISS             ,,,,,12,.T.,.T.,.T.)
Autoriz    C 000 0 MontaXML("autorizacion"        ,TRA->AUTORIZ            ,,,,,12,.T.,.T.,.T.)
BasNoGRiva C 000 0 MontaXML("baseNoGraIva"        ,STRTRAN(TRANSFORM(TRA->BASNOGRV ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BasImponib C 000 0 MontaXML("baseImponible"        ,STRTRAN(TRANSFORM(TRA->BASIMPON ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BasImpGrav C 000 0 MontaXML("baseImpGrav"        ,STRTRAN(TRANSFORM(TRA->BASIMPGR ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BasImpEx   C 000 0 MontaXML("baseImpExe"        ,STRTRAN(TRANSFORM(_aTotal[012][5] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValICE     C 000 0 MontaXML("montoIce"            ,STRTRAN(TRANSFORM(TRA->TOTALICE ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValIVA     C 000 0 MontaXML("montoIva"            ,STRTRAN(TRANSFORM(TRA->TOTALIVA ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRetB10  C 000 0 MontaXML("valRetBien10"        ,STRTRAN(TRANSFORM(_aTotal[012][2] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRetS20  C 000 0 MontaXML("valRetServ20"        ,STRTRAN(TRANSFORM(_aTotal[012][3] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValIvaBens C 000 0 MontaXML("valorRetBienes"    ,STRTRAN(TRANSFORM(_aTotal[012][6] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRetS20  C 000 0 MontaXML("valRetServ50"        ,STRTRAN(TRANSFORM(_aTotal[012][4],"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValIvaServ C 000 0 MontaXML("valorRetServicios"    ,STRTRAN(TRANSFORM(_aTotal[012][7] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRet100  C 000 0 MontaXML("valRetServ100"        ,STRTRAN(TRANSFORM(_aTotal[012][8],"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValReemb   C 000 0 MontaXML("totbasesImpReemb"    ,STRTRAN(TRANSFORM(IIF(LEN(_aTotal[022])>0,_aTotal[022][1][2],0 ),"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
PagExt     C 003 0 MontaXML("pagoExterior"        ,                        ,,,,,12 ,.T.,.F.,.T.)
PagoLocE   C 002 0 MontaXML("pagoLocExt"        ,TRA->PGOLOCEXT,        ,,,,16,.T.,.T.,.T.)
TipoRegi   C 002 0 IIf(TRA->PGOLOCEXT == "02", MontaXML("tipoRegi"        ,TRA->TPOREGFIS,,,,,16,.T.,.T.,.T.), "")
paising    C 002 0 IIf(TRA->PGOLOCEXT == "02" .And. TRA->TPOREGFIS == "01", MontaXML("paisEfecPagoGen"        ,TRA->PAISPGGEN,,,,,16,.T.,.T.,.T.), "")
paisparfis C 002 0 IIf(TRA->PGOLOCEXT == "02" .And. TRA->TPOREGFIS == "02", MontaXML("paisEfecPagoParFis"    ,TRA->PAISPFIS,,,,,16,.T.,.T.,.T.), "")
EPagoGen   C 002 0 IIf(TRA->PGOLOCEXT == "02", MontaXML("paisEfecPago"            ,TRA->PAISEFEPG    ,,,,,16,.T.,.T.,.T.), "")
Convenio   C 002 0 MontaXML("aplicConvDobTrib"    ,IIf(TRA->PGOLOCEXT == "01","NA",TRA->DOBTRIB),,,,,16,.T.,.T.,.T.)
EPagoPar   C 002 0 MontaXML("pagExtSujRetNorLeg",IIf(TRA->PGOLOCEXT == "01","NA",TRA->RETNORLEG),,,,,16,.T.,.T.,.T.)
PagExtF    C 000 0 MontaXML("pagoExterior"        ,                        ,,,,,12 ,.F.,.T.,.T.)
ForPag     C 000 0 MontaXML("formasDePago"        ,                        ,,,,,12 ,.T.,.F.,.T.)
PagoLocE   C 000 0 MontaXML("formaPago"            ,TRA->FORPAGO            ,,,,,16,.T.,.T.,.T.)
ForPagF    C 000 0 MontaXML("formasDePago"        ,                        ,,,,,12 ,.F.,.T.,.T.)
Air        C 000 0 _aTotal[012][1]
Reembol    C 000 0 _aTotal[025]
DetComprF  C 000 0 MontaXML("detalleCompras"        ,                    ,,,,,8 ,.F.,.T.,.T.)

[XXX - livro Fiscal Vendas]
ComprasF   C 000 0 MontaXML("compras"                ,                    ,,,,,4 ,.F.,.T.,.T.)
Vendas     C 000 0 MontaXML("ventas"                ,                    ,,,,,4 ,.T.,.F.,.T.)


[TRB Geração do XML]
(PRE) TRB->(dbGoTop())

DtVendas   C 000 0 MontaXML("detalleVentas"    ,                            ,,,,,8 ,.T.,.F.,.T.)
TpIdClie   C 000 0 MontaXML("tpIdCliente"    ,TRB->TIPDOC                ,,,,,12,.T.,.T.,.T.)
IdClien    C 000 0 MontaXML("idCliente"        ,TRB->CDCGC                    ,,,,,12,.T.,.T.,.T.)
PARRELV    C 000 0 IIF(TRB->TIPDOC $ "04|05|06", MontaXML("parteRelVtas","NO"                                ,,,,,12,.T.,.T.,.T.), "")
tipoCli    C 000 0 IIF(TRB->TIPDOC $ "06"    , MontaXML("tipoCliente"    ,TRB->TIPCLIE                        ,,,,,12,.T.,.T.,.T.), "")
denoCli    C 000 0 IIF(TRB->TIPDOC $ "06"    , MontaXML("denoCli"        ,GXMLCarEsp(TRB->DENOCLI)            ,,,,,12,.T.,.T.,.T.), "")
Tpcomprova C 000 0 MontaXML("tipoComprobante"    ,TRB->ESPECIE            ,,,,,12,.T.,.T.,.T.)
TEmision   C 000 0 MontaXML("tipoEmision"    ,"E"                        ,,,,,12,.T.,.T.,.T.)
NumComprov C 000 0 MontaXML("numeroComprobantes",cvaltochar(TRB->QTDNF)        ,,,,,12,.T.,.T.,.T.)
BS2NoGrIva C 000 0 MontaXML("baseNoGraIva"    ,STRTRAN(TRANSFORM(TRB->EXENTAS ,"@E 9999999999.99"),',','.')    ,,,,,12,.T.,.T.,.T.)
BS2Imponib C 000 0 MontaXML("baseImponible"    ,STRTRAN(TRANSFORM(TRB->ALQZERO ,"@E 9999999999.99"),',','.')    ,,,,,12,.T.,.T.,.T.)
BS2ImpGrav C 000 0 MontaXML("baseImpGrav"    ,STRTRAN(TRANSFORM(TRB->ALQNOZER,"@E 9999999999.99"),',','.')     ,,,,,12,.T.,.T.,.T.)
Vl2IVA     C 000 0 MontaXML("montoIva"        ,STRTRAN(TRANSFORM(TRB->VALIMP  ,"@E 9999999999.99"),',','.')     ,,,,,12,.T.,.T.,.T.)
MontoICE   C 000 0 MontaXML("montoIce"        ,STRTRAN(TRANSFORM(TRB->VALICE  ,"@E 9999999999.99"),',','.')    ,,,,,12,.T.,.T.,.T.)
Vl2RetIVA  C 000 0 MontaXML("valorRetIva"    ,STRTRAN(TRANSFORM(TRB->IVARET  ,"@E 9999999999.99"),',','.')     ,,,,,12,.T.,.T.,.T.)
Vl2RetRent C 000 0 MontaXML("valorRetRenta"    ,STRTRAN(TRANSFORM(TRB->VALIRR  ,"@E 9999999999.99"),',','.')     ,,,,,12,.T.,.T.,.T.)
ForPago    C 000 0 MontaXML("formasDePago"    ,                            ,,,,,12 ,.T.,.F.,.T.)
TEmision   C 000 0 MontaXML("formaPago"        ,TRB->FORPAGO                ,,,,,16,.T.,.T.,.T.)
ForPagoF   C 000 0 MontaXML("formasDePago"    ,                            ,,,,,12 ,.F.,.T.,.T.)
DtVendasF  C 000 0 MontaXML("detalleVentas"    ,                            ,,,,,8 ,.F.,.T.,.T.)

[XXX - livro Fiscal Ventas Establecimiento]
ComprasF   C 000 0 MontaXML("ventas"        ,                            ,,,,,4 ,.F.,.T.,.T.)
Vendas     C 000 0 MontaXML("ventasEstablecimiento"        ,                ,,,,,4 ,.T.,.F.,.T.)

[TRV Geração do XML]
(PRE) TRV->(dbGoTop())
VenEstab   C 000 0 MontaXML("ventaEst"        ,                            ,,,,,8 ,.T.,.F.,.T.)
CodEstab   C 000 0 MontaXML("codEstab"        ,TRV->CODEST                ,,,,,12,.T.,.T.,.T.)
VenEstab   C 000 0 MontaXML("ventasEstab"    ,STRTRAN(TRANSFORM(0 ,"@E 9999999999.99"),',','.')    ,,,,,12,.T.,.T.,.T.)
IvaComp    C 000 0 MontaXML("ivaComp"        ,STRTRAN(TRANSFORM(0 ,"@E 9999999999.99"),',','.')    ,,,,,12,.T.,.T.,.T.)
VenEstabF  C 000 0 MontaXML("ventaEst"        ,                            ,,,,,8 ,.F.,.T.,.T.)

[XXX Identificação do Exportaciones]
VendasF    C 000 0 MontaXML("ventasEstablecimiento"        ,                ,,,,,4 ,.F.,.T.,.T.)
Exporta    C 000 0 MontaXML("exportaciones"                ,                ,,,,,4 ,.T.,.F.,.T.)

[XXX Criacao do arquivo notas exportacion]
(PRE) _atotal[32] := LFeXMLaVEx(DTOS(MV_PAR01),DTOS(MV_PAR02)) 

[TEX Geração do XML]
(PRE) TEX->(dbGoTop())
(PREREG) _aTotal[33]    := IIf(TEX->TIPCLIE == '01', TEX->FCHREGCONT, TEX->COMPFCHEMI)

dtexporta  C 000 0 MontaXML("detalleExportaciones"    ,                ,,,,,8 ,.T.,.F.,.T.)
tpidcliext C 000 0 MontaXML("tpIdClienteEx"            ,TEX->TPIDCLIEXT,,,,,12,.T.,.T.,.T.)
idclienext C 000 0 MontaXML("idClienteEx"            ,TEX->IDCLIEXT    ,,,,,12,.T.,.T.,.T.)
ptrelac    C 000 0 MontaXML("parteRelExp"            ,TEX->PARTREL    ,,,,,12,.T.,.T.,.T.)
tipoclient C 000 0 IIf(TEX->TPIDCLIEXT == "21", MontaXML("tipoCli"            ,TEX->TIPCLIE    ,,,,,12,.T.,.T.,.T.), "")
denomexpor C 000 0 IIf(TEX->TPIDCLIEXT == "21", MontaXML("denoExpCli"        ,GXMLCarEsp(TEX->DENEXPCLI)    ,,,,,12,.T.,.T.,.T.), "")
tpregfsext C 000 0 MontaXML("tipoRegi"                ,TEX->TIPREGI    ,,,,,12,.T.,.T.,.T.)
paising    C 000 0 IIf(TEX->TIPREGI == "01", MontaXML("paisEfecPagoGen"        ,TEX->PEFEPAGGEN,,,,,12,.T.,.T.,.T.), "")
paisparfis C 000 0 IIf(TEX->TIPREGI == "02", MontaXML("paisEfecPagoParFis"    ,TEX->PPAGPARFIS,,,,,12,.T.,.T.,.T.), "")
denoregfis C 000 0 MontaXML("denopagoRegFis"        ,TEX->DENREGFIS    ,,,,,12,.T.,.T.,.T.)
paisexp    C 000 0 MontaXML("paisEfecExp"            ,TEX->PAISEFEEXP,,,,,12,.T.,.T.,.T.)
tipoexp    C 000 0 MontaXML("exportacionDe"            ,TEX->TPEXPING    ,,,,,12,.T.,.T.,.T.)
tipoingres C 000 0 IIf(TEX->TPEXPING == "03", MontaXML("tipIngExt"            ,TEX->TPINGEXT    ,,,,,12,.T.,.T.,.T.), "")
ingextgrav C 000 0 IIf(TEX->TPEXPING == "03", MontaXML("ingExtGravOtroPais"    ,TEX->INGEXTGAV    ,,,,,12,.T.,.T.,.T.), "")
valimpext  C 000 0 IIf(TEX->INGEXTGAV == 'SI', MontaXML("impuestoOtroPais"    ,STRTRAN(TRANSFORM(TEX->IMPOTROPA    ,"@E 999999999.99"),',','.'),,,,,12,.T.,.T.,.T.), "")
tipcompr   C 000 0 MontaXML("tipoComprobante"        ,TEX->TPCOMP    ,,,,,12,.T.,.T.,.T.)
distaduan  C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("distAduanero"        ,TEX->REFDISADUA,,,,,12,.T.,.T.,.T.), "")
refanio    C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("anio"                ,STR(YEAR(_aTotal[33])),,,,,12,.T.,.T.,.T.), "")
refregim   C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("regimen"            ,TEX->REFREGIME    ,,,,,12,.T.,.T.,.T.), "")
refcorrel  C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("correlativo"        ,TEX->REFCORREL1,,,,,12,.T.,.T.,.T.), "")
nodoctrans C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("docTransp"            ,TEX->DOCTRANSP    ,,,,,12,.T.,.T.,.T.), "")
fchregcont C 000 0 MontaXML("fechaEmbarque"            ,DToC(_aTotal[33]),,,,,12,.T.,.T.,.T.)
valfob     C 000 0 MontaXML("valorFOB"                ,STRTRAN(TRANSFORM(TEX->VALORFOB    ,"@E 9999999999.99"),',','.')    ,,,,,12,.T.,.T.,.T.)
valcompr   C 000 0 MontaXML("valorFOBComprobante"    ,STRTRAN(TRANSFORM(TEX->VLFOBCOMP    ,"@E 9999999999.99"),',','.')    ,,,,,12,.T.,.T.,.T.)
nsercomest C 000 0 MontaXML("establecimiento"        ,TEX->NOSERCOMPR,,,,,12,.T.,.T.,.T.)
nsercomemi C 000 0 MontaXML("puntoEmision"            ,TEX->PTOEMISION,,,,,12,.T.,.T.,.T.)
nseccompve C 000 0 MontaXML("secuencial"            ,TEX->COMPRSECU    ,,,,,12,.T.,.T.,.T.)
nautoriza  C 000 0 MontaXML("autorizacion"            ,TEX->COMPRAUTOR,,,,,12,.T.,.T.,.T.)
fchemision C 000 0 MontaXML("fechaEmision"            ,DToC(TEX->COMPFCHEMI)    ,,,,,12,.T.,.T.,.T.)
dtexportaF C 000 0 MontaXML("detalleExportaciones"    ,                ,,,,,8 ,.F.,.T.,.T.)

[XXX Identificação do Contribuinte]
ExportaF   C 000 0 MontaXML("exportaciones"            ,                ,,,,,4 ,.F.,.T.,.T.)
Anulados   C 000 0 MontaXML("anulados"                ,                ,,,,,4 ,.T.,.F.,.T.)

[XXX Criacao do arquivo notas canceladas]
(PRE) _atotal[34] := LFeqXMLcan(DTOS(MV_PAR01),DTOS(MV_PAR02)) 

[TRC Geração do XML]
(PRE) TRC->(dbGoTop())
Dtanulado  C 000 0 MontaXML("detalleAnulados"    ,                ,,,,,8 ,.T.,.F.,.T.)
tpcompro   C 000 0 MontaXML("tipoComprobante"    ,TRC->TIPDOC    ,,,,,12,.T.,.T.,.T.)
estabelec  C 000 0 MontaXML("establecimiento"    ,TRC->ESTAB        ,,,,,12,.T.,.T.,.T.)
ptemissao  C 000 0 MontaXML("puntoEmision"        ,TRC->PTEMIS    ,,,,,12,.T.,.T.,.T.)
sequenIni  C 000 0 MontaXML("secuencialInicio"  ,TRC->SEQINI    ,,,,,12,.T.,.T.,.T.)
sequenfin  C 000 0 MontaXML("secuencialFin"        ,TRC->SEQFIM    ,,,,,12,.T.,.T.,.T.)
autoriz    C 000 0 MontaXML("autorizacion"        ,TRC->AUTORIZ    ,,,,,12,.T.,.T.,.T.)
Dtanuladof C 000 0 MontaXML("detalleAnulados"    ,                ,,,,,8 ,.F.,.T.,.T.)

[XXX Finalização]
AnuladosF  C 000 0 MontaXML("anulados"            ,                ,,,,,4 ,.F.,.T.,.T.)
IVAF       C 000 0 MontaXML("iva"                ,                ,,,,,4 ,.F.,.T.,.T.)

[XXX - Nome do Arquivo]
(ARQ) &('_aTotal[7]')


¡IMPORTANTE!

La presente funcional aplica para versión 12.1.33 o superior, y es necesario tener activa la funcionalidad de transmisión electrónica para el país Ecuador con el Proveedor Tecnológico denominado Stupendo.


05. ASUNTOS RELACIONADOS

  • Documento Técnico de Facturación Electrónica - Ecuador - Stupendo
  • Documento Técnico de Anexo Transaccional Simplificado (ATS) - Ecuador
  • Documento Técnico para Nodo de Exportación en ATS - Ecuador