01. DATOS GENERALES
Producto | TOTVS Backoffice | ||||||
---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||||
Segmento: | Backoffice | ||||||
Módulo: | SIGAFAT - Facturación | ||||||
Función: |
| ||||||
País: | México | ||||||
Ticket: | 16350719 | ||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-18777 |
02. SITUACIÓN/REQUISITO
Se solicita la activación de un Punto de Entrada, que permita personalizar el detalle del XML de CFDI de Documentos Fiscales, para la generación del Nodo de Conceptos con sus respectivos Impuestos, y el acumulado de Impuestos por Documento (nodo cfdi:Comprobante\cfdi:Impuestos).
03. SOLUCIÓN
En la rutina Funciones Genéricas de Notas Fiscales (LOCXFUNA):
- Se activó el Punto de Entrada PEXMLDETA, el cual permite alterar la generación de los Conceptos, Impuestos (Traslados y Retenciones) por Concepto e Impuestos Totales (Traslados y Retenciones) por Documento.
Para el Punto Entrada PEXMLDETA, se deben tener en cuenta las siguientes consideraciones:
Se debe retornar un arreglo con 2 posiciones, donde:
La Primer posición debe contener la siguiente estructura:
Posición 1: Valor que corresponde al atributo ClaveProdServ del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 2: Valor que corresponde al atributo NoIdentificacion del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 3: Valor que corresponde al atributo Cantidad del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 4: Valor que corresponde al atributo ClaveUnidad del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 5: Valor que corresponde al atributo Unidad del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 6: Valor que corresponde al atributo Descripcion del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 7: Valor que corresponde al atributo ValorUnitario del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 8: Valor que corresponde al atributo Importe del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 9: Valor que corresponde al atributo Descuento del nodo cfdi:Conceptos\cfdi:Concepto.
Posición 10: Array con valores de Impuestos de Traslado por ítem, donde:
Posición Impuestos 1: Código de impuesto Protheus.
Posición Impuestos 2: Indica si el impuesto de un Impuesto o Traslado Local (Exclusivo para funcionalidad del Complemento de Impuestos Locales, se recomienda enviar vacío si no aplica)
Posición Impuestos 3: Base del Impuesto por ítem.
Posición Impuestos 4: Código de Impuesto SAT, de acuerdo al catálogo c_Impuesto definido por el SAT.
Posición Impuestos 5: Alícuota del Impuesto por ítem.
Posición Impuestos 6: Valor del Impuesto por ítem.
Posición Impuestos 7: Descripción del impuesto (Puede ser la descripción del impuesto de Protheus)
Posición Impuestos 8: T para Traslados y R para retenciones.
Posición Impuestos 9: Enviar 0.
Posición Impuestos 10: Enviar 0.
Posición Impuestos 11: Indica si es impuesto incluido (.T. es igual a Si y .F. igual a No)
Posición 11: Enviar con valor Nil.
Posición 12: Enviar con valor Nil.
Posición 13: Valor que corresponde al atributo NumeroPedimento del nodo cfdi:InformacionAduanera.
Posición 14: Valor que corresponde al atributo Numero del nodo cfdi:CuentaPredial.
Posición 15: Arreglo con datos para la generación del nodo cfdi:Parte, donde:
Posición Partes 1: Valor del atributo ClaveProdServ.
Posición Partes 2: Valor del atributo NoIdentificacion.
Posición Partes 3: Valor del atributo Cantidad.
Posición Partes 4: Valor del atributo Unidad.
Posición Partes 5: Valor del atributo Descripcion.
Posición Partes 6: Valor del atributo ValorUnitario.
Posición 16: .T. si el ítem es Exento de Impuestos.
Posición 17: .Número de ítem, por ejemplo "01", "02".
La Segunda posición debe contener la siguiente estructura:
Posición 1: Campo de Libro Fiscal del Impuesto (No aplica para funcionalidad de Punto de Entrada, se puede enviar con un string vacío)
Posición 2: Enviar con un string vacío.
Posición 3: Valor del Impuesto.
Posición 4: Código del Impuesto (Puede enviarse con el código del Impuesto variable de Protheus o un string vacío).
Posición 5: Código de Impuesto SAT, de acuerdo al catálogo c_Impuesto definido por el SAT.
Posición 6: Descripción del Impuesto (Puede enviarse con el código del Impuesto variable de Protheus o un string vacío).
Posición 7: T para Traslados y R para retenciones.
Posición 8: Alícuota que aplica para el cálculo del impuesto (mostrado alícuota sobre cien, por ejemplo 0.16).
Posición 9: Indica si el impuesto es incluido (.T. es igual a Si y .F. igual a No).
Posición 10: Base del Impuesto.
- Realizar un respaldo de repositorio del ambiente (archivo .rpo).
- Aplicar el parche que fue generado para la issue DMINA-18777.
- Compilar el Punto de Entrada a utilizar
Importante
Al compilar el Punto de Entrada a utilizar se recomienda bifurcar correctamente el documento a alterar, ya que el no realizarlo de manera correcta podría ocasionar problemas de transmisión que no se presenten en la funcionalidad estándar el sistema, y los importes de los conceptos en conjunto con los impuestos por Concepto debe cuadrar con el Subtotal y Total del XML.
- En el módulo Facturación (SIGAFAT) desde el menú Actualización | Facturación | Facturaciones (MATA467N) o vía ExecAuto, incluir una Factura de Venta.
- En el Browse de Facturaciones (MATA467N), seleccionar la Factura de Venta y ejecutar la acción
- Validar el timbrado exitoso del CFDI de la Factura de Venta.
- Validar que la información corresponde con la personalización de acuerdo al Punto de Entrada.
04. INFORMACIÓN ADICIONAL
Ejemplo del Punto de Entrada PEXMLDETA:
En el siguiente ejemplo, se llenan los arreglos para generar dos nodos de Conceptos con sus respectivos impuestos de IVA por Concepto, así como el acumulado del impuesto IVA a una tasa de 16.00.
User Function PEXMLDETA() Local aDetFE := {} Local aImpos := {} Local aImpNF := {} Local aIFact := {} //Ítem 01 aImpNF := {"IVA", "", 2000, "002", 16, 320, "IVA ESTADAR", "T",0,0,.F. } //Impuestos del Ítem 01 aAdd(aDetFE, {"01010101","OXXO-3526518", 1,"CLT","UN","VENTE OXXO-3526518",2000,2000,0,aAdd(aImpos,{aImpNF}),Nil,Nil,"", "", Nil,.F.,"01"}) //Ítem 02 aImpNF := {"IVA", "", 2000, "002", 16, 320, "IVA ESTADAR", "T",0,0,.F. } //Impuestos del Ítem 02 aAdd(aDetFE, {"01010101","OXXO-3526519", 1,"CLT","UN","VENTE OXXO-3526519",2000,2000,0,aAdd(aImpos,{aImpNF}),Nil,Nil,"", "", Nil,.F.,"02"}) //Total de Impuestos del Documento (Acumulado por Impuesto y Alícuota) aAdd(aIFact,{"1", "", 640, "IVA", "002", "IVA ESTADAR", "T", (16/100),.F.,4000}) Return {aDetFE,aIFact}
Catálogo de Impuestos SAT
La presente solución aplica para versión 12.1.33 o superior, y es responsabilidad del usuario la personalización del XML del CFDI y el impacto en que pudiera tener el no realizar la correcta definición de la lógica en el Punto de Entrada.¡IMPORTANTE!