Saltar al contenido principal

Formato de Campos DE v150 — SIFEN Paraguay

Fuente: Manual Técnico SIFEN v150, páginas 62-112 (schema siRecepDE_v150.xsd / DE_v150.xsd). Generado: 2026-03-11 — combinación de extracción de PDF + auditoría de código OnnixConnect.

Convenciones de columnas:

  • ID: Identificador del campo para referencia interna SIFEN
  • Tag XML: Nombre exacto del elemento en el árbol DOM (confirmado contra XSD v150 y validador SIFEN)
  • Tipo: A=Alfanumérico, N=Numérico, F=Fecha, G=Grupo
  • Long.: Longitud mínima-máxima; p(n) = hasta n decimales
  • Ocu.: Ocurrencia m-n; 1-1=Obligatorio, 0-1=Opcional, 1-n=Múltiple obligatorio
  • Obs.: Observaciones técnicas críticas para validación xs:sequence

Estructura raíz del rDE (Sobre de Recepción)

rDE (xmlns=http://ekuatia.set.gov.py/sifen/xsd)
├── dVerFor ← AA002
├── DE [Id={CDC44}] ← A001 (nodo firmado)
│ ├── dDVId ← A003
│ ├── dFecFirma ← A004
│ ├── dSisFact ← B (sistema facturación)
│ ├── gOpeDE ← B001
│ ├── gTimb ← C001
│ ├── gDatGralOpe ← D001
│ │ ├── dFeEmiDE
│ │ ├── gOpeCom ← D010
│ │ ├── gEmis ← D100
│ │ └── gDatRec ← D200
│ ├── gDtipDE ← E001
│ │ ├── gCamFE ← E010
│ │ ├── gCamCond ← E600
│ │ │ └── gPaConEIni ← E605 (si contado)
│ │ └── gCamItem[] ← E700
│ │ ├── gValorItem ← E720
│ │ │ └── gValorRestaItem ← EA001
│ │ └── gCamIVA ← E730
│ ├── gTotSub ← F001
│ ├── gCamGen ← G001 (siempre presente, puede ser vacío)
│ └── gCamFuFD ← J001
│ └── dCarQR ← J002
└── Signature ← I001 (xmlns=http://www.w3.org/2000/09/xmldsig#)

AA. Campos que identifican el formato XML

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
AA001rDESobre de recepción del Documento ElectrónicoRaízG1-1Elemento raíz con xmlns SIFEN + xmlns:xsi
AA002dVerForVersión del formatorDEN31-1Siempre "150" — primer hijo de rDE

A. Campos firmados del Documento Electrónico

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
A001DECampos firmados del DErDEG1-1Atributo Id={CDC44} — registrar con setIdAttributeNode() para XMLDSig
A002(atributo Id)Identificador del DE (CDC)DEA441-144 dígitos exactos — ver §CDC
A003dDVIdDígito verificador del CDCDEN11-1Módulo 11 — posición 44 del CDC (índice 43)
A004dFecFirmaFecha y hora de la firmaDEF191-1Formato YYYY-MM-DDThh:mm:ss — vigencia del certificado
dSisFactSistema de facturaciónDEN11-11=Sistema del contribuyente; se emite justo antes de gOpeDE

B. Campos inherentes a la operación del DE

Nodo padre lógico: A001. Mapeados en gOpeDE.

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
B001gOpeDEGrupo operación del DEDEG1-1Primer grupo hijo de DE
B002iTipEmiTipo de emisióngOpeDEN11-11=Normal, 2=Contingencia — extraído de CDC[33]
B003dDesTipEmiDescripción tipo emisióngOpeDEA6-121-1"Normal" o "Contingencia"
B004dCodSegCódigo de seguridadgOpeDEN91-19 dígitos — extraído de CDC[34-42]
B005dInfoEmiInformación de interés del emisorgOpeDEA1-30000-1CDATA recomendado si contiene caracteres especiales
B006dInfoFiscoInformación de interés del FiscogOpeDEA1-30000-1Obligatorio para Nota de Remisión (C002=7). CDATA

C. Campos del Timbrado

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
C001gTimbDatos del timbradoDEG1-1Segundo grupo hijo de DE
C002iTiDETipo de Documento ElectrónicogTimbN1-21-11=FE, 2=FEE, 3=FEI, 4=AFE, 5=NCE, 6=NDE, 7=NRE
C003dDesTiDEDescripción tipo documentogTimbA15-401-1Texto fijo según C002
C004dNumTimNúmero del timbrado DNITgTimbN81-1Desde emitter.config['timbrado']
C005dEstEstablecimientogTimbA31-1Pad '0' izq. — CDC[11-13]
C006dPunExpPunto de expedicióngTimbA31-1Pad '0' izq. — CDC[14-16]
C007dNumDocNúmero del documentogTimbA71-1Pad '0' izq. — CDC[17-23]
C010dSerieSerie del timbradogTimbA20-1Opcional — reinicio de numeración
C008dFeIniTFecha inicio vigencia timbradogTimbF101-1Formato YYYY-MM-DD — desde emitter.config
C009dFFinTFecha fin vigencia timbradogTimbF100-1No requerida por XSD v150

D. Campos Generales de la Operación

D0. Fecha de emisión

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
D001gDatGralOpeDatos generales de la operaciónDEG1-1Tercer grupo hijo de DE
dFeEmiDEFecha y hora emisión del DEgDatGralOpeF191-1Formato YYYY-MM-DDThh:mm:ss

D1. Campos de la operación comercial (gOpeCom)

Orden xs:sequence CRÍTICO — el validador SIFEN rechaza cualquier transposición.

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
D010gOpeComCampos de la operación comercialgDatGralOpeG0-1Obligatorio si C002 ≠ 7
D011iTipTraTipo de transaccióngOpeComN1-20-11=Mercadería, 2=Servicios, …, 13=Muestras médicas
D012dDesTipTraDescripción tipo transaccióngOpeComA5-360-1Texto referente a D011
D013iTImpTipo de impuestogOpeComN11-11=IVA (posición 3 en xs:sequence)
D014dDesTImpDescripción impuestogOpeComA3-111-1"IVA", "ISC", etc.
D015cMoneOpeMoneda de la operacióngOpeComA31-1ISO 4217 — "PYG" para guaraníes. Posición 5 en xs:sequence
D016dDesMoneOpeDescripción monedagOpeComA3-201-1"Guaraní", "Dólar", etc.
D017iCondTipCamCondición tipo de cambiogOpeComN10-1Solo si D015 ≠ PYG. 1=Global, 2=Por ítem
D018dTIPCamTipo de cambiogOpeComN1-5p(0-4)0-1Solo si D017=1
iTiOpeTipo de operacióngOpeComN11-11=B2B, 2=B2C, 3=B2G, 4=B2F — después de cMoneOpe
dDesTiOpeDescripción tipo operacióngOpeComA3-301-1Texto referente a iTiOpe
iNatRecNaturaleza receptorgOpeComN11-11=Contribuyente, 2=No Contribuyente
iCondOpeCondición operacióngOpeComN11-11=Contado, 2=Crédito
D019iCondAntiCondición anticipogOpeComN10-11=Global, 2=Por ítem
D020dDesCondAntiDescripción condición anticipogOpeComA15-170-1Referente a D019

D2. Campos del Emisor (gEmis)

Orden xs:sequence confirmado: dRucEm → dDVEmi → iTipCont → dNomEmi → dNomFanEmi → gActEco → gDirEmi

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
D100gEmisGrupo datos del emisorgDatGralOpeG1-1
D101dRucEmRUC emisor (sin DV)gEmisA3-81-1Solo parte numérica
D102dDVEmiDV del RUC emisorgEmisN11-1Módulo 11
D103iTipContTipo contribuyentegEmisN11-11=Física, 2=Jurídica — CDC[24]
D105dNomEmiNombre/Razón social emisorgEmisA4-2551-1En pruebas: literal específico SET
D106dNomFanEmiNombre fantasía emisorgEmisA4-2550-1xs:sequence lo ubica ANTES de gActEco. Si es null → usar razon_social como fallback
D130gActEcoGrupo actividad económicagEmisG1-9Al menos una actividad obligatoria
D131cActEcoCódigo actividad económicagActEcoA1-81-1Tabla DNIT capítulo 16
D132dDesActEcoDescripción actividadgActEcoA1-3001-1CDATA si contiene caracteres especiales
gDirEmiGrupo dirección emisorgEmisG1-1Siempre requerido
D107dDirEmiDirección emisorgDirEmiA1-2551-1Nombre calle principal
D108dNumCasEmiNúmero de casa emisorgDirEmiN1-61-10 si no tiene
D109dCompl1EmiComplemento dirección 1gDirEmiA1-2550-1Calle secundaria
D110dCompl2EmiComplemento dirección 2gDirEmiA1-2550-1Número dpto/piso
D111cDepEmiCódigo departamento emisióngDirEmiN1-21-1Según XSD departamentos
D112dDesDepEmiDescripción departamentogDirEmiA6-161-1Referente D111
D113cDisEmiCódigo distrito emisióngDirEmiN1-40-1Según tabla distritos
D114dDesDisEmiDescripción distritogDirEmiA1-300-1Obligatorio si D113 existe
D115cCiuEmiCódigo ciudad emisióngDirEmiN1-51-1Según tabla ciudades
D116dDesCiuEmiDescripción ciudadgDirEmiA1-301-1Referente D115
D117dTelEmiTeléfono emisorgDirEmiA6-150-1Con prefijo de ciudad
D118dEmailEmiCorreo electrónico emisorgDirEmiA3-800-1
D119dDenSucDenominación sucursalgDirEmiA1-300-1

D2.2 Responsable generación DE (gRespDE)

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
D140gRespDEGrupo responsable generacióngEmisG0-1Opcional
D141iTipIDRespDETipo ID responsablegRespDEN11-11=Cédula PY, 2=Pasaporte…
D142dDTipIDRespDEDescripción tipo IDgRespDEA9-411-1Referente D141
D143dNumIDRespDENúmero ID responsablegRespDEA1-201-1
D144dNomRespDENombre responsablegRespDEA4-2551-1
D145dCargoRespDECargo responsablegRespDEA4-1001-1

D3. Campos del Receptor (gDatRec)

Orden xs:sequence CRÍTICO: iNatRec → iTiOpe → cPaisRec → dDesPaisRec → [datos RUC o ID] → dNomRec

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
D200gDatRecGrupo datos del receptorgDatGralOpeG1-1
D201iNatRecNaturaleza receptorgDatRecN11-11=Contribuyente, 2=No Contribuyente
D202iTiOpeTipo de operacióngDatRecN11-11=B2B, 2=B2C, 3=B2G, 4=B2F
D203cPaisRecCódigo país receptorgDatRecA31-1"PRY" para Paraguay — xs:sequence lo ubica ANTES de datos RUC/ID
D204dDesPaisRecDescripción país receptorgDatRecA4-301-1"Paraguay"
D205iTiContRecTipo contribuyente receptorgDatRecN10-1Obligatorio si D201=1
D206dRucRecRUC receptorgDatRecA3-80-1Obligatorio si D201=1 — solo parte sin DV
D207dDVRecDV RUC receptorgDatRecN10-1Módulo 11 — obligatorio si D206 existe
D208iTipDocRecTipo ID receptorgDatRecN10-1Obligatorio si D201=2 y D202≠4
D209dDTipDocRecDescripción tipo IDgDatRecA9-410-1Referente D208
D210dNumIDRecNúmero ID receptorgDatRecA1-200-1Obligatorio si D201=2
D211dNomRecNombre/Razón social receptorgDatRecA4-2551-1Innominado: "Sin Nombre"
D212dNomFantRecNombre fantasía receptorgDatRecA4-2550-1
D213dDirRecDirección receptorgDatRecA1-2550-1Obligatorio si C002=7 o D202=4
D218dNumCasRecNúmero casa receptorgDatRecN1-60-1Obligatorio si D213 existe
D219cDepRecCódigo departamento receptorgDatRecN1-20-1
D220dDesDepRecDescripción departamentogDatRecA6-160-1
D221cDisRecCódigo distrito receptorgDatRecN1-40-1
D222dDesDisRecDescripción distritogDatRecA1-300-1
D223cCiuRecCódigo ciudad receptorgDatRecN1-50-1
D224dDesCiuRecDescripción ciudadgDatRecA1-300-1
D214dTelRecTeléfono receptorgDatRecA6-150-1
D215dCelRecCelular receptorgDatRecA10-200-1
D216dEmailRecCorreo electrónico receptorgDatRecA3-800-1
D217dCodClienteCódigo clientegDatRecA3-150-1

E. Campos Específicos por Tipo de Documento

E1. Factura Electrónica — gCamFE

Orden xs:sequence: iIndPres → dDesIndPres → dFecEmNR → iNatRec → iCondOpe → dDesCondOpe

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
E010gCamFECampos Factura ElectrónicagDtipDEG0-1Obligatorio si C002=1
E011iIndPresIndicador de presenciagCamFEN11-1Primer hijo de gCamFE. 1=Presencial, 2=Electrónica…
E012dDesIndPresDescripción indicador presenciagCamFEA10-301-1Texto referente a E011
dFecEmNRFecha emisión vinculadagCamFEF100-1YYYY-MM-DD — requerida por xs:sequence v150
iNatRecNaturaleza receptorgCamFEN11-11=Contribuyente, 2=No Contribuyente
iCondOpeCondición de la operacióngCamFEN11-11=Contado, 2=Crédito
dDesCondOpeDescripción condicióngCamFEA71-1"Contado" o "Crédito"

E7. Condición de la operación — gCamCond

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
E600gCamCondCampos condición de la operacióngDtipDEG0-1Obligatorio si C002=1 o 4
E601iCondOpeCondición de la operacióngCamCondN11-11=Contado, 2=Crédito
E602dDCondOpeDescripción condicióngCamCondA71-1"Contado" (7 chars) o "Crédito" (7 chars)

E7.1 Forma de pago contado — gPaConEIni

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
E605gPaConEIniCampos forma de pago contadogCamCondG0-999Obligatorio si E601=1. Al menos un elemento
E606iTiPagoTipo de pagogPaConEIniN1-21-11=Efectivo, 2=Cheque, 3=TC, 4=TD…
E607dDesTiPagDescripción tipo pagogPaConEIniA4-301-1Texto referente a E606
E608dMonTiPagMonto del tipo de pagogPaConEIniN1-15p(0-4)1-1Monto en la moneda de E609
E609cMoneTiPagMoneda del tipo de pagogPaConEIniA31-1"PYG" — ISO 4217. Anteriormente erróneo: cMonedasPago
E610dDesMoneTPagDescripción monedagPaConEIniA3-200-1Referente a E609
E611dTiCamTPagTipo de cambiogPaConEIniN1-5p(0-4)0-1Solo si E609 ≠ PYG

E7.2 Operación a crédito — gPagCred

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
E640gPagCredCampos operación a créditogCamCondG0-1Obligatorio si E601=2
E641iCondCredCondición créditogPagCredN11-11=Plazo, 2=Cuota
E642dDCondCredDescripción condición créditogPagCredA5-61-1Referente E641
E643dPlazoCrePlazo del créditogPagCredA2-150-1Obligatorio si E641=1
E644dCuotasCantidad de cuotasgPagCredN1-30-1Obligatorio si E641=2
E645dMonEntMonto entrega inicialgPagCredN1-15p(0-4)0-1

E8. Ítems de la factura — gCamItem

Estructura: gCamItem (1-999) > gValorItem > gValorRestaItem

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
E700gCamItemCampos del ítemgDtipDEG1-999Un nodo por ítem
E701dCodIntCódigo interno producto/serviciogCamItemA1-201-1Identificador en sistema del emisor
E702dParArancPartida arancelariagCamItemN40-1
E703dNCMNomenclatura Común MercosurgCamItemN6-80-1
E704dCodDNCPCódigo DNCP generalgCamItemA80-1Obligatorio si D202=3 (B2G)
E705dDConDNCPCódigo DNCP específicogCamItemA3-40-1Obligatorio si E704 existe
E706dCodGtinCódigo GTIN productogCamItemN8,12,13,140-1
E707dCodGtinEnvCódigo GTIN envasegCamItemN8,12,13,140-1
E708dDesProSerDescripción producto/serviciogCamItemA1-1201-1Max 120 chars — truncar si necesario
E709cUniMedCódigo unidad de medidagCamItemN1-51-1Tabla SIFEN cap. 16. 77=UNI
E710dDesUniMedDescripción unidad de medidagCamItemA1-101-1"UNI", "KG", "LT"…
E711dCantProSerCantidadgCamItemN1-10p(0-4)1-1Hasta 4 decimales
E712cPaisOrigCódigo país origengCamItemA30-1ISO 3166-1 alfa-3
E713dDesPaisOrigDescripción país origengCamItemA4-300-1Obligatorio si E712 existe
E714dInfItemInformación del ítemgCamItemA1-5000-1CDATA si contiene <>&"
E719dCDCAnticipoCDC del anticipogCamItemA440-1Solo si D011=9

E8.1 Precio y valor total del ítem — gValorItem

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
E720gValorItemCampos precio y valor del ítemgCamItemG0-1Obligatorio si C002 ≠ 7. Wrapper requerido
E721dPUniProSerPrecio unitario (IVA incluido)gValorItemN1-15p(0-8)1-1
E725dTiCamItTipo de cambio del ítemgValorItemN1-5p(0-4)0-1Solo si D015 ≠ PYG y D017=2
E727dTotBruOpeItemTotal bruto del ítemgValorItemN1-15p(0-8)1-1E721 × E711
EA001gValorRestaItemCampos descuentos y valor neto ítemgValorItemG1-1Siempre requerido por xs:sequence v150
EA002dDescItemDescuento particular unitariogValorRestaItemN1-15p(0-8)0-10 si no hay descuento
EA003dPorcDesItPorcentaje descuento particulargValorRestaItemN1-3p(0-8)0-1Obligatorio si EA002 > 0
EA004dDescGloItemDescuento global unitariogValorRestaItemN1-15p(0-8)0-1
EA006dAntPreUniItAnticipo particular unitariogValorRestaItemN1-15p(0-8)0-1
EA007dAntGloPreUniItAnticipo global unitariogValorRestaItemN1-15p(0-8)0-1
EA008dTotOpeItemValor total neto del ítemgValorRestaItemN1-15p(0-8)1-1Bruto − descuentos
EA009dTotOpeItemGsValor total en guaraníesgValorRestaItemN1-15p(0-8)0-1Obligatorio si E725 existe
dTotOpeGsTotal en guaraníes del ítemgValorItemN1-15p(0-8)1-1Entero sin decimales para PYG

E8.2 IVA del ítem — gCamIVA

Orden xs:sequence CRÍTICO: iAfecIVA → dDesAfecIVA → dPropIVA → dTasaIVA → dBasGravIVA → dLiqIVAItem → dBasExe

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
E730gCamIVACampos IVA del ítemgCamItemG0-1
E731iAfecIVAForma de afectación IVAgCamIVAN11-11=Gravado, 2=Exonerado, 3=Exento, 4=Gravado parcial
E732dDesAfecIVADescripción afectación IVAgCamIVAA6-151-1Texto referente a E731
E733dPropIVAProporción gravada IVAgCamIVAN1-3p(0-8)1-10-100; "100" si totalmente gravado
E734dTasaIVATasa IVAgCamIVAN1-21-10, 5 o 10
E735dBasGravIVABase gravada del ítemgCamIVAN1-15p(0-8)1-1total_linea / (1 + tasa/100)
E736dLiqIVAItemLiquidación IVA del ítemgCamIVAN1-15p(0-8)1-1dBasGravIVA × (tasa/100)
E737dBasExeBase exenta del ítemgCamIVAN1-15p(0-8)1-1Último campo de gCamIVA. 0 si gravado, total_linea si exento (iAfecIVA=3)

F. Subtotales y Totales — gTotSub

Todos los montos en PYG deben ser enteros sin decimales (number_format($v, 0, '.', '')).

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
F001gTotSubSubtotales y totalesDEG0-1Obligatorio si C002 ≠ 7
F002dTotExeSubtotal exentogTotSubN1-15p(0-8)0-1Suma EA008 exentos
F003dTotExaSubtotal exoneradogTotSubN1-15p(0-8)0-1Suma EA008 exonerados
F004dTotGravIVA5Subtotal gravado IVA 5%gTotSubN1-15p(0-8)0-1Suma EA008 tasa 5%
F005dTotGravIVA10Subtotal gravado IVA 10%gTotSubN1-15p(0-8)0-1Suma EA008 tasa 10%
F008dTotOpeTotal bruto de la operacióngTotSubN1-15p(0-8)1-1Suma de todos los subtotales brutos
F009dTotDescTotal descuentos particularesgTotSubN1-15p(0-8)1-1Suma EA002
F033dTotDescGlotemTotal descuentos globales ítemgTotSubN1-15p(0-8)1-1Suma EA004
F034dTotAntItemTotal anticipo ítemgTotSubN1-15p(0-8)1-1Suma EA006
F035dTotAntTotal anticipo global ítemgTotSubN1-15p(0-8)1-1Suma EA007
F010dPorcDescTotalPorcentaje descuento globalgTotSubN1-3p(0-8)1-1Informativo
F011dDescTotalTotal descuentos operacióngTotSubN1-15p(0-8)1-1Suma global descuentos
F012dAnticipoTotal anticipos operacióngTotSubN1-15p(0-8)1-1Suma anticipos
F013dRedonRedondeo operacióngTotSubN1-3p(0-4)1-1Reglas SEDECO — múltiplos de 50 Gs
F025dComisComisión de la operacióngTotSubN1-15p(0-8)0-1
F014dTotGralOpeTotal neto de la operacióngTotSubN1-15p(0-8)1-1Bruto − descuentos + comisiones
F026dIVAComiIVA de la comisióngTotSubN1-15p(0-8)0-1xs:sequence v150 lo ubica ANTES de dLiqTotIVA10. 0 en facturas normales
F016dLiqTotIVA10Liquidación total IVA 10%gTotSubN1-15p(0-8)0-1Suma E736 tasa 10%
F015dLiqTotIVA5Liquidación total IVA 5%gTotSubN1-15p(0-8)0-1Suma E736 tasa 5%
F017dTotIVATotal IVAgTotSubN1-15p(0-8)0-1dLiqTotIVA10 + dLiqTotIVA5
F019dBaseGrav10Base gravada IVA 10%gTotSubN1-15p(0-8)0-1Suma E735 tasa 10%
F018dBaseGrav5Base gravada IVA 5%gTotSubN1-15p(0-8)0-1Suma E735 tasa 5%
F020dTotalbaseIVATotal base gravada IVAgTotSubN1-15p(0-8)0-1dBaseGrav10 + dBaseGrav5
F023dTotOpeGsTotal operación en guaraníesgTotSubN1-15p(0-8)0-1Si D015 ≠ PYG
F024dTotOpeMExtTotal operación en moneda ext.gTotSubN1-15p(0-8)0-1

G. Campos Complementarios Comerciales — gCamGen

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
G001gCamGenCampos de uso generalDEG0-1Siempre debe estar presente en xs:sequence v150, aunque vacío
G002dOrdCompraNúmero de orden de compragCamGenA1-150-1
G003dOrdVentaNúmero de orden de ventagCamGenA1-150-1
G004dAsientoNúmero de asiento contablegCamGenA1-100-1

H. Documentos Asociados — gCamDEAsoc

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
H001gCamDEAsocCampos DE asociadoDEG0-99CONDICIONAL — entre gCamGen y gCamFuFD cuando aplica. Obligatorio si C002=4,5,6
H002iTipDocAsoTipo documento asociadogCamDEAsocN11-11=Electrónico, 2=Impreso, 3=Constancia
H003dDesTipDocAsoDescripción tipo documentogCamDEAsocA7-111-1Referente H002
H004dCdCDECDC del DTE referenciadogCamDEAsocA440-1Obligatorio si H002=1
H005dNumTimDINúmero timbrado impresogCamDEAsocN80-1Obligatorio si H002=2
H006dEstDIEstablecimientogCamDEAsocA30-1
H007dPExpDIPunto expedicióngCamDEAsocA30-1
H008dNumDocDINúmero documentogCamDEAsocA70-1
H009iTipoDocDITipo documento impresogCamDEAsocN10-1
H010dDesTipoDocDIDescripción tipo documentogCamDEAsocA7-160-1
H011dFecEmiDIFecha emisión documento impresogCamDEAsocF100-1YYYY-MM-DD
H012dNumComRetNúmero comprobante retencióngCamDEAsocA150-1Si E606=10
H013dNumRCDFNúmero resolución crédito fiscalgCamDEAsocA150-1Obligatorio si D011=12
H014iTipConstTipo constanciagCamDEAsocN10-1
H015dDesTipConstDescripción tipo constanciagCamDEAsocA30-340-1
H016dNumConstNúmero constanciagCamDEAsocN110-1
H017dNumControlNúmero control constanciagCamDEAsocA80-1

I. Firma Digital — Signature

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
I001SignatureFirma Digital XMLDSigrDEG1-1xmlns="http://www.w3.org/2000/09/xmldsig#" — hijo directo de rDE, después de DE

J. Campos Fuera de la Firma — gCamFuFD

IDTag XMLDescripciónNodo PadreTipoLong.Ocu.Obs.
J001gCamFuFDCampos fuera de la firma digitalDEG1-1Último hijo de DE. Su contenido NO forma parte del DigestValue
J002dCarQRCaracteres del código QRgCamFuFDA100-6001-1URL del QR — se inyecta POST-firma. Usar <dCarQR></dCarQR> (NO auto-cerrado />)
J003dInfAdInformación adicionalgCamFuFDA1-50000-1Interés exclusivo del emisor

§CDC — Código de Control del Documento (44 dígitos)

El CDC es el identificador único del DE ante la DNIT. Se construye concatenando:

[01-02] iTiDE 2 dígitos Tipo documento (pad '0' izq.)
[03-10] dRucEm 8 dígitos RUC sin DV (pad '0' izq.)
[11] dDVEmi 1 dígito DV del RUC
[12-14] dEst 3 dígitos Establecimiento
[15-17] dPunExp 3 dígitos Punto de expedición
[18-24] dNumDoc 7 dígitos Número de documento
[25] iTipCont 1 dígito 1=Física, 2=Jurídica
[26-33] dFeEmiDE 8 dígitos Fecha YYYYMMDD (sin guiones)
[34] iTipEmi 1 dígito 1=Normal, 2=Contingencia
[35-43] dCodSeg 9 dígitos Código de seguridad aleatorio
[44] dDVId 1 dígito DV del CDC (Módulo 11 sobre [01-43])

Algoritmo DV CDC (Módulo 11 — variante SIFEN)

  1. Normalización: cada carácter no-dígito → ord($char) (protección para RUCs con letras)
  2. Suma ponderada: de derecha a izquierda, factor k cicla [2..11]
  3. DV: resto = suma % 11(resto <= 1) ? 0 : (11 - resto)
// Implementado en SifenCdcGenerator + Modulo11Service::calcularDvCdc()
$normalizada = preg_replace_callback('/[^0-9]/', fn($m) => (string) ord($m[0]), $base43);
$k = 2; $total = 0;
for ($i = strlen($normalizada) - 1; $i >= 0; $i--) {
$total += (int) $normalizada[$i] * $k;
$k = ($k >= 11) ? 2 : $k + 1;
}
$dv = ($total % 11 <= 1) ? 0 : (11 - $total % 11);

§AUDIT — Hallazgos de Auditoría OnnixConnect 2026-03-11

✅ Correctos (no modificar)

ComponenteEstadoDescripción
dVerForValor fijo "150" — correcto
CDC Módulo 11ASCII normalization para letras implementada en Modulo11Service
Sin prolog XMLsaveXML($root) sin <?xml...?> — Fix #2 aplicado
gCamFuFD/dCarQRcreateTextNode('') fuerza <dCarQR></dCarQR> — evita <dCarQR/> rechazado por SET
gOpeCom ordeniTipTra → dDesTipTra → iTImp → dDesTImp → cMoneOpedDesMoneOpe → iTiOpe — fijado en sesión anterior
dNomFanEmi fallback$emitter->nombre_fantasia ?? $emitter->razon_social — siempre se emite
gDatRec cPaisReccPaisRec="PRY" y dDesPaisRec="Paraguay" antes de dRucRec — fijado en sesión anterior
gPaConEIni cMoneTiPagRenombrado de cMonedasPago a cMoneTiPag — fijado en sesión anterior
gCamIVA dBasExeAl final del grupo, siempre presente (0 si gravado, total_linea si exento)
gTotSub dIVAComiAntes de dLiqTotIVA10, siempre 0 para facturas normales
gCamGen vacíoPresente en xs:sequence aunque sin hijos

⚠️ Issues Identificados

#SeveridadArchivoDescripción
1🟡 MEDIOSifenXmlBuilder.phpdDesUniMed hardcodeado como 'UNI' — no mapea a cUniMed real. Puede causar rechazo si emisor usa unidades distintas a 77=UNI
2🟡 MEDIOSifenXmlBuilder.phpappendDecimal siempre emite 4 decimales (ej. 1.0000) — XSD permite 0-4, podría ser rechazado por parsers estrictos
3🔵 BAJOSifenXmlBuilder.phpB005/B006 (dInfoEmi/dInfoFisco) no implementados — opcionales, no bloquean
4🔵 BAJOSifenXmlBuilder.phpdDesProSer sin truncado a 120 chars — si descripción supera E708 máximo, XSD rechaza
5🔵 BAJOSifenXmlBuilder.phpgDatRec omitido si cliente_nombre=null — para innominados debería emitirse con dNomRec='Sin Nombre'

§CDATA — Reglas de Sanitización

Los campos de tipo A (Alfanumérico) que pueden contener < > & " ' deben envolver su contenido en CDATA para evitar XML mal formado:

<!-- Correcto -->
<dDesActEco><![CDATA[Programación & desarrollo de software]]></dDesActEco>

<!-- Incorrecto — rompería el XML -->
<dDesActEco>Programación & desarrollo de software</dDesActEco>

Campos donde aplica CDATA:

  • dInfoEmi (B005), dInfoFisco (B006)
  • dDesActEco (D132) — si contiene & o caracteres especiales
  • dDesProSer (E708) — descripción producto/servicio
  • dInfItem (E714)
  • dInfAd (J003)

Nota: DOMDocument::createTextNode() escapa automáticamente < > & → en PHP, usar createTextNode() es seguro. Para contenido con XML embebido usar createCDATASection().


§XSD — Namespaces y Atributos Raíz

<rDE
xmlns="http://ekuatia.set.gov.py/sifen/xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ekuatia.set.gov.py/sifen/xsd siRecepDE_v150.xsd">
<dVerFor>150</dVerFor>
<DE Id="{CDC44}">
<!-- ... campos DE ... -->
<gCamFuFD><dCarQR>{URL_QR}</dCarQR></gCamFuFD>
</DE>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<!-- XMLDSig — referencia a DE por URI="#CDC44" -->
</Signature>
</rDE>

Restricciones SIFEN:

  • No usar prefijos de namespace (ej. sifen:DE) — solo namespace por defecto
  • No usar namespaces distintos a los declarados
  • formatOutput=false — sin whitespace entre tags (altera DigestValue)
  • preserveWhiteSpace=false — elimina nodos de texto con solo espacios