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
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| AA001 | rDE | Sobre de recepción del Documento Electrónico | Raíz | G | — | 1-1 | Elemento raíz con xmlns SIFEN + xmlns:xsi |
| AA002 | dVerFor | Versión del formato | rDE | N | 3 | 1-1 | Siempre "150" — primer hijo de rDE |
A. Campos firmados del Documento Electrónico
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| A001 | DE | Campos firmados del DE | rDE | G | — | 1-1 | Atributo Id={CDC44} — registrar con setIdAttributeNode() para XMLDSig |
| A002 | (atributo Id) | Identificador del DE (CDC) | DE | A | 44 | 1-1 | 44 dígitos exactos — ver §CDC |
| A003 | dDVId | Dígito verificador del CDC | DE | N | 1 | 1-1 | Módulo 11 — posición 44 del CDC (índice 43) |
| A004 | dFecFirma | Fecha y hora de la firma | DE | F | 19 | 1-1 | Formato YYYY-MM-DDThh:mm:ss — vigencia del certificado |
| — | dSisFact | Sistema de facturación | DE | N | 1 | 1-1 | 1=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.
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| B001 | gOpeDE | Grupo operación del DE | DE | G | — | 1-1 | Primer grupo hijo de DE |
| B002 | iTipEmi | Tipo de emisión | gOpeDE | N | 1 | 1-1 | 1=Normal, 2=Contingencia — extraído de CDC[33] |
| B003 | dDesTipEmi | Descripción tipo emisión | gOpeDE | A | 6-12 | 1-1 | "Normal" o "Contingencia" |
| B004 | dCodSeg | Código de seguridad | gOpeDE | N | 9 | 1-1 | 9 dígitos — extraído de CDC[34-42] |
| B005 | dInfoEmi | Información de interés del emisor | gOpeDE | A | 1-3000 | 0-1 | CDATA recomendado si contiene caracteres especiales |
| B006 | dInfoFisco | Información de interés del Fisco | gOpeDE | A | 1-3000 | 0-1 | Obligatorio para Nota de Remisión (C002=7). CDATA |
C. Campos del Timbrado
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| C001 | gTimb | Datos del timbrado | DE | G | — | 1-1 | Segundo grupo hijo de DE |
| C002 | iTiDE | Tipo de Documento Electrónico | gTimb | N | 1-2 | 1-1 | 1=FE, 2=FEE, 3=FEI, 4=AFE, 5=NCE, 6=NDE, 7=NRE |
| C003 | dDesTiDE | Descripción tipo documento | gTimb | A | 15-40 | 1-1 | Texto fijo según C002 |
| C004 | dNumTim | Número del timbrado DNIT | gTimb | N | 8 | 1-1 | Desde emitter.config['timbrado'] |
| C005 | dEst | Establecimiento | gTimb | A | 3 | 1-1 | Pad '0' izq. — CDC[11-13] |
| C006 | dPunExp | Punto de expedición | gTimb | A | 3 | 1-1 | Pad '0' izq. — CDC[14-16] |
| C007 | dNumDoc | Número del documento | gTimb | A | 7 | 1-1 | Pad '0' izq. — CDC[17-23] |
| C010 | dSerie | Serie del timbrado | gTimb | A | 2 | 0-1 | Opcional — reinicio de numeración |
| C008 | dFeIniT | Fecha inicio vigencia timbrado | gTimb | F | 10 | 1-1 | Formato YYYY-MM-DD — desde emitter.config |
| C009 | dFFinT | Fecha fin vigencia timbrado | gTimb | F | 10 | 0-1 | No requerida por XSD v150 |
D. Campos Generales de la Operación
D0. Fecha de emisión
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| D001 | gDatGralOpe | Datos generales de la operación | DE | G | — | 1-1 | Tercer grupo hijo de DE |
| — | dFeEmiDE | Fecha y hora emisión del DE | gDatGralOpe | F | 19 | 1-1 | Formato 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.
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| D010 | gOpeCom | Campos de la operación comercial | gDatGralOpe | G | — | 0-1 | Obligatorio si C002 ≠ 7 |
| D011 | iTipTra | Tipo de transacción | gOpeCom | N | 1-2 | 0-1 | 1=Mercadería, 2=Servicios, …, 13=Muestras médicas |
| D012 | dDesTipTra | Descripción tipo transacción | gOpeCom | A | 5-36 | 0-1 | Texto referente a D011 |
| D013 | iTImp | Tipo de impuesto | gOpeCom | N | 1 | 1-1 | 1=IVA (posición 3 en xs:sequence) |
| D014 | dDesTImp | Descripción impuesto | gOpeCom | A | 3-11 | 1-1 | "IVA", "ISC", etc. |
| D015 | cMoneOpe | Moneda de la operación | gOpeCom | A | 3 | 1-1 | ISO 4217 — "PYG" para guaraníes. Posición 5 en xs:sequence |
| D016 | dDesMoneOpe | Descripción moneda | gOpeCom | A | 3-20 | 1-1 | "Guaraní", "Dólar", etc. |
| D017 | iCondTipCam | Condición tipo de cambio | gOpeCom | N | 1 | 0-1 | Solo si D015 ≠ PYG. 1=Global, 2=Por ítem |
| D018 | dTIPCam | Tipo de cambio | gOpeCom | N | 1-5p(0-4) | 0-1 | Solo si D017=1 |
| — | iTiOpe | Tipo de operación | gOpeCom | N | 1 | 1-1 | 1=B2B, 2=B2C, 3=B2G, 4=B2F — después de cMoneOpe |
| — | dDesTiOpe | Descripción tipo operación | gOpeCom | A | 3-30 | 1-1 | Texto referente a iTiOpe |
| — | iNatRec | Naturaleza receptor | gOpeCom | N | 1 | 1-1 | 1=Contribuyente, 2=No Contribuyente |
| — | iCondOpe | Condición operación | gOpeCom | N | 1 | 1-1 | 1=Contado, 2=Crédito |
| D019 | iCondAnti | Condición anticipo | gOpeCom | N | 1 | 0-1 | 1=Global, 2=Por ítem |
| D020 | dDesCondAnti | Descripción condición anticipo | gOpeCom | A | 15-17 | 0-1 | Referente a D019 |
D2. Campos del Emisor (gEmis)
Orden xs:sequence confirmado: dRucEm → dDVEmi → iTipCont → dNomEmi → dNomFanEmi → gActEco → gDirEmi
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| D100 | gEmis | Grupo datos del emisor | gDatGralOpe | G | — | 1-1 | |
| D101 | dRucEm | RUC emisor (sin DV) | gEmis | A | 3-8 | 1-1 | Solo parte numérica |
| D102 | dDVEmi | DV del RUC emisor | gEmis | N | 1 | 1-1 | Módulo 11 |
| D103 | iTipCont | Tipo contribuyente | gEmis | N | 1 | 1-1 | 1=Física, 2=Jurídica — CDC[24] |
| D105 | dNomEmi | Nombre/Razón social emisor | gEmis | A | 4-255 | 1-1 | En pruebas: literal específico SET |
| D106 | dNomFanEmi | Nombre fantasía emisor | gEmis | A | 4-255 | 0-1 | xs:sequence lo ubica ANTES de gActEco. Si es null → usar razon_social como fallback |
| D130 | gActEco | Grupo actividad económica | gEmis | G | — | 1-9 | Al menos una actividad obligatoria |
| D131 | cActEco | Código actividad económica | gActEco | A | 1-8 | 1-1 | Tabla DNIT capítulo 16 |
| D132 | dDesActEco | Descripción actividad | gActEco | A | 1-300 | 1-1 | CDATA si contiene caracteres especiales |
| — | gDirEmi | Grupo dirección emisor | gEmis | G | — | 1-1 | Siempre requerido |
| D107 | dDirEmi | Dirección emisor | gDirEmi | A | 1-255 | 1-1 | Nombre calle principal |
| D108 | dNumCasEmi | Número de casa emisor | gDirEmi | N | 1-6 | 1-1 | 0 si no tiene |
| D109 | dCompl1Emi | Complemento dirección 1 | gDirEmi | A | 1-255 | 0-1 | Calle secundaria |
| D110 | dCompl2Emi | Complemento dirección 2 | gDirEmi | A | 1-255 | 0-1 | Número dpto/piso |
| D111 | cDepEmi | Código departamento emisión | gDirEmi | N | 1-2 | 1-1 | Según XSD departamentos |
| D112 | dDesDepEmi | Descripción departamento | gDirEmi | A | 6-16 | 1-1 | Referente D111 |
| D113 | cDisEmi | Código distrito emisión | gDirEmi | N | 1-4 | 0-1 | Según tabla distritos |
| D114 | dDesDisEmi | Descripción distrito | gDirEmi | A | 1-30 | 0-1 | Obligatorio si D113 existe |
| D115 | cCiuEmi | Código ciudad emisión | gDirEmi | N | 1-5 | 1-1 | Según tabla ciudades |
| D116 | dDesCiuEmi | Descripción ciudad | gDirEmi | A | 1-30 | 1-1 | Referente D115 |
| D117 | dTelEmi | Teléfono emisor | gDirEmi | A | 6-15 | 0-1 | Con prefijo de ciudad |
| D118 | dEmailEmi | Correo electrónico emisor | gDirEmi | A | 3-80 | 0-1 | |
| D119 | dDenSuc | Denominación sucursal | gDirEmi | A | 1-30 | 0-1 |
D2.2 Responsable generación DE (gRespDE)
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| D140 | gRespDE | Grupo responsable generación | gEmis | G | — | 0-1 | Opcional |
| D141 | iTipIDRespDE | Tipo ID responsable | gRespDE | N | 1 | 1-1 | 1=Cédula PY, 2=Pasaporte… |
| D142 | dDTipIDRespDE | Descripción tipo ID | gRespDE | A | 9-41 | 1-1 | Referente D141 |
| D143 | dNumIDRespDE | Número ID responsable | gRespDE | A | 1-20 | 1-1 | |
| D144 | dNomRespDE | Nombre responsable | gRespDE | A | 4-255 | 1-1 | |
| D145 | dCargoRespDE | Cargo responsable | gRespDE | A | 4-100 | 1-1 |
D3. Campos del Receptor (gDatRec)
Orden xs:sequence CRÍTICO: iNatRec → iTiOpe → cPaisRec → dDesPaisRec → [datos RUC o ID] → dNomRec
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| D200 | gDatRec | Grupo datos del receptor | gDatGralOpe | G | — | 1-1 | |
| D201 | iNatRec | Naturaleza receptor | gDatRec | N | 1 | 1-1 | 1=Contribuyente, 2=No Contribuyente |
| D202 | iTiOpe | Tipo de operación | gDatRec | N | 1 | 1-1 | 1=B2B, 2=B2C, 3=B2G, 4=B2F |
| D203 | cPaisRec | Código país receptor | gDatRec | A | 3 | 1-1 | "PRY" para Paraguay — xs:sequence lo ubica ANTES de datos RUC/ID |
| D204 | dDesPaisRec | Descripción país receptor | gDatRec | A | 4-30 | 1-1 | "Paraguay" |
| D205 | iTiContRec | Tipo contribuyente receptor | gDatRec | N | 1 | 0-1 | Obligatorio si D201=1 |
| D206 | dRucRec | RUC receptor | gDatRec | A | 3-8 | 0-1 | Obligatorio si D201=1 — solo parte sin DV |
| D207 | dDVRec | DV RUC receptor | gDatRec | N | 1 | 0-1 | Módulo 11 — obligatorio si D206 existe |
| D208 | iTipDocRec | Tipo ID receptor | gDatRec | N | 1 | 0-1 | Obligatorio si D201=2 y D202≠4 |
| D209 | dDTipDocRec | Descripción tipo ID | gDatRec | A | 9-41 | 0-1 | Referente D208 |
| D210 | dNumIDRec | Número ID receptor | gDatRec | A | 1-20 | 0-1 | Obligatorio si D201=2 |
| D211 | dNomRec | Nombre/Razón social receptor | gDatRec | A | 4-255 | 1-1 | Innominado: "Sin Nombre" |
| D212 | dNomFantRec | Nombre fantasía receptor | gDatRec | A | 4-255 | 0-1 | |
| D213 | dDirRec | Dirección receptor | gDatRec | A | 1-255 | 0-1 | Obligatorio si C002=7 o D202=4 |
| D218 | dNumCasRec | Número casa receptor | gDatRec | N | 1-6 | 0-1 | Obligatorio si D213 existe |
| D219 | cDepRec | Código departamento receptor | gDatRec | N | 1-2 | 0-1 | |
| D220 | dDesDepRec | Descripción departamento | gDatRec | A | 6-16 | 0-1 | |
| D221 | cDisRec | Código distrito receptor | gDatRec | N | 1-4 | 0-1 | |
| D222 | dDesDisRec | Descripción distrito | gDatRec | A | 1-30 | 0-1 | |
| D223 | cCiuRec | Código ciudad receptor | gDatRec | N | 1-5 | 0-1 | |
| D224 | dDesCiuRec | Descripción ciudad | gDatRec | A | 1-30 | 0-1 | |
| D214 | dTelRec | Teléfono receptor | gDatRec | A | 6-15 | 0-1 | |
| D215 | dCelRec | Celular receptor | gDatRec | A | 10-20 | 0-1 | |
| D216 | dEmailRec | Correo electrónico receptor | gDatRec | A | 3-80 | 0-1 | |
| D217 | dCodCliente | Código cliente | gDatRec | A | 3-15 | 0-1 |
E. Campos Específicos por Tipo de Documento
E1. Factura Electrónica — gCamFE
Orden xs:sequence: iIndPres → dDesIndPres → dFecEmNR → iNatRec → iCondOpe → dDesCondOpe
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| E010 | gCamFE | Campos Factura Electrónica | gDtipDE | G | — | 0-1 | Obligatorio si C002=1 |
| E011 | iIndPres | Indicador de presencia | gCamFE | N | 1 | 1-1 | Primer hijo de gCamFE. 1=Presencial, 2=Electrónica… |
| E012 | dDesIndPres | Descripción indicador presencia | gCamFE | A | 10-30 | 1-1 | Texto referente a E011 |
| — | dFecEmNR | Fecha emisión vinculada | gCamFE | F | 10 | 0-1 | YYYY-MM-DD — requerida por xs:sequence v150 |
| — | iNatRec | Naturaleza receptor | gCamFE | N | 1 | 1-1 | 1=Contribuyente, 2=No Contribuyente |
| — | iCondOpe | Condición de la operación | gCamFE | N | 1 | 1-1 | 1=Contado, 2=Crédito |
| — | dDesCondOpe | Descripción condición | gCamFE | A | 7 | 1-1 | "Contado" o "Crédito" |
E7. Condición de la operación — gCamCond
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| E600 | gCamCond | Campos condición de la operación | gDtipDE | G | — | 0-1 | Obligatorio si C002=1 o 4 |
| E601 | iCondOpe | Condición de la operación | gCamCond | N | 1 | 1-1 | 1=Contado, 2=Crédito |
| E602 | dDCondOpe | Descripción condición | gCamCond | A | 7 | 1-1 | "Contado" (7 chars) o "Crédito" (7 chars) |
E7.1 Forma de pago contado — gPaConEIni
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| E605 | gPaConEIni | Campos forma de pago contado | gCamCond | G | — | 0-999 | Obligatorio si E601=1. Al menos un elemento |
| E606 | iTiPago | Tipo de pago | gPaConEIni | N | 1-2 | 1-1 | 1=Efectivo, 2=Cheque, 3=TC, 4=TD… |
| E607 | dDesTiPag | Descripción tipo pago | gPaConEIni | A | 4-30 | 1-1 | Texto referente a E606 |
| E608 | dMonTiPag | Monto del tipo de pago | gPaConEIni | N | 1-15p(0-4) | 1-1 | Monto en la moneda de E609 |
| E609 | cMoneTiPag | Moneda del tipo de pago | gPaConEIni | A | 3 | 1-1 | "PYG" — ISO 4217. Anteriormente erróneo: cMonedasPago |
| E610 | dDesMoneTPag | Descripción moneda | gPaConEIni | A | 3-20 | 0-1 | Referente a E609 |
| E611 | dTiCamTPag | Tipo de cambio | gPaConEIni | N | 1-5p(0-4) | 0-1 | Solo si E609 ≠ PYG |
E7.2 Operación a crédito — gPagCred
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| E640 | gPagCred | Campos operación a crédito | gCamCond | G | — | 0-1 | Obligatorio si E601=2 |
| E641 | iCondCred | Condición crédito | gPagCred | N | 1 | 1-1 | 1=Plazo, 2=Cuota |
| E642 | dDCondCred | Descripción condición crédito | gPagCred | A | 5-6 | 1-1 | Referente E641 |
| E643 | dPlazoCre | Plazo del crédito | gPagCred | A | 2-15 | 0-1 | Obligatorio si E641=1 |
| E644 | dCuotas | Cantidad de cuotas | gPagCred | N | 1-3 | 0-1 | Obligatorio si E641=2 |
| E645 | dMonEnt | Monto entrega inicial | gPagCred | N | 1-15p(0-4) | 0-1 |
E8. Ítems de la factura — gCamItem
Estructura: gCamItem (1-999) > gValorItem > gValorRestaItem
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| E700 | gCamItem | Campos del ítem | gDtipDE | G | — | 1-999 | Un nodo por ítem |
| E701 | dCodInt | Código interno producto/servicio | gCamItem | A | 1-20 | 1-1 | Identificador en sistema del emisor |
| E702 | dParAranc | Partida arancelaria | gCamItem | N | 4 | 0-1 | |
| E703 | dNCM | Nomenclatura Común Mercosur | gCamItem | N | 6-8 | 0-1 | |
| E704 | dCodDNCP | Código DNCP general | gCamItem | A | 8 | 0-1 | Obligatorio si D202=3 (B2G) |
| E705 | dDConDNCP | Código DNCP específico | gCamItem | A | 3-4 | 0-1 | Obligatorio si E704 existe |
| E706 | dCodGtin | Código GTIN producto | gCamItem | N | 8,12,13,14 | 0-1 | |
| E707 | dCodGtinEnv | Código GTIN envase | gCamItem | N | 8,12,13,14 | 0-1 | |
| E708 | dDesProSer | Descripción producto/servicio | gCamItem | A | 1-120 | 1-1 | Max 120 chars — truncar si necesario |
| E709 | cUniMed | Código unidad de medida | gCamItem | N | 1-5 | 1-1 | Tabla SIFEN cap. 16. 77=UNI |
| E710 | dDesUniMed | Descripción unidad de medida | gCamItem | A | 1-10 | 1-1 | "UNI", "KG", "LT"… |
| E711 | dCantProSer | Cantidad | gCamItem | N | 1-10p(0-4) | 1-1 | Hasta 4 decimales |
| E712 | cPaisOrig | Código país origen | gCamItem | A | 3 | 0-1 | ISO 3166-1 alfa-3 |
| E713 | dDesPaisOrig | Descripción país origen | gCamItem | A | 4-30 | 0-1 | Obligatorio si E712 existe |
| E714 | dInfItem | Información del ítem | gCamItem | A | 1-500 | 0-1 | CDATA si contiene <>&" |
| E719 | dCDCAnticipo | CDC del anticipo | gCamItem | A | 44 | 0-1 | Solo si D011=9 |
E8.1 Precio y valor total del ítem — gValorItem
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| E720 | gValorItem | Campos precio y valor del ítem | gCamItem | G | — | 0-1 | Obligatorio si C002 ≠ 7. Wrapper requerido |
| E721 | dPUniProSer | Precio unitario (IVA incluido) | gValorItem | N | 1-15p(0-8) | 1-1 | |
| E725 | dTiCamIt | Tipo de cambio del ítem | gValorItem | N | 1-5p(0-4) | 0-1 | Solo si D015 ≠ PYG y D017=2 |
| E727 | dTotBruOpeItem | Total bruto del ítem | gValorItem | N | 1-15p(0-8) | 1-1 | E721 × E711 |
| EA001 | gValorRestaItem | Campos descuentos y valor neto ítem | gValorItem | G | — | 1-1 | Siempre requerido por xs:sequence v150 |
| EA002 | dDescItem | Descuento particular unitario | gValorRestaItem | N | 1-15p(0-8) | 0-1 | 0 si no hay descuento |
| EA003 | dPorcDesIt | Porcentaje descuento particular | gValorRestaItem | N | 1-3p(0-8) | 0-1 | Obligatorio si EA002 > 0 |
| EA004 | dDescGloItem | Descuento global unitario | gValorRestaItem | N | 1-15p(0-8) | 0-1 | |
| EA006 | dAntPreUniIt | Anticipo particular unitario | gValorRestaItem | N | 1-15p(0-8) | 0-1 | |
| EA007 | dAntGloPreUniIt | Anticipo global unitario | gValorRestaItem | N | 1-15p(0-8) | 0-1 | |
| EA008 | dTotOpeItem | Valor total neto del ítem | gValorRestaItem | N | 1-15p(0-8) | 1-1 | Bruto − descuentos |
| EA009 | dTotOpeItemGs | Valor total en guaraníes | gValorRestaItem | N | 1-15p(0-8) | 0-1 | Obligatorio si E725 existe |
| — | dTotOpeGs | Total en guaraníes del ítem | gValorItem | N | 1-15p(0-8) | 1-1 | Entero sin decimales para PYG |
E8.2 IVA del ítem — gCamIVA
Orden xs:sequence CRÍTICO: iAfecIVA → dDesAfecIVA → dPropIVA → dTasaIVA → dBasGravIVA → dLiqIVAItem → dBasExe
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| E730 | gCamIVA | Campos IVA del ítem | gCamItem | G | — | 0-1 | |
| E731 | iAfecIVA | Forma de afectación IVA | gCamIVA | N | 1 | 1-1 | 1=Gravado, 2=Exonerado, 3=Exento, 4=Gravado parcial |
| E732 | dDesAfecIVA | Descripción afectación IVA | gCamIVA | A | 6-15 | 1-1 | Texto referente a E731 |
| E733 | dPropIVA | Proporción gravada IVA | gCamIVA | N | 1-3p(0-8) | 1-1 | 0-100; "100" si totalmente gravado |
| E734 | dTasaIVA | Tasa IVA | gCamIVA | N | 1-2 | 1-1 | 0, 5 o 10 |
| E735 | dBasGravIVA | Base gravada del ítem | gCamIVA | N | 1-15p(0-8) | 1-1 | total_linea / (1 + tasa/100) |
| E736 | dLiqIVAItem | Liquidación IVA del ítem | gCamIVA | N | 1-15p(0-8) | 1-1 | dBasGravIVA × (tasa/100) |
| E737 | dBasExe | Base exenta del ítem | gCamIVA | N | 1-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, '.', '')).
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| F001 | gTotSub | Subtotales y totales | DE | G | — | 0-1 | Obligatorio si C002 ≠ 7 |
| F002 | dTotExe | Subtotal exento | gTotSub | N | 1-15p(0-8) | 0-1 | Suma EA008 exentos |
| F003 | dTotExa | Subtotal exonerado | gTotSub | N | 1-15p(0-8) | 0-1 | Suma EA008 exonerados |
| F004 | dTotGravIVA5 | Subtotal gravado IVA 5% | gTotSub | N | 1-15p(0-8) | 0-1 | Suma EA008 tasa 5% |
| F005 | dTotGravIVA10 | Subtotal gravado IVA 10% | gTotSub | N | 1-15p(0-8) | 0-1 | Suma EA008 tasa 10% |
| F008 | dTotOpe | Total bruto de la operación | gTotSub | N | 1-15p(0-8) | 1-1 | Suma de todos los subtotales brutos |
| F009 | dTotDesc | Total descuentos particulares | gTotSub | N | 1-15p(0-8) | 1-1 | Suma EA002 |
| F033 | dTotDescGlotem | Total descuentos globales ítem | gTotSub | N | 1-15p(0-8) | 1-1 | Suma EA004 |
| F034 | dTotAntItem | Total anticipo ítem | gTotSub | N | 1-15p(0-8) | 1-1 | Suma EA006 |
| F035 | dTotAnt | Total anticipo global ítem | gTotSub | N | 1-15p(0-8) | 1-1 | Suma EA007 |
| F010 | dPorcDescTotal | Porcentaje descuento global | gTotSub | N | 1-3p(0-8) | 1-1 | Informativo |
| F011 | dDescTotal | Total descuentos operación | gTotSub | N | 1-15p(0-8) | 1-1 | Suma global descuentos |
| F012 | dAnticipo | Total anticipos operación | gTotSub | N | 1-15p(0-8) | 1-1 | Suma anticipos |
| F013 | dRedon | Redondeo operación | gTotSub | N | 1-3p(0-4) | 1-1 | Reglas SEDECO — múltiplos de 50 Gs |
| F025 | dComis | Comisión de la operación | gTotSub | N | 1-15p(0-8) | 0-1 | |
| F014 | dTotGralOpe | Total neto de la operación | gTotSub | N | 1-15p(0-8) | 1-1 | Bruto − descuentos + comisiones |
| F026 | dIVAComi | IVA de la comisión | gTotSub | N | 1-15p(0-8) | 0-1 | xs:sequence v150 lo ubica ANTES de dLiqTotIVA10. 0 en facturas normales |
| F016 | dLiqTotIVA10 | Liquidación total IVA 10% | gTotSub | N | 1-15p(0-8) | 0-1 | Suma E736 tasa 10% |
| F015 | dLiqTotIVA5 | Liquidación total IVA 5% | gTotSub | N | 1-15p(0-8) | 0-1 | Suma E736 tasa 5% |
| F017 | dTotIVA | Total IVA | gTotSub | N | 1-15p(0-8) | 0-1 | dLiqTotIVA10 + dLiqTotIVA5 |
| F019 | dBaseGrav10 | Base gravada IVA 10% | gTotSub | N | 1-15p(0-8) | 0-1 | Suma E735 tasa 10% |
| F018 | dBaseGrav5 | Base gravada IVA 5% | gTotSub | N | 1-15p(0-8) | 0-1 | Suma E735 tasa 5% |
| F020 | dTotalbaseIVA | Total base gravada IVA | gTotSub | N | 1-15p(0-8) | 0-1 | dBaseGrav10 + dBaseGrav5 |
| F023 | dTotOpeGs | Total operación en guaraníes | gTotSub | N | 1-15p(0-8) | 0-1 | Si D015 ≠ PYG |
| F024 | dTotOpeMExt | Total operación en moneda ext. | gTotSub | N | 1-15p(0-8) | 0-1 |
G. Campos Complementarios Comerciales — gCamGen
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| G001 | gCamGen | Campos de uso general | DE | G | — | 0-1 | Siempre debe estar presente en xs:sequence v150, aunque vacío |
| G002 | dOrdCompra | Número de orden de compra | gCamGen | A | 1-15 | 0-1 | |
| G003 | dOrdVenta | Número de orden de venta | gCamGen | A | 1-15 | 0-1 | |
| G004 | dAsiento | Número de asiento contable | gCamGen | A | 1-10 | 0-1 |
H. Documentos Asociados — gCamDEAsoc
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| H001 | gCamDEAsoc | Campos DE asociado | DE | G | — | 0-99 | CONDICIONAL — entre gCamGen y gCamFuFD cuando aplica. Obligatorio si C002=4,5,6 |
| H002 | iTipDocAso | Tipo documento asociado | gCamDEAsoc | N | 1 | 1-1 | 1=Electrónico, 2=Impreso, 3=Constancia |
| H003 | dDesTipDocAso | Descripción tipo documento | gCamDEAsoc | A | 7-11 | 1-1 | Referente H002 |
| H004 | dCdCDE | CDC del DTE referenciado | gCamDEAsoc | A | 44 | 0-1 | Obligatorio si H002=1 |
| H005 | dNumTimDI | Número timbrado impreso | gCamDEAsoc | N | 8 | 0-1 | Obligatorio si H002=2 |
| H006 | dEstDI | Establecimiento | gCamDEAsoc | A | 3 | 0-1 | |
| H007 | dPExpDI | Punto expedición | gCamDEAsoc | A | 3 | 0-1 | |
| H008 | dNumDocDI | Número documento | gCamDEAsoc | A | 7 | 0-1 | |
| H009 | iTipoDocDI | Tipo documento impreso | gCamDEAsoc | N | 1 | 0-1 | |
| H010 | dDesTipoDocDI | Descripción tipo documento | gCamDEAsoc | A | 7-16 | 0-1 | |
| H011 | dFecEmiDI | Fecha emisión documento impreso | gCamDEAsoc | F | 10 | 0-1 | YYYY-MM-DD |
| H012 | dNumComRet | Número comprobante retención | gCamDEAsoc | A | 15 | 0-1 | Si E606=10 |
| H013 | dNumRCDF | Número resolución crédito fiscal | gCamDEAsoc | A | 15 | 0-1 | Obligatorio si D011=12 |
| H014 | iTipConst | Tipo constancia | gCamDEAsoc | N | 1 | 0-1 | |
| H015 | dDesTipConst | Descripción tipo constancia | gCamDEAsoc | A | 30-34 | 0-1 | |
| H016 | dNumConst | Número constancia | gCamDEAsoc | N | 11 | 0-1 | |
| H017 | dNumControl | Número control constancia | gCamDEAsoc | A | 8 | 0-1 |
I. Firma Digital — Signature
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| I001 | Signature | Firma Digital XMLDSig | rDE | G | — | 1-1 | xmlns="http://www.w3.org/2000/09/xmldsig#" — hijo directo de rDE, después de DE |
J. Campos Fuera de la Firma — gCamFuFD
| ID | Tag XML | Descripción | Nodo Padre | Tipo | Long. | Ocu. | Obs. |
|---|---|---|---|---|---|---|---|
| J001 | gCamFuFD | Campos fuera de la firma digital | DE | G | — | 1-1 | Último hijo de DE. Su contenido NO forma parte del DigestValue |
| J002 | dCarQR | Caracteres del código QR | gCamFuFD | A | 100-600 | 1-1 | URL del QR — se inyecta POST-firma. Usar <dCarQR></dCarQR> (NO auto-cerrado />) |
| J003 | dInfAd | Información adicional | gCamFuFD | A | 1-5000 | 0-1 | Interé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)
- Normalización: cada carácter no-dígito →
ord($char)(protección para RUCs con letras) - Suma ponderada: de derecha a izquierda, factor
kcicla[2..11] - 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)
| Componente | Estado | Descripción |
|---|---|---|
dVerFor | ✅ | Valor fijo "150" — correcto |
| CDC Módulo 11 | ✅ | ASCII normalization para letras implementada en Modulo11Service |
| Sin prolog XML | ✅ | saveXML($root) sin <?xml...?> — Fix #2 aplicado |
gCamFuFD/dCarQR | ✅ | createTextNode('') fuerza <dCarQR></dCarQR> — evita <dCarQR/> rechazado por SET |
gOpeCom orden | ✅ | iTipTra → dDesTipTra → iTImp → dDesTImp → cMoneOpe → dDesMoneOpe → iTiOpe — fijado en sesión anterior |
dNomFanEmi fallback | ✅ | $emitter->nombre_fantasia ?? $emitter->razon_social — siempre se emite |
gDatRec cPaisRec | ✅ | cPaisRec="PRY" y dDesPaisRec="Paraguay" antes de dRucRec — fijado en sesión anterior |
gPaConEIni cMoneTiPag | ✅ | Renombrado de cMonedasPago a cMoneTiPag — fijado en sesión anterior |
gCamIVA dBasExe | ✅ | Al final del grupo, siempre presente (0 si gravado, total_linea si exento) |
gTotSub dIVAComi | ✅ | Antes de dLiqTotIVA10, siempre 0 para facturas normales |
gCamGen vacío | ✅ | Presente en xs:sequence aunque sin hijos |
⚠️ Issues Identificados
| # | Severidad | Archivo | Descripción |
|---|---|---|---|
| 1 | 🟡 MEDIO | SifenXmlBuilder.php | dDesUniMed hardcodeado como 'UNI' — no mapea a cUniMed real. Puede causar rechazo si emisor usa unidades distintas a 77=UNI |
| 2 | 🟡 MEDIO | SifenXmlBuilder.php | appendDecimal siempre emite 4 decimales (ej. 1.0000) — XSD permite 0-4, podría ser rechazado por parsers estrictos |
| 3 | 🔵 BAJO | SifenXmlBuilder.php | B005/B006 (dInfoEmi/dInfoFisco) no implementados — opcionales, no bloquean |
| 4 | 🔵 BAJO | SifenXmlBuilder.php | dDesProSer sin truncado a 120 chars — si descripción supera E708 máximo, XSD rechaza |
| 5 | 🔵 BAJO | SifenXmlBuilder.php | gDatRec 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 especialesdDesProSer(E708) — descripción producto/serviciodInfItem(E714)dInfAd(J003)
Nota:
DOMDocument::createTextNode()escapa automáticamente< > &→ en PHP, usarcreateTextNode()es seguro. Para contenido con XML embebido usarcreateCDATASection().
§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