Case study / Team

Vidimo: e-invoicing and integrations for partners

E-invoices, receiving from SDI and basic accounting. With an API and webhooks for anyone who wants to offer invoicing inside their own product.

Role
Head of Product, project foundation, partner integrations
Team
The company’s product team
Status
In development
Stack
  • React
  • TypeScript
  • Laravel
  • PostgreSQL
  • Node.js
  • AWS S3 · SQS
  • FatturaPA · SDI

The problem

In Italy every invoice goes through SDI (the Italian e-invoicing exchange system): it has to be produced in a precise XML format, signed, sent, and then tracked through delivery or rejection notifications. Anyone with an industry-specific management system, like UnigestPro, needs to issue invoices for their own customers without building and maintaining all of this themselves.

Vidimo answers two needs: a complete management platform for businesses and professionals, and an invoicing foundation that other products can integrate.

Context and team

Vidimo is a product of the company I work for, still being built, and I’m its Head of Product. We’re developing it as a team, alongside UnigestPro. UnigestPro is Vidimo’s first integrated partner: it creates accounts for its own customers, issues invoices on their behalf and receives payments via webhooks.

My contribution

  • Starting the project and the Docker environment.
  • The partner integrations: API keys, partner account creation, richer webhooks; payments, received invoices and revenue exposed to partners, and a chart of accounts ready when the account is created.
  • Visual alignment with UnigestPro through the shared design system.
  • The shared foundations brought over from UnigestPro: file handling with previews of PDFs and Office documents, error auditing, the password rule, Google sign-in and password recovery.

Design choices

The document is the interface

You fill in the invoice directly on the page, as it will look to the recipient. Optional sections (withholding tax, stamp duty, pension fund contribution, transport, split payment) appear only when needed.

An invoice number is never wasted

Numbering is assigned atomically: two invoices created at the same moment can’t get the same number, and an error doesn’t leave gaps in the sequence. Creating an invoice used to take several calls and could leave half-finished documents; now it’s a single operation.

Accounting rules in the database

Rules that must never be broken live in the database, not just in the code: a journal entry can’t be confirmed if debits and credits don’t match. Every attempt to send to SDI is recorded as a new row, so an invoice’s history stays complete.

Heavy work outside the application

Sending to SDI, receiving notifications and generating PDFs run in a separate Node.js service, fed by queues. The XML files stay on S3, with a checksum in the database.

Outcome and status

Vidimo is in development. Today it covers issuing and receiving e-invoices, credit notes, journal entries, chart of accounts, VAT settlement and payment schedule. For partners it offers a documented API and webhooks. It is the invoicing module of UnigestPro.

Other projects

Contact

Got a product
to build?

Tell me about the problem, the context and where you want to go. I’ll reply with precise questions and a concrete proposal.

Tell me about your projectConnect on LinkedInGitHub

ciao@giovannibevacqua.com