Equipe Extension - FEI Schedule Import
This extension reads an FEI approved schedule (PDF) and updates the meeting in Equipe: prize money of every competition, horses per athlete, extra fees, the qualification lists of the Grand Prix, and the officials.
Features
- Reads the FEI approved schedule PDF: no typing, no AI — the FEI layout is fixed and read as is
- Prize money: total prize money, amount from 14th place, prize money chart (25 % or 30 %), currency
- Horses per athlete: "Number of horses per athlete" written on each competition
- Extra fees: horse fees, other fees, no-shows / late withdrawals, with their price and VAT rate
- Fees hidden in notes: "50€ + 21% for small truck", "50€ for larger horse"… become extra fees of their own
- Grand Prix: "Qualif" and "Reserves" lists created, GP restricted to the Qualif list, "Only allow horses that completed at least one competition" ticked
- Officials: ground jury, course designers, stewards, veterinarians created as people (official) and set on each competition in the right order — chosen person by person
- Several weeks: one PDF with Week 1 / Week 2, numbering restarting at 1 or running on
- Several arenas: arena written on each competition when the schedule uses more than one
- Respects what already exists: extra fees and lists set up by hand are recognised and left untouched
- Preview first: nothing is written until you click Apply
- One undo: every write of a run shares one transaction, undoable in Equipe in one action
- Safe to run again: a new version of the schedule (V3, V4…) updates what changed, without duplicates
Usage
Import Interface
- In Equipe, open the meeting (the FEI entries import must already have created the competitions)
- Click on the "Schedule Import" action

- In the window that opens:
- Choose the FEI approved schedule PDF
- Click "Preview"
- The extension displays, week by week:
- Event, FEI show ID, schedule version, weeks and dates
- To check: anything it could not match or found inconsistent
- Competitions to update: each change, old value → new value
- Extra fees: name, price incl. VAT, VAT rate, date, status
- Lists: Qualif / Reserves lists of the Grand Prix
- Officials: role, Equipe type, name, NF, FEI ID, Import / On comp. checkboxes, status
- Not handled: free fees, Equipe competitions not in the schedule
- Tick or untick "Import officials", and person by person "Import" / "On comp."
- Click "Apply" to write everything, or "Probe (1 + 1)" to write one extra fee/list and one competition first and see what Equipe returns


After Apply, the result and what Equipe returned:

Steps
| Step | ||
|---|---|---|
| 1 | Upload the schedule | The FEI approved schedule PDF |
| 2 | Review | Nothing is written yet |
| 3 | Probe (optional) | One extra fee/list + one competition |
| 4 | Apply | Everything, in one transaction |
Status Indicators
- new: will be created
- exists · 128: created by this extension on a previous run, will be updated
- already in Equipe · 27 « NCH - Non Competing Horse » — left as is: made by hand, recognised, not touched
- already up to date: competition already holds the schedule's values
What Is Written
Competitions
| Field | From the schedule | Example |
|---|---|---|
Prize money (premietxt1) |
Total prize money, amount from 14th place | 4000, 10 — GP « N/A » → 120000 |
prsum1 |
Total prize money | 4000 |
| Prize money chart | Chart 1 → 25 %, Chart 2 → 30 % | 25 |
| Currency | EUR |
|
| Max horses per rider | Number of horses per athlete | 2 |
Arena (tavlingspl) |
Competition arena, without "Arena" — only if several arenas | Nelson Pessoa |
Class number (clabb) |
Only if several weeks numbered from 1 each | W1-5, W2-5 |
Only fields whose value changes are sent.

Grand Prix
- Every GP (article -GP or "Grand Prix" in the name): "Only allow horses that completed at least one competition" ticked
- GP with a qualification system:
- List Qualif CSI2 (code
Qualif-CSI2) and Reserves CSI2 (codeReserves-CSI2) - Several weeks:
W1 Qualif CSI3*/W1-Qualif-CSI3 - Dated like the masterlists of the week
- The GP accepts only the riders of the Qualif list (
only_rider_list_ids)
- List Qualif CSI2 (code
- The lists are created empty: they are filled by the Qualifications extension, which shows them in its "Destination Lists" by their code
Extra Fees
- One extra fee per line of HORSE FEES, OTHER FEES and NO-SHOWS AND LATE WITHDRAWALS, per week
- Dated 2 days before the first competition of the week
- Price VAT included and VAT rate read from the schedule, line by line (6 / 21 % in Belgium, 5.5 / 10 / 20 % in France…)
- Club discount off, "Respect 'Do not charge VAT'" on
- Free lines (0.00 EUR) and ATHLETE FEES are not imported
- Name:
Hay— several weeks:Week 1 - Hay

Fees Hidden in Notes
The schedule:
Fee for lorry parking 95.00 EUR + 21.00% VAT = 114.95 EUR per lorry/caravan
50€ + 21% for small truck
The fee includes electricity.
Double Boxe 165.29 EUR + 21.00% VAT = 200.00 EUR per box
50€ for larger horse
is imported as:
| Extra fee | Price incl. VAT | VAT |
|---|---|---|
| Fee for lorry parking | 114.95 | 21 % |
| Fee for small truck | 60.50 | 21 % |
| Double Boxe | 200.00 | 21 % |
| Larger box | 50.00 | 0 % |
- "for X" → Fee for X — "for larger horse" under a box → Larger box — "non EU" → Fee for … (non EU)
- "+ 21%" → that rate — "+ VAT" → rate of the line, or the most common rate of the schedule — "incl. VAT" / "ttc" → price incl. VAT — nothing stated → 0 %
- "for 2 weeks" → created once, in week 1
- A note repeating a price already listed ("90€ ttc inside EU") is not a new fee
No-Shows and Late Withdrawals
- "Amount charged 250.00 EUR" is printed without VAT: the most common VAT rate of the schedule is added (Liège: 250 + 21 % = 302.50)
Officials
Section V of the schedule ("OFFICIALS").
Choices
| Checkbox | Where | Default |
|---|---|---|
| Import officials | next to Apply | ticked — unticked: nothing is done for officials |
| Import | each line of the Officials table | ticked for every role Equipe knows |
| On comp. | each line of the Officials table | ticked for Ground Jury President, Foreign Judge, Course designer |
- The competitions table and the counters follow the ticks live
- Apply sends exactly what is shown

Foreign Judge unticked "On comp.", a Ground Jury member ticked:

The competitions follow at once:

People
- Each imported official becomes a person in Equipe with official ticked and his FEI ID
- A person already in Equipe (same FEI ID, or same name and country) is reused, not created twice
- A person already in Equipe without "official" ticked is shown as not flagged official and left as is
Competitions
- The officials ticked On comp. go into Officials (
officials_data) of every competition of their week and level- "All Events" → every competition of the week
- "CSI2" → only the CSI2 competitions
- Several weeks: each week has its own officials (section V lists them week by week); a week's competitions get only that week's officials. Gassin: Foreign Judge Kassandra Mohr in week 1, Stephen Lynch in week 2
- Several course designers: each gets the competitions of his levels (Gassin W1: Ron Hamon Serval on CSI3 / CSI1, Jean Christophe Laparra on CSI2*)
- In the Officials table, each line is one role in one week (
W1 · Foreign Judge): the checkboxes choose week by week - Officials already set on a competition are kept
- Order on every competition: Ground Jury President, Foreign Judge, Ground Jury members, Course Designer, then assistant course designers, technical delegate, stewards
- A competition already holding the right officials in another order is put back in order ("reordered" in the preview)
Roles
| Schedule | Equipe type |
|---|---|
| Ground Jury President | ground_jury_president |
| Ground Jury Member | ground_jury_member |
| Foreign Judge | foreign_judge |
| Technical Delegate | technical_delegate |
| Course designer | course_designer |
| Assistant Course Designer | course_designer_assistant |
| Chief Steward | chief_steward |
| Steward | assistant_steward |
| Veterinary Delegate | foreign_veterinary_delegate |
| Additional Veterinary Delegate | veterinary_commission_member |
| Veterinary Service Manager (VSM) | treating_veterinarian_president |
| Treating Veterinarian | treating_veterinarian_member |
Farrier and Medical Services are not imported (no Equipe type).
Multi-Week Shows
- One PDF can hold several weeks ("WEEK 1 - …", "WEEK 2 - …")
- Numbering may restart at 1 each week (1→26 / 1→26) or run on (1→32 / 33→64): both are handled
- Numbering restarting at 1 → class numbers become
W1-5,W2-5so they stay unique - Extra fees and lists are created per week, prefixed
W1/Week 1
How Competitions Are Matched
- Class number + date + level: schedule N°6 on 22/10, CSI2 ↔ Equipe competition
clabb6 on 22/10 whose name starts with CSI2 - If no class number matches: the competition's rank inside its FEI event (end of the FEI id, e.g.
…_S_S_01_04= 4th CSI2* competition) + date + level - No single match, or right number but wrong level → nothing is written, the competition is listed under "To check"
What Already Exists in Equipe
When the meeting was set up by hand, the extension reuses what is there instead of creating it twice:
- Extra fees: same price and same VAT rate; when several share a price (Tackbox / NCH, both 250 € at 21 %), the words of the label decide
- Qualif / Reserves lists: "Qualif" or "Reserves" + level (+ week) in the name or code, e.g.
CSI2*-GPQual"CSI2* Qualif GP" - Recognised items are never modified; their number is used to link the GP
Checks
Shown under "To check", nothing is corrected:
- Sum of the competitions ≠ "Total Prize Money" of the tour
- Height in the competition name ≠ "Height of obstacles" (e.g. "1m40" with 130 cm)
- Competition of the schedule not found in Equipe
- Equipe competition in the show dates but not in the schedule ("Not handled")
Possible Combinations
- ✅ First import: right after the FEI entries import — prize money, fees and GP lists in one run
- ✅ New schedule version (V2, V3…): run again, only the changes are written
- ✅ Meeting set up by hand: only what is missing is created
- ✅ Several weeks: one PDF, all weeks at once
- ✅ Officials already set by hand: kept, missing ones added, all put in order
Import Process Flow
- Read the PDF: weeks, competitions, fees, GP qualification rules
- Read the meeting:
competitions.json(+people.jsonwhen the schedule lists officials) - Match competitions, fees and lists; build the preview
- On Apply:
- Batch 1: officials (people) + extra fees + Qualif / Reserves lists
- Read
competitions.jsononce to get the numbers of the new lists (andpeople.jsonif officials were created) - Batch 2: competitions, with the GP linked to its Qualif list and the officials set
Settings
Everything has a default. To change one, add the line to config.php:
| Setting | Default | |
|---|---|---|
'fee_days_before' => 2, |
2 | Extra fees dated N days before the week's first competition |
'skip_free_fees' => true, |
true | No extra fee for 0.00 lines |
'extra_fee' => ['klubbrab' => true], |
off | Club discount on every extra fee |
'qualified_prefix' => 'Qualif', |
Qualif | Name of the qualified riders list |
'reserves_prefix' => 'Reserves', |
Reserves | Name of the reserve riders list |
'week_clabb' => false, |
true | Keep class numbers as they are on multi-week shows |
'link_gp_qualified' => false, |
true | Do not restrict the GP to the Qualif list |
'import_officials' => false, |
true | No officials at all (nothing read, checkbox greyed) |
'competition_official_roles' => ['Ground Jury President', 'Foreign Judge', 'Course designer', 'Technical Delegate'], |
the 3 roles | Roles ticked "On comp." by default |
'officials_order' => ['ground_jury_president', 'foreign_judge', 'ground_jury_member', 'course_designer'], |
President, Foreign Judge, members, CD… | Order of the officials on a competition |
'official_types' => ['Steward' => 'judge'], |
table above | Change the Equipe type of a role |
Requirements
pdftotext(poppler-utils) on the server- The meeting's competitions created by the FEI entries import
Troubleshooting
- "No competition could be read from this PDF": the file is not an FEI approved schedule, or
pdftotextis missing - A competition is under "To check": its class number or date differs between the schedule and Equipe — correct it in Equipe and run Preview again
- An extra fee is created although it exists: its price or VAT rate differs from the schedule — align it in Equipe, or delete the new one
- The GP is not linked to the Qualif list: run Apply again — the list now exists and will be linked
- The Qualif list does not appear in the Qualifications extension: that extension shows only lists dated in the current week (Monday–Sunday)
- An official is not on the competitions: tick "On comp." on his line before Apply
- An official is created twice: the person in Equipe has no FEI ID and a different name spelling — add the FEI ID to the person in Equipe
- Something went wrong: undo the run in Equipe (one transaction), fix, and run again