Urgent.News

What's breaking now, across thousands of outlets.

Tech

I wired my own Symfony invoicing to a French e-invoicing platform. Five things I learned.

France made e-invoicing mandatory in stages. Since 1 September 2026, every VAT-registered company must be able to receive electronic invoices through an approved platform (a "plateforme agréée", formerly called PDP). Large companies already issue them. Small and medium businesses must issue them, and report their B2C sales, from 1 September 2027. Before offering this to e-commerce clients, I did…

Since 2026, France mandates e-invoicing for VAT-registered businesses. Large companies already comply, while small and medium enterprises must start by September 2027. For my own Symfony app, I integrated it with an approved e-invoicing platform, enabling both issuing and receiving invoices. My findings reveal five crucial insights.

First, there are two distinct invoice types: domestic business-to-business (B2B) and consumer or international transactions. The code routes e-invoices to the platform while e-reporting handles B2C and foreign sales. Data reliability is key, as many shops lack accurate customer categorization.

Second, the platform receives structured XML via Factur-X. I generate UBL invoices, which clients receive as Factur-X PDFs containing embedded EN16931 CII XML. Both formats originate from the same invoice, ensuring consistency.

Third, an invoice has a defined lifecycle: submitted, received, made available, rejected, and paid. The platform updates statuses via webhook or polling. I translate official statuses to three admin-friendly states: pending, received, and rejected. Rejects are critical, as unaddressed invoices result in unpaid taxes.

Fourth, implement a safety mechanism before connecting to the platform. Feature flags prevent unauthorized transmissions. I store invoices locally until transmission is approved, and pass unique invoice IDs for traceability.

Lastly, receiving invoices is now mandatory. My app already retrieves supplier invoices through the platform's API. If you're not already doing this, focus on this aspect first. For platforms like Sylius or custom Symfony shops, the real advantage lies in leveraging your own order data to seamlessly route orders to e-invoicing or e-reporting, generate Factur-X invoices, transmit them through approved platforms, and maintain the invoice lifecycle.

While open-source Factur-X generation for Sylius exists, connecting to a real e-invoicing platform and handling B2C e-reporting remain challenges. I'm Pierre-Arthur Demengel, a Symfony and Sylius developer based in Metz, France. Should you be working on this for a French business, I invite you to ask questions in the comments.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

From Rocket Science to Code: 12 Real-World Thermodynamic Notebooks with pyglenn

Engineering textbooks routinely introduce gas dynamics under the convenient assumption of constant specific heats. Students memorize that air has a heat capacity ratio ( γ ) of 1.4, calculate cycle…

  • pyglenn-notebooks showcase real-world thermodynamic modeling
  • Brayton cycle efficiency formula assumes constant specific heats
  • pyglenn reveals 2.6 percentage point efficiency difference

Using NLTP with MQTT: Healing 35% Wireless Packet Loss on ESP-NOW & UDP Before Your Broker

If you have ever deployed outdoor sensor nodes over noisy 2.4 GHz radio links, ESP-NOW, or rural 4G CGNAT modems, you have probably hit the First-Mile Wall : MQTT over TCP is great inside the cloud…

  • NLTP protocol developed to address wireless packet loss in ESP-NOW and UDP
  • NLTP improves packet loss recovery by up to 35% before reaching MQTT broker
  • NLTP uses compact header, LZ4 compression, AEAD, and Reed-Solomon error correction

Best Time to Post on Social Media: 3 Studies, 3 Different Answers

Search for the best time to post on social media and you get a confident answer in the first result, a different confident answer in the second, and a third in the next one.

  • Hootsuite, Sprout Social, Buffer each recommend different posting times
  • Studies agree weekdays are better than weekends for most networks
  • Founder following all three studies would be confused by contradictory advice

Pace: Converting Time and Distance Into a Number You Can Train With

Pace looks like a single division: take the time you took, divide by the distance you covered, and you have a pace. The arithmetic is easy.

  • Pace calculated by dividing elapsed time by distance
  • Convert units consistently to avoid errors
  • Multiply pace by distance to estimate finish time

Hourly to Annual Pay: The Math and the Assumptions Behind It

Converting an hourly rate into an annual figure looks like multiplication, and that is exactly where the trouble starts. The multiplier is not a constant: it depends on how many hours you actually…

  • Hourly-to-annual conversion isn't simple multiplication; varies with unpaid time, overtime, bonuses
  • Standard formula: annualbasesalary = hourlyrate × hoursperweek × weeksperyear (2080 hours in US)
  • Adjustments: unpaid vacation reduces hours; paid holidays increase hours

More from Saturday 14 November →