April was about polishing the Peppol flow now that it has been running in production for a few months, adding VAT export invoicing for riders outside the EU, and making the parts of the app that organizers use every day faster.
đ New features
VAT export invoicing (App)
Organizers can now invoice riders outside the EU without VAT. Mark a person as outside the EU and the invoice prints as a VAT export with a single VAT sentence, not two overlapping ones. The flag stays put when you transfer balances between shows.
UK VAT number lookup (App)
We've connected to HMRC so UK VAT numbers can be validated directly, the same way we already do for EU numbers via VIES.
Peppol batch sending (App)
You can now send Peppol invoices in bulk from the people page, in the same flow you use for email invoices. A new Peppol filter helps you find the people who should get one. Peppol invoices also go out as part of the automatic invoice sending routine, so you don't have to send them manually anymore.
Team competitions in score summary (App)
Score summary disciplines now support team competitions. Individual and team results broadcast and publish together after a fetch, so live results stay in sync.
Malaysian ringgit (MYR) (App)
MYR is now a supported currency.
âš Improvements
Dressage judge selector replaced with autocomplete (App)
The judge dropdown was sorted by first name, which made it hard to find someone when you only remembered the surname. We replaced it with an autocomplete that searches both first and last name. You can still see the full list without typing anything.
Peppol details
- Sent Peppol invoices print as "Invoice" instead of "PRO FORMA".
- Invoice number and date are locked once an invoice has been sent through Peppol, so the audit trail can't drift.
- The Peppol dropdown links to the last sent PDF so you can quickly see what was actually delivered.
- Credits are sent as negative invoice lines instead of UBL allowance charges, which fixes validation errors with some Peppol receivers.
- Peppol no longer auto-enables from the send-to default. You opt in explicitly.
Invoice email subject truncated for many horses (App)
When an invoice covers more than three horses, the email subject is shortened instead of listing every horse name. Inboxes look cleaner.
Judge alias on "act as judge" buttons (App)
If a judge has been set up with an alias (e.g. after a last-minute swap), the act-as-judge buttons in the dressage score sheet now show the alias rather than the original position.
Webhook delivery errors notify the extension author (App)
When a webhook delivery fails, we now notify the extension author so they can fix the integration on their end. Previously these errors disappeared silently.
Online sign-in button always visible (App)
The globe button for signing in to online.equipe.com now shows regardless of whether the show is published or not. After unarchiving a show, you no longer have to publish it again to open it from the app.
Smaller things
- Long descriptions in autocomplete textareas no longer get cut off. You can use newlines too.
- "Timing to Equipe" is available as a bell sound in the FDS binary driver.
- "Born year (FO)" is available as a column dependency on startlists.
- Native share sheet works correctly on Android (Online).
- The federation search redirects to the FEI search when the federation doesn't exist.
đ Bug fixes
- Entries to closed competitions: entries started before a competition closed could still be submitted after closing. This is now blocked at submit time (Entry).
- Stale per-judge percents on elimination: when the judge at C eliminated a rider, the other judges' percent totals and ranks weren't cleared. We now reset all derived state atomically and skip writes from non-C judges when the start is eliminated.
- Working Equitation team results: team totals are now summed by published points (psum), matching what's shown on the protocol.
- Custom field columns on renumbering: custom fields are now resolved when starts are renumbered.
- Scoreboard countdown at clock auto-start: the countdown diff is broadcast to scoreboards when the clock auto-starts at 0, so the display doesn't appear frozen for a fraction of a second.
- Score summary deadlocks: score summary jobs were occasionally deadlocking under load. They now serialize properly, and we skip duplicate team alerts.
- Refund rounding: floating-point rounding caused entry refunds to be off by a cent in some cases (Entry).
- FEI XML max score: deduction sections are excluded from the max score in published XML, so FEI exports don't double-count deductions.
- Bulk updates: bulk update endpoints return 422 instead of 500 when the request body is missing top-level params.
- Horse reports: sortable columns are validated, so a typo doesn't crash the page.
- Start fetch: invalid from/to pairs are dropped with a clear warning instead of failing the whole import.
- Invoice publishing: a missing rider in the entry system no longer blocks invoice publishing.
- Class section page (Online): returns 404 instead of 500 when the meeting is missing.
đ Regulatory updates
- VAT export for riders outside the EU is now supported, with the correct single VAT sentence on the PDF.
- UK VAT lookup via HMRC matches the EU VIES integration.
- Peppol continues to mature for Belgian organizers under the 2026 mandate. See the Peppol details above for this month's fixes, and our dedicated Peppol post from December for the full background.
⥠Faster where it matters
Performance is something we keep working on because slow software wastes the time of the people running shows. A few wins this month, in plain language:
- Invoice and economy queries are 70-77% faster. We rewrote the economies SQL view to use a person-scoped function. Person reports went from around 1.4 seconds to roughly 300ms on large tour meetings.
- Background jobs and caching moved off Redis. We have now done the same migration we did on Equipe Online last month. Concurrency limits on the noisiest jobs prevent the duplicate-job deadlocks we've been seeing.
You shouldn't notice any of this except that things load faster.
đŹ What we're hearing
A few patterns from support this month:
- Team jumping with individual starts: still our most-asked question, but now most users have moved on to applying the new flow to existing shows rather than asking how to set it up from scratch.
- Peppol activation in Belgium: ongoing questions about how to get set up. We're refining the activation flow and the help article based on what we're seeing.
- Vaccination lists: recurring questions about creating, importing from TDB, and publishing them. A help article on the full flow is on our list.
- Working Equitation: several questions about removing the dressage section in WE classes that don't include it, and about adding judges. We're improving the docs.
- Withdrawals with refund: a few requests for a "withdrawal with refund" option for vet certificates and similar. Noted.
We read every question and report. Keep them coming.