Generate JP PINT Invoice XML (Qualified Invoice)
Skill: Convert invoice data into a JP PINT (Peppol) qualified-invoice XML
Region: Japan (日本)
Category: Qualified Invoice System (インボイス制度)
Does: Takes ordinary invoice data and produces a JP PINT UBL Invoice — the Japanese Peppol specification used to exchange qualified invoices (適格請求書) for consumption-tax input-credit purposes.
Standard: JP PINT (Peppol International model, UBL 2.1)
A qualified invoice must carry the issuer's registration number (登録番号): the letter
Tfollowed by 13 digits. Without it, the recipient cannot claim the input tax credit. Validate against the current JP PINT schematron before sending.
Input data required
| Input | Used for |
|---|---|
| Invoice number, issue date, type code | header |
Issuer registration number (T + 13 digits) |
seller PartyTaxScheme |
| Seller name, address | AccountingSupplierParty |
| Buyer name, address | AccountingCustomerParty |
Currency (JPY) |
DocumentCurrencyCode |
| Line items: name, quantity, net price, consumption-tax category & rate | InvoiceLine |
| Tax breakdown per rate (10% standard, 8% reduced) | TaxTotal |
Namespaces
| Prefix | URI |
|---|---|
| default | urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 |
cac |
urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2 |
cbc |
urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2 |
Identification:
cbc:CustomizationID=urn:peppol:pint:billing-1@jp-1(JP PINT billing)cbc:ProfileID=urn:peppol:bis:billing
Document structure to emit
Invoice
├── cbc:CustomizationID / cbc:ProfileID
├── cbc:ID / cbc:IssueDate / cbc:InvoiceTypeCode (380) / cbc:DocumentCurrencyCode (JPY)
├── cac:AccountingSupplierParty (name, address, registration number T+13)
├── cac:AccountingCustomerParty
├── cac:TaxTotal (TaxAmount + TaxSubtotal per rate: 10% standard, 8% reduced)
├── cac:LegalMonetaryTotal
└── cac:InvoiceLine ...
Issuer registration number
Place the qualified-invoice registration number on the seller party as the VAT/tax company id:
<cac:PartyTaxScheme>
<cbc:CompanyID>T1234567890123</cbc:CompanyID>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:PartyTaxScheme>
Consumption-tax categories
| Category code | Meaning | Typical rate |
|---|---|---|
S |
Standard rate | 10% |
S (reduced) |
Reduced rate (food, certain items) | 8% |
E |
Exempt | — |
O |
Out of scope | — |
JP PINT distinguishes the 10% and 8% groups as separate TaxSubtotal entries (both category S, different Percent). Confirm the exact category-schema combination in the current JP PINT code lists.
Calculation rules
- JPY is a zero-decimal currency — amounts are whole yen, no fractional part.
- Line net = quantity × net unit price, rounded to whole yen.
- Group lines by tax rate (10% vs 8%) → one
TaxSubtotalper rate:TaxableAmount= Σ nets;TaxAmount= round(taxable × rate). The Qualified Invoice System requires the tax to be totalled per rate and rounded once per rate (one rounding per tax rate per invoice). cac:TaxTotal/cbc:TaxAmount= Σ subtotal tax.TaxInclusiveAmount= exclusive + tax;PayableAmount= inclusive − prepaid.
Worked example (10% and 8% lines)
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:CustomizationID>urn:peppol:pint:billing-1@jp-1</cbc:CustomizationID>
<cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
<cbc:ID>2024-001</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>JPY</cbc:DocumentCurrencyCode>
<cac:AccountingSupplierParty><cac:Party>
<cac:PartyName><cbc:Name>株式会社アクメ</cbc:Name></cac:PartyName>
<cac:PostalAddress><cbc:StreetName>千代田1-1</cbc:StreetName><cbc:CityName>東京都千代田区</cbc:CityName><cbc:PostalZone>1000001</cbc:PostalZone><cac:Country><cbc:IdentificationCode>JP</cbc:IdentificationCode></cac:Country></cac:PostalAddress>
<cac:PartyTaxScheme><cbc:CompanyID>T1234567890123</cbc:CompanyID><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:PartyTaxScheme>
</cac:Party></cac:AccountingSupplierParty>
<cac:AccountingCustomerParty><cac:Party>
<cac:PartyName><cbc:Name>クライアント株式会社</cbc:Name></cac:PartyName>
<cac:PostalAddress><cbc:CityName>大阪市</cbc:CityName><cbc:PostalZone>5300001</cbc:PostalZone><cac:Country><cbc:IdentificationCode>JP</cbc:IdentificationCode></cac:Country></cac:PostalAddress>
</cac:Party></cac:AccountingCustomerParty>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="JPY">1640</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="JPY">10000</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="JPY">1000</cbc:TaxAmount>
<cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>10</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="JPY">8000</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="JPY">640</cbc:TaxAmount>
<cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>8</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="JPY">18000</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="JPY">18000</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="JPY">19640</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="JPY">19640</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="JPY">10000</cbc:LineExtensionAmount>
<cac:Item><cbc:Name>コンサルティング</cbc:Name>
<cac:ClassifiedTaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>10</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price><cbc:PriceAmount currencyID="JPY">10000</cbc:PriceAmount></cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>2</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="JPY">8000</cbc:LineExtensionAmount>
<cac:Item><cbc:Name>食品</cbc:Name>
<cac:ClassifiedTaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>8</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price><cbc:PriceAmount currencyID="JPY">8000</cbc:PriceAmount></cac:Price>
</cac:InvoiceLine>
</Invoice>
Validation checklist
-
cbc:CustomizationIDset to the current JP PINT billing identifier - Seller registration number present as
T+ 13 digits - Currency
JPYwith all amounts in whole yen (no decimals) - Separate
TaxSubtotalfor each rate (10% and 8%); tax rounded once per rate -
cac:TaxTotal/cbc:TaxAmount= Σ subtotal tax -
TaxInclusiveAmount= exclusive + tax;PayableAmountcorrect - Passes the JP PINT schematron before sending over Peppol
Last updated: 2026-05-26 — confirm the JP PINT customization identifier, tax-category code lists, and per-rate rounding rules against the current Digital Agency / Peppol Authority Japan specification before use.