Ir al contenido
Log in

Campos de factura JSON a XML KSeF FA(3)

Esta guía detalla el mapeo entre los campos de la API de facturas de B2Brouter, los Términos de Negocio (BT) correspondientes definidos por el estándar europeo de facturación electrónica (EN 16931) y las rutas XML del formato KSeF FA(3) (Sistema Nacional de Facturación Electrónica de Polonia).

Su propósito es ayudar a entender cómo los datos de factura enviados en formato JSON mediante la API de facturas corresponden a la estructura XML KSeF FA(3). Solo se incluyen los campos que se mapean efectivamente durante la generación del informe fiscal.

Nota: La información del vendedor/proveedor (Podmiot1) se rellena automáticamente a partir de la configuración de tu cuenta. La información del comprador/cliente (Podmiot2) se rellena a partir del contacto de la factura. Si necesitas control directo sobre todos los campos, considera usar la API de informes fiscales en su lugar.

BT IDTérmino de negocioCampo API (B2Brouter)KSeF FA(3) XPath
BT-1Número de facturainvoice.numberFa/P_2
BT-2Fecha de emisióninvoice.dateFa/P_1
BT-3Código de tipo de facturainvoice.type_document Derivado: por defecto VAT; KOR si es factura rectificativa; ZAL si es anticipo; UPR si es simplificadaFa/RodzajFaktury
BT-5Moneda de la facturainvoice.currencyFa/KodWaluty
BT-7Fecha del punto impositivoinvoice.tax_point_dateFa/P_6
BT-9Fecha de vencimientoinvoice.due_dateFa/Platnosc/TerminPlatnosci/Termin
BT-25Número de factura anteriorinvoice.invoice_references[reference_type=amend].number (v2026-04-20+) o invoice.amended_number (versiones anteriores)Fa/DaneFaKorygowanej/NrFaKorygowanej
BT-26Fecha de factura anteriorinvoice.invoice_references[reference_type=amend].date (v2026-04-20+) o invoice.amended_date (versiones anteriores)Fa/DaneFaKorygowanej/DataWystFaKorygowanej
Tipo de cambioinvoice.exchange_rateFa/KursWalutyZ
BT-10Referencia del compradorinvoice.buyer_referencePodmiot2/NrKlienta
BT-13Referencia de orden de comprainvoice.ponumberFa/WarunkiTransakcji/Zamowienia/NrZamowienia
BT-92Fecha de orden de comprainvoice.order_dateFa/WarunkiTransakcji/Zamowienia/DataZamowienia
BT-14Referencia de pedido de ventainvoice.sales_order_referenceFa/DodatkowyOpis (par clave-valor)
BT-16Referencia de aviso de despachoinvoice.delivery_note_numberFa/WZ
Código de efecto de correccióninvoice.amend_code_tax o tax_report_setting.credit_note_codeFa/TypKorekty (solo para tipos KOR)
BT IDTérmino de negocioCampo API (B2Brouter)KSeF FA(3) XPath
BT-9Fecha de vencimientoinvoice.due_dateFa/Platnosc/TerminPlatnosci/Termin
BT-81Código de medio de pagoinvoice.payment_method (mapeado a códigos KSeF)Fa/Platnosc/FormaPlatnosci
BT-84IBAN de la cuenta financierainvoice.bank_account.ibanFa/Platnosc/RachunekBankowy/NrRB
BT-84-0Número de cuenta financierainvoice.bank_account.number (alternativo si no hay IBAN)Fa/Platnosc/RachunekBankowy/NrRB
BT-85Nombre de la cuenta financierainvoice.bank_account.nameFa/Platnosc/RachunekBankowy/NazwaBanku
BT-86BIC de la cuenta financierainvoice.bank_account.bicFa/Platnosc/RachunekBankowy/SWIFT
Indicador de pago realizadoDerivado: 1 cuando payable_amount = 0 y total > 0Fa/Platnosc/Zaplacono
Fecha de pago (cuando está pagado)invoice.due_date (cuando Zaplacono=1)Fa/Platnosc/DataZaplaty

Nota: KSeF no admite datos de cuenta de tarjeta (BT-87, BT-88), mandatos de domiciliación (BT-89), referencias de acreedor (BT-90), texto de condiciones de pago (BT-20) ni información de remesa (BT-83).

Este mapeo se describe para una factura emitida. Si deseas mapear una factura recibida, intercambia Podmiot1 y Podmiot2.

El Podmiot1 se rellena automáticamente a partir de la configuración de tu cuenta. Incluye el nombre de la empresa, el NIP (número fiscal polaco) y la dirección.

BT IDTérmino de negocioCampo API (B2Brouter)KSeF FA(3) XPath
Prefijo de país del vendedoraccount.country (en mayúsculas)Podmiot1/PrefiksPodatnika
BT-31NIP del vendedoraccount.tin_value (sin prefijo de país)Podmiot1/DaneIdentyfikacyjne/NIP
BT-27Nombre del vendedoraccount.namePodmiot1/DaneIdentyfikacyjne/Nazwa
BT-40País del vendedoraccount.country (en mayúsculas)Podmiot1/Adres/KodKraju
BT-35Calle del vendedoraccount.addressPodmiot1/Adres/AdresL1
BT-37,38Código postal + ciudad del vendedoraccount.postalcode + account.cityPodmiot1/Adres/AdresL2
BT-29-0GLN del vendedoraccount.cin_value (si cin_scheme = 88)Podmiot1/Adres/GLN
BT-42Teléfono de contacto del vendedoraccount.phonePodmiot1/DaneKontaktowe/Telefon
BT-43Email de contacto del vendedoraccount.emailPodmiot1/DaneKontaktowe/Email
REGON del vendedoraccount.routing_codes.cinX (esquema 8037)Stopka/Rejestry/REGON
KRS del vendedoraccount.routing_codes.cinX (esquema 8036)Stopka/Rejestry/KRS
BDO del vendedoraccount.routing_codes.cinX (esquema 8038)Stopka/Rejestry/BDO
BT IDTérmino de negocioCampo API (B2Brouter)KSeF FA(3) XPath
BT-48NIF del compradorinvoice.contact.tin_valuePL: Podmiot2/DaneIdentyfikacyjne/NIP
UE: Podmiot2/DaneIdentyfikacyjne/NrVatUE
No UE: Podmiot2/DaneIdentyfikacyjne/NrID
País fiscal del comprador (UE)invoice.contact.country (en mayúsculas)Podmiot2/DaneIdentyfikacyjne/KodUE (solo UE)
País fiscal del comprador (no UE)invoice.contact.country (en mayúsculas)Podmiot2/DaneIdentyfikacyjne/KodKraju (solo no UE)
Indicador sin NIFDerivado: 1 cuando contact.tin_value está en blancoPodmiot2/DaneIdentyfikacyjne/BrakID
BT-44Nombre del compradorinvoice.contact.namePodmiot2/DaneIdentyfikacyjne/Nazwa
BT-55País del compradorinvoice.contact.country (en mayúsculas)Podmiot2/Adres/KodKraju
BT-50Calle del compradorinvoice.contact.addressPodmiot2/Adres/AdresL1
BT-52,53Código postal + ciudad del compradorinvoice.contact.postalcode + invoice.contact.cityPodmiot2/Adres/AdresL2
BT-46-0GLN del compradorinvoice.contact.cin_value (si cin_scheme = 88)Podmiot2/Adres/GLN

KSeF admite múltiples roles de terceros mediante el elemento Podmiot3. Se genera un Podmiot3 cuando hay información de entrega o cuando la factura tiene un objeto third_party (disponible desde v2026-04-20).

Código de rolthird_party.role en B2BrouterDescripción
2delivery_recipientDestinatario de la entrega
3original_supplierEntidad original (cedida/transformada)
4additional_buyerComprador adicional
5invoice_issuerEmisor de factura en nombre del contribuyente
6payerPagador en nombre del comprador
7local_government_unit_issuerEntidad de gobierno local — emisor
8local_government_unit_recipientEntidad de gobierno local — receptor (JST)
9vat_group_member_issuerMiembro del grupo IVA — emisor
10vat_group_member_recipientMiembro del grupo IVA — receptor (GV)
11employeeEmpleado

La información de entrega se mapea a Podmiot3 con el código de rol 2 cuando invoice.delivery_address está presente. La dirección de entrega también se duplica en Fa/WarunkiTransakcji/Transport/WysylkaDo.

BT IDTérmino de negocioCampo API (B2Brouter)KSeF FA(3) XPath
BT-70Nombre de la parte de entregainvoice.delivery_party_namePodmiot3/DaneIdentyfikacyjne/Nazwa
BT-71ID de ubicación de entrega (GLN)invoice.delivery_location_id (si el tipo es GLN/088)Podmiot3/Adres/GLN
BT-75Calle de entregainvoice.delivery_addressPodmiot3/Adres/AdresL1 y Fa/WarunkiTransakcji/Transport/WysylkaDo/AdresL1
BT-77,78Código postal + ciudad de entregainvoice.delivery_postalcode + invoice.delivery_cityPodmiot3/Adres/AdresL2 y Fa/WarunkiTransakcji/Transport/WysylkaDo/AdresL2
BT-80País de entregainvoice.delivery_countryPodmiot3/Adres/KodKraju y Fa/WarunkiTransakcji/Transport/WysylkaDo/KodKraju
Rol del terceroFijo: 2 (Receptor)Podmiot3/Rola

Nota: KSeF no admite fecha de entrega (BT-72) ni campos de período de entrega.

JST / GV / Otros roles (roles 3–11) — v2026-04-20+

Sección titulada «JST / GV / Otros roles (roles 3–11) — v2026-04-20+»
Término de negocioCampo API (B2Brouter)KSeF FA(3) XPath
Nombre del terceroinvoice.third_party.namePodmiot3/DaneIdentyfikacyjne/Nazwa
NIF del terceroinvoice.third_party.tin_valuePodmiot3/DaneIdentyfikacyjne/NIP (PL), NrVatUE (UE), o NrID (no UE)
Dirección del terceroinvoice.third_party.addressPodmiot3/Adres/AdresL1
Código postal + ciudad del terceroinvoice.third_party.postalcode + invoice.third_party.cityPodmiot3/Adres/AdresL2
País del terceroinvoice.third_party.countryPodmiot3/Adres/KodKraju
Rol del terceroinvoice.third_party.role → código de rolPodmiot3/Rola
Indicador JSTinvoice.apply_to_local_government_unitPodmiot2/JST (1 cuando es verdadero, 2 cuando es falso)
Indicador GVinvoice.apply_to_vat_group_memberPodmiot2/GV (1 cuando es verdadero, 2 cuando es falso)

Mapeo a nivel de línea de factura (FaWiersz)

Sección titulada «Mapeo a nivel de línea de factura (FaWiersz)»

Todos los atributos listados en la siguiente tabla son propiedades de objetos contenidos en el array: invoice.invoice_lines_attributes[]. La columna Campo API hace referencia a las claves dentro de cada objeto de línea de factura.

Para facturas ordinarias (VAT, KOR, UPR, ROZ), las líneas se representan como elementos FaWiersz. Para facturas de anticipo (ZAL, KOR_ZAL), las líneas se representan como elementos ZamowienieWiersz.

BT IDTérmino de negocioCampo API (objeto de línea)KSeF FA(3) XPath
BT-126ID de línea de facturapositionFa/FaWiersz/NrWierszaFa
BT-153Nombre del artículodescriptionFa/FaWiersz/P_7
BT-130Cantidad facturada (código de unidad)unit (consultar la referencia de la API para la lista de códigos)Fa/FaWiersz/P_8A
BT-129Cantidad facturadaquantityFa/FaWiersz/P_8B
BT-155Identificador del vendedorarticle_codeFa/FaWiersz/Indeks
BT-157Identificador estándar (GTIN)article_code2Fa/FaWiersz/GTIN
BT-146Precio unitariopriceFa/FaWiersz/P_9A
-Precio unitario con descuentoDerivado de allowance_charges_attributes[]{allowance_charge_indicator: "allowance"} importe / quantity de la líneaFa/FaWiersz/P_10
BT-131Importe neto de la líneaextension_amount (si no se proporciona, se calculará)Fa/FaWiersz/P_11
Importe de impuesto de la líneaCalculado a partir de los impuestosFa/FaWiersz/P_11Vat
Código de impuestoDerivado de las características del impuestoFa/FaWiersz/P_12

Mapeo de propiedades adicionales del artículo (DodatkowyOpis por línea)

Sección titulada «Mapeo de propiedades adicionales del artículo (DodatkowyOpis por línea)»

Cada línea de factura puede contener propiedades adicionales de clave-valor que se mapean a elementos DodatkowyOpis a nivel de línea en el XML de KSeF.

Todos los atributos listados en la siguiente tabla son propiedades de objetos contenidos en el array: invoice.invoice_lines_attributes[].additional_item_properties_attributes[].

BT IDTérmino de negocioCampo API (objeto de propiedad adicional)KSeF FA(3) XPath
Referencia de número de líneaposition de la línea padreFa/DodatkowyOpis/NrWiersza
BT-160Nombre del atributo del artículoname (máx. 255 caracteres)Fa/DodatkowyOpis/Klucz
BT-161Valor del atributo del artículovalue (máx. 255 caracteres)Fa/DodatkowyOpis/Wartosc

Ejemplo JSON:

{
"invoice": {
"invoice_lines_attributes": [
{
"position": 1,
"description": "Product A",
"additional_item_properties_attributes": [
{ "name": "Color", "value": "Red" },
{ "name": "Size", "value": "XL" }
]
}
]
}
}

XML KSeF resultante:

<tns:DodatkowyOpis>
<tns:NrWiersza>1</tns:NrWiersza>
<tns:Klucz>Color</tns:Klucz>
<tns:Wartosc>Red</tns:Wartosc>
</tns:DodatkowyOpis>
<tns:DodatkowyOpis>
<tns:NrWiersza>1</tns:NrWiersza>
<tns:Klucz>Size</tns:Klucz>
<tns:Wartosc>XL</tns:Wartosc>
</tns:DodatkowyOpis>

Configurar una propiedad adicional con el nombre unit_of_measure permite especificar un código de unidad en texto libre para el campo P_8A de la línea en KSeF, reemplazando la lista estándar de códigos de unidad.

{
"additional_item_properties_attributes": [
{ "name": "unit_of_measure", "value": "szt." }
]
}

Esta propiedad se utiliza directamente como el código de unidad de la línea (Fa/FaWiersz/P_8A) y no se emite como elemento DodatkowyOpis en la salida XML.

Todos los atributos listados en la siguiente tabla son propiedades de objetos contenidos en el array: invoice.invoice_lines_attributes[].taxes_attributes[].

BT IDTérmino de negocioCampo API (objeto de impuesto)Mapeo KSeF FA(3)
BT-118Código de categoría fiscalcategory (consultar lista de códigos)Se usa para derivar el código de impuesto P_12
BT-119Porcentaje de impuesto aplicablepercentSe usa para derivar el código P_12 y las agregaciones P_13_x/P_14_x
BT-120Motivo de exención fiscalcommentFa/Adnotacje/Zwolnienie/P_19A. También acepta un código P_12 de KSeF (zw, np I, np II, 0 KR, 0 WDT, 0 EX, oo) para reemplazar el valor derivado.

Agregación del desglose fiscal (P_13_x / P_14_x)

Sección titulada «Agregación del desglose fiscal (P_13_x / P_14_x)»

KSeF requiere que los importes de impuestos se agreguen por tipo a nivel de cabecera. Estos campos se calculan automáticamente a partir de los desgloses fiscales de la factura:

Campo KSeFDescripciónTipo/Categoría fiscal
P_13_1Base imponible al tipo general23% o 22%
P_14_1Importe de impuesto al tipo general23% o 22%
P_14_1WImporte de impuesto al tipo general convertido a PLN23% o 22% (solo facturas en moneda extranjera)
P_13_2Base imponible al primer tipo reducido8% o 7%
P_14_2Importe de impuesto al primer tipo reducido8% o 7%
P_14_2WImporte de impuesto al primer tipo reducido convertido a PLN8% o 7% (solo facturas en moneda extranjera)
P_13_3Base imponible al segundo tipo reducido5%
P_14_3Importe de impuesto al segundo tipo reducido5%
P_14_3WImporte de impuesto al segundo tipo reducido convertido a PLN5% (solo facturas en moneda extranjera)
P_13_6_1Valor total de ventas internas al tipo cero0% nacional (excluidos intracomunitarios y exportación)
P_13_6_2Valor total de entregas intracomunitarias al 0%0% bienes intracomunitarios
P_13_6_3Valor total de exportaciones al 0%0% exportación
P_13_7Valor total de ventas exentasExento (categoría E, ámbito nacional)
P_13_8Valor total de inversión del sujeto pasivo transfronteriza (np I)Categoría AE, ámbito no nacional
P_13_10Valor total de inversión del sujeto pasivo nacionalCategoría AE, ámbito nacional
P_15Importe total a pagar (incluidos todos los impuestos)Suma de todas las categorías