PEPPOL requirements for Events and Memberships

  • MOLEDesign
  • Topic Author
  • Offline
  • New Member
  • New Member
More
14 hours 56 minutes ago #175760 by MOLEDesign
Replied by MOLEDesign on topic PEPPOL requirements for Events and Memberships
The XML is standard so 95% of the code is stamdard I would have thought, all you need to do is allow 'end point' addition in the plugin similar to sandbox / live with stripe

Here is an XML

<?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">

<!-- Unique invoice ID -->
<cbc:ID>INV-2025-000123</cbc:ID>

<!-- Invoice issue date -->
<cbc:IssueDate>2025-11-16</cbc:IssueDate>

<!-- Type code "380" = commercial invoice -->
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>

<!-- Currency -->
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

<!-- Seller (Your Organisation) -->
<cac:AccountingSupplierParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>My Pricing Company</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Main Street 1</cbc:StreetName>
<cbc:CityName>Brussels</cbc:CityName>
<cbc:PostalZone>1000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0123456789</cbc:CompanyID> <!-- VAT number -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:CompanyID>BE0123456789</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- Buyer -->
<cac:AccountingCustomerParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>Registering Corporation</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Customer Street 99</cbc:StreetName>
<cbc:CityName>Antwerp</cbc:CityName>
<cbc:PostalZone>2000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE9876543210</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
</cac:Party>
</cac:AccountingCustomerParty>

<!-- Invoice Line(s) -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>

<cac:Item>
<cbc:Description>Test Forum 2025 – Registration</cbc:Description>
</cac:Item>

<cac:Price>
<cbc:PriceAmount currencyID="EUR">1000.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>

<!-- Tax summary -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">210.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">210.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>

<!-- Totals -->
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1000.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1210.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">1210.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

</Invoice>

Please Log in or Create an account to join the conversation.

More
14 hours 4 minutes ago #175761 by Tuan Pham Ngoc
Replied by Tuan Pham Ngoc on topic PEPPOL requirements for Events and Memberships
Thanks @MOLEDesign . This XML is simpler than what I saw before. But even if we can generate that xml invoice like that, the next question is where should that XML is sent to? And how to send it?

Tuan

Please Log in or Create an account to join the conversation.

  • MOLEDesign
  • Topic Author
  • Offline
  • New Member
  • New Member
More
12 hours 28 minutes ago #175762 by MOLEDesign
Replied by MOLEDesign on topic PEPPOL requirements for Events and Memberships
I was playing with PEPPOL before i started this thread - but i think you just send the file to BILLET as FILE, dont send an XML string for Billit

I have uploaded my code to GIT with a readme - may get you started if you havnt already

You will have to work with one of the others in this thread to test with BILLIT itself, my client owns that system, not myself

github.com/MOLEDesign/PEPPOL-and-BILLET/tree/main

Honestly, the XML is standard, all that changes is the end point and delivery (XML vs XML File)

Please Log in or Create an account to join the conversation.

  • MOLEDesign
  • Topic Author
  • Offline
  • New Member
  • New Member
More
12 hours 20 minutes ago - 12 hours 18 minutes ago #175763 by MOLEDesign
Replied by MOLEDesign on topic PEPPOL requirements for Events and Memberships
The PEPPOL process

- User registers for an event / membership
- Stripe (or whatever) processes the payment
- Stripe Payment confirmed
- Joomla Create normal PDF invoice (for user)
- Joomla Generate PEPPOL XML version of the invoice
- Joomla Send that XML to a PEPPOL Access Point via API
- Access Point → Delivers to customer’s PEPPOL endpoint (nothing to do with us)

Here is where it gets messed up (as I hate VAT) - Customers do NOT need to manually give you a PEPPOL ID For most cases, we only need their VAT number and their registered company details. However i can tell youi now this is going to be painful BUT we can put the ownership on the customer to make sure info is correct. I will be damned if i try to integrate VIES again
Last edit: 12 hours 18 minutes ago by MOLEDesign. Reason: Added info

Please Log in or Create an account to join the conversation.

More
11 hours 51 minutes ago #175764 by Tuan Pham Ngoc
Replied by Tuan Pham Ngoc on topic PEPPOL requirements for Events and Memberships
For billit, they provide API for us to pass data to them to generate invoice. We do not generate xml invoice ourself. I do not know about other providers. Maybe for the time being, we can try to have a plugin integrate with billit first, then we will see how it goes

Regards,

Tuan

Please Log in or Create an account to join the conversation.