Skip to main content
Petanque Life

Competition Format Catalog

F04.10 63 features Planned

At a glance

A complete catalog of supported competition formats — knockout, double elimination, consolante, round-robin, poules+knockout, Swiss, Monrad, mêlée, super-mêlée, marathon, américaine, tête-à-tête integral — plus championship, cup, series, and shooting formats (tir de précision, tir rapide, tir progressif, relais), all configurable by a custom format builder.

How it works

Each format is a typed configuration that the draw engine and scoring engine consume. Tournament formats include knockout (single elimination), double elimination (losers bracket), consolante (separate bracket for first-round losers), round-robin, poules + knockout (the most common), Swiss, Monrad, mêlée (random teams each round, individual ranking), super-mêlée (mixed levels with partner rotation), marathon (continuous play, most wins), américaine (doublette with partner change), and tête-à-tête integral (everyone plays everyone). Championship types pin team format and boules-per-player: Tête-à-tête (3 boules), Doublette (3 boules), Triplette (2 boules), Mixte (mandatory male+female), Combiné (match play + shooting), Championnat des Clubs (inter-club), and Championnat des Nations (national delegations).

Shooting competitions are first-class formats with their own scoring: Tir de Précision targets specific zones on court (FIPJP-defined positions) with a points-per-zone scoring system, Tir Rapide adds a countdown timer per attempt, Tir Progressif ramps difficulty (distance, angle, obstacles) with level progression, and Relais de Tir runs a team relay where each player shoots in sequence. Shooting events have their own leaderboard separate from match rankings, accuracy statistics per player (career/season/competition), and can run standalone or be embedded in a Combiné championship. Video replay integration lets coaches analyse shooting technique.

Cup and open types add Coupe (knockout with seeding across weeks), Grand Prix / Ranking tournament (high coefficient), Challenge / Trophée (invitational), Masters / Finale (end-of-season top players), World Games entries, Youth, Veterans, Para-Petanque, and Women's Championships. Series and circuits manage multi-event competitions: which events count, running standings, best-of-N (only top X scores count), and series-finale qualification. The format configuration engine sits underneath: a custom format builder combines stages (poules → repechage → knockout), defines stage transition rules (how many advance), points-to-win per round (11/13/custom), match/mène time limits, tiebreakers, and runs format validation to ensure rules are internally consistent.

Format preview simulates a tournament with N teams to check the flow before committing.

Key capabilities

  • Tournament formats: knockout, double elimination, consolante, round-robin, poules+knockout, Swiss, Monrad, mêlée, super-mêlée, marathon, américaine, tête-à-tête integral
  • Championship types: Tête-à-tête, Doublette, Triplette, Mixte, Combiné, Clubs, Nations
  • Shooting formats: Tir de Précision, Tir Rapide, Tir Progressif, Relais de Tir with separate leaderboards
  • Cup, Grand Prix, Challenge, Masters, Youth, Veterans, Para-Petanque, Women's championships
  • Series management: best-of-N, series finale qualification, sponsorship per circuit
  • Custom format builder combining stages with transition rules and points-to-win configuration
  • Format validation and preview simulating N teams to check flow

In practice

A French organizer wants a hybrid event: an open Triplette Saturday morning followed by a Tir de Précision exhibition Saturday afternoon, with the same field combined into a Combiné classification. He uses the custom format builder to chain a poules+knockout stage (8 poules of 4 → top 16 to bracket) with a Tir de Précision stage scoring per zone hit, sets points-to-win to 13 in pool and bracket, configures the tiebreaker, and runs format preview with 32 teams. The simulation flags a court-availability conflict — afternoon shooting needs marked targets — so he restructures sessions and re-validates.

Saturday runs to plan; the combined classification is published with shooting points added to match points.

Features in this subsystem

63
ID Status Features
F04.10.01 Shipped Knockout / Elimination — single elimination, loser goes home — PL-F0410a ✅ PL-F0410a
F04.10.02 Shipped Double elimination — losers bracket, second chance — PL-F0410a ✅ PL-F0410a
F04.10.03 Shipped Consolation bracket (consolante) — separate bracket for first-round losers — PL-F0410a ✅ PL-F0410a
F04.10.04 Shipped Round-robin — everyone plays everyone — PL-F0410a ✅ PL-F0410a
F04.10.05 Shipped Poules + Knockout — group stage then elimination (most common) — PL-F0410a ✅ PL-F0410a
F04.10.06 Shipped Swiss system — paired by similar results, no elimination — PL-F0410a ✅ PL-F0410a
F04.10.07 Shipped Monrad system — Swiss variant (Scandinavian, strength-based pairing) — PL-F0410b ✅ PL-F0410b
F04.10.08 Shipped Mêlée — individual entry, random team draw each round, individual ranking — PL-F0410b ✅ PL-F0410b
F04.10.09 Shipped Super-mêlée — like mêlée but mixed levels, partner rotation every round — PL-F0410b ✅ PL-F0410b
F04.10.10 Shipped Marathon — continuous play all day, most wins/points wins — PL-F0410b ✅ PL-F0410b
F04.10.11 Shipped Américaine — doublette with partner change after each match (round-robin style) — PL-F0410b ✅ PL-F0410b
F04.10.12 Shipped Tête-à-tête integral — every player plays every other player — PL-F0410b ✅ PL-F0410b
F04.10.13 Shipped Championnat Tête-à-tête — singles championship (3 boules each) ✅ PL-F0410c ✅ PL-F0410c
F04.10.14 Shipped Championnat Doublette — doubles championship (3 boules each) ✅ PL-F0410c ✅ PL-F0410c
F04.10.15 Shipped Championnat Triplette — triples championship (2 boules each) ✅ PL-F0410c ✅ PL-F0410c
F04.10.16 Shipped Championnat Mixte — mixed doubles/triples (mandatory male+female) ✅ PL-F0410c ✅ PL-F0410c
F04.10.17 Shipped Championnat Combiné — combined competition (match play + shooting skills) ✅ PL-F0410c ✅ PL-F0410c
F04.10.18 Shipped Championnat des Clubs — inter-club championship (club sends multiple teams) ✅ PL-F0410c ✅ PL-F0410c
F04.10.19 Shipped Championnat des Nations — nation vs nation (national delegations) ✅ PL-F0410d ✅ PL-F0410d
F04.10.20 Shipped Tir de Précision — precision shooting at marked targets on court ✅ PL-F0410d ✅ PL-F0410d
F04.10.21 Shipped Tir de Précision scoring system (points per target zone hit) ✅ PL-F0410d ✅ PL-F0410d
F04.10.22 Shipped Tir de Précision court layout management (target positions per FIPJP rules) ✅ PL-F0410d ✅ PL-F0410d
F04.10.23 Shipped Tir Rapide — rapid shooting against the clock ✅ PL-F0410d ✅ PL-F0410d
F04.10.24 Shipped Tir Rapide timer integration (countdown per attempt) ✅ PL-F0410d ✅ PL-F0410d
F04.10.25 Shipped Tir Progressif — increasingly difficult targets (distance, angle, obstacles) ✅ PL-F0410e ✅ PL-F0410e
F04.10.26 Shipped Tir Progressif level progression and scoring ✅ PL-F0410e ✅ PL-F0410e
F04.10.27 Shipped Relais de Tir — team shooting relay (each player shoots in sequence) ✅ PL-F0410e ✅ PL-F0410e
F04.10.28 Shipped Shooting competition leaderboard (separate from match rankings) ✅ PL-F0410e ✅ PL-F0410e
F04.10.29 Shipped Shooting accuracy statistics per player (career, season, competition) ✅ PL-F0410e ✅ PL-F0410e
F04.10.30 Shipped Shooting competition as standalone event or embedded within combined championship ✅ PL-F0410e ✅ PL-F0410e
F04.10.31 Shipped Video replay integration for shooting competitions (analyze technique) ✅ PL-F0410f ✅ PL-F0410f
F04.10.32 Shipped National Championship (qualification pathway: club > regional > national) ✅ PL-F0410f ✅ PL-F0410f
F04.10.33 Shipped Continental Championship (e.g., European Championship) — national delegations ✅ PL-F0410f ✅ PL-F0410f
F04.10.34 Shipped World Championship — FIPJP sanctioned, all disciplines ✅ PL-F0410f ✅ PL-F0410f
F04.10.35 Shipped Cup / Coupe — knockout with seeding, often multi-round across weeks ✅ PL-F0410f ✅ PL-F0410f
F04.10.36 Shipped Grand Prix / Ranking tournament — open entry, high ranking points coefficient ✅ PL-F0410f ✅ PL-F0410f
F04.10.37 Shipped Challenge / Trophée — invitational tournament (organizer selects participants) ✅ PL-F0410g ✅ PL-F0410g
F04.10.38 Shipped Masters / Finale — end-of-season event for top-ranked players ✅ PL-F0410g ✅ PL-F0410g
F04.10.39 Shipped World Games — multi-sport event with petanque included ✅ PL-F0410g ✅ PL-F0410g
F04.10.40 Shipped Youth Championship — dedicated age-group championships (U13, U15, U18, U23) ✅ PL-F0410g ✅ PL-F0410g
F04.10.41 Shipped Veterans Championship — 55+, 65+ categories ✅ PL-F0410g ✅ PL-F0410g
F04.10.42 Shipped Para-Petanque Championship — disability classifications ✅ PL-F0410g ✅ PL-F0410g
F04.10.43 Shipped Women's Championship — dedicated women's events at all levels ✅ PL-F0410h ✅ PL-F0410h
F04.10.44 Shipped Championship series — multiple events, cumulative points determine overall winner ✅ PL-F0410h ✅ PL-F0410h
F04.10.45 Shipped Series calendar management (which events count) ✅ PL-F0410h ✅ PL-F0410h
F04.10.46 Shipped Series standings (running total across events) ✅ PL-F0410h ✅ PL-F0410h
F04.10.47 Shipped Best-of-N scoring (only top X results count) ✅ PL-F0410h ✅ PL-F0410h
F04.10.48 Shipped Series finale qualification (top N qualify for finale) ✅ PL-F0410h ✅ PL-F0410h
F04.10.49 Shipped Series sponsorship and branding per circuit ✅ PL-F0410i ✅ PL-F0410i
F04.10.50 Shipped Custom format builder (combine stages: poules → repechage → knockout) ✅ PL-F0410i ✅ PL-F0410i
F04.10.51 Shipped Stage transition rules (how many advance from each stage) ✅ PL-F0410i ✅ PL-F0410i
F04.10.52 Shipped Points-to-win configuration (11, 13, or custom per round/stage) ✅ PL-F0410i ✅ PL-F0410i
F04.10.53 Shipped Time limit per match/mène (configurable per competition) ✅ PL-F0410i ✅ PL-F0410i
F04.10.54 Shipped Tiebreaker configuration per format ✅ PL-F0410i ✅ PL-F0410i
F04.10.55 Shipped Format validation (ensure rules are internally consistent) ✅ PL-F0410j ✅ PL-F0410j
F04.10.56 Shipped Format preview (simulate a tournament with N teams to check flow) ✅ PL-F0410j ✅ PL-F0410j
F04.10.57 Shipped Composable Steg▸Fas system per competition class (D-COMP-SYS delta #1, ee51ed1f.m-1) — a class bears an ordered chain of stages, each an ordered pipeline of phases (poule/group/swiss_monrad/round_robin/snake/finals + team-formation select/melee/panache/vauclusienne; tiers A–E, consolante, barrage, semi_pool, multi-stage kval→final). t-1 [DONE]: pure per-fas engine (GenerateComposedDraw). t-2 [DONE]: data model (competition_stage/competition_phase, migration 00062), persistence, and the komponerings-API PUT/GET /v1/competitions/{id}/classes/{cid}/system. t-3 [DONE]: per-fas draw persisted end-to-end (POST …/draws stamps stage_id/phase_id; flat classes stay NULL — FR-9), fas-aware format/preview (unsaved system), and the traceability matrix vs spelsystem.astro. Scoring resolution = delta #2; wizard UI = delta #3. Docs: docs/domain/competition/steg-fas-model.md, docs/domain/competition/steg-fas-sparbarhetsmatris.md, specs/api/competition-compose-system.md, specs/api/competition-draw-per-phase.md. ✅ ee51ed1f.m-1
F04.10.58 Shipped Per-fas/steg/match/klass-poäng + avslutsvillkor (D-COMP-SYS delta #2, ee51ed1f.m-2) — poäng- och avslutsregler löses upp per fas/steg/match i stället för en global points_to_win. En tävling bär default_scoring (end_condition ∈ points \ time_plus_end | fixed_ends, points_to_win, time_limit_min, ends_cap) som ärvs och kan åsidosättas på klass- (scoring_default), steg-, fas- och match-nivå (scoring_override), upplöst fält-för-fält längs kedjan match→fas→steg→klass→tävling. t-1 [DONE]: ren upplösnings-/validerings-/tir-kärna. t-2 [DONE]: additiv migration (00063), upplösning inläst ur bärarna, scoring_override-validering i PUT …/system (13|11|annat relaxat; time_plus_end utan tid → 422), avslutsvillkors-medveten confirm + mjuk-validerings-tröskel (score_above_<N>) mot riktig Postgres, och upplöst scoring_config på GET /v1/matches/{id}. t-3 [DONE]: Tir de précision-poängväg (5 stationer × 5 skott, 0–5/skott, total 0–25) + registrerings-API (POST /v1/matches/{id}/tir-shots, GET …/tir-result, GET /v1/competitions/{id}/classes/{cid}/tir-standings), append-only-korrigering, rangordning + tiebreak (fler 5:or → fler 4:or → …), och strikt separation tir↔klot (fel spelform mot fel väg → 422) bevisat mot riktig Postgres. Wizard-UI = delta #3. Docs: docs/domain/competition/scoring-resolution-model.md, docs/domain/competition/tir-de-precision-scoring.md, specs/api/competition-scoring-resolution.md, specs/api/competition-tir-precision.md. | ✅ ee51ed1f.m-2
F04.10.60 Shipped Format och regler är DATA — disciplin-scopad katalog + namngivna presets i tenant_configs (D-COMP-SYS delta #7, ee51ed1f.m-4) — den katalog av spelformat, systemtyper, fas-enum-domäner och poäng-/klot-regler (FIPJP Art.1) som tidigare låg hårdkodad i Go-maps (recognisedFormats, defaultBoules, validPhaseType, valid*, EndCondition-domänen, maxPointsToWin) är nu disciplin-scopad data i tenant_configs, seedad med en plattforms-baslinje och per-tenant överskrivningsbar — en flerdisciplin-federation (FRA: petanque + jeu_provencal, §N gap #7) bär en egen katalog per disciplin utan att de blandas. Ovanpå katalogen bär tenanten de namngivna presets (§D / spelsystem.astro rad 30–40) som data. t-1 [DONE]: ren datamodell (competition.Catalog/Preset) injicerad i validerarna. t-2 [DONE]: migration 00065 (system_catalog/presets-kolumnerna), disciplin-scopad seed, kant-resolver som injicerar den per-tenant-resolverade katalogen (samma anrop → olika utfall enbart pga data: {"format":"raffa"} → 200 för tenant med override, 422 för baslinje), och preset-läs-API GET /v1/competitions/presets?discipline= (auth-skyddat, tenant-scopat) som wizardens preset-väljare (delta #3) konsumerar — bevisat mot riktig Postgres, ingen Go-map är längre runtime-auktoritet (FR-5). Wizard-UI = delta #3; league-preset-komposition = D-LEAGUE (A-3). Docs: docs/domain/competition/format-katalog-presets-data.md, specs/api/competition-presets-catalog.md. D-FEDCONFIG d0601eb6.m-2 (t-1+t-3) — spelsystem-presets LIVE i federationskonfigurations-hubben: system_catalog/presets skrivbara via PUT /v1/tenant/config (strukturvalidering ValidatePresets/ValidateSystemCatalog, 422 fältpekat) och preset-fliken (#presets) i admin/federationskonfiguration hanterar hela livscykeln som DATA — aktivera/avaktivera (disabled på raden; server-side-filtrerad ur läs-API:t, "avaktivera samtliga" ⇒ tom wizard-lista, aldrig tyst baslinje-fallback), anpassa (kopia med ny key), skapa egen (minimal giltig komposition), ärlig "baslinje"-märkning + materialisering av HELA den upplösta disciplin-listan vid första redigeringen. Genomslag utan omdeploy i wizardens spelsystem-steg och /tavlingar/spelsystem. Vy-spec: specs/admin/views/federationskonfiguration.md. ✅ ee51ed1f.m-4 · d0601eb6.m-2.t-3
F04.10.61 Shipped 7-stegs "Skapa tävling"-wizard + systemkatalog — backend-luckor (delta #3, ee51ed1f.m-5.t-1) — de sista mockup-fälten som saknade en backend-bärare stängs additivt (migration 00066, strikt additiv). competition bär nu de redaktionella Grunder-fälten num_courts/competition_director/contact_email/visibility (public\ members_only|invited, skild från publication_scope) samt write-vägen för default_scoring (§K tävlings-standard, m-2). competition_class får require_license + write-vägen för m-3-constraints (min_age/max_age/gender_rule/squad_size/reserves_allowed) och scoring_default via POST/PATCH …/classes (tidigare bara läsprojektion). Nytt tenant-scopat läs-API GET /v1/competitions/system-catalog?discipline= projicerar katalogens byggstenar (Lagbildning · Kvalfaser · Slutspelsfaser + fas-enum-domäner) som DATA (SystemCatalogView/CatalogBlock), så systemkatalog-vyn (spelsystem.astro) renderar från riktig data i stället för en hårdkodad frontend-lista (AS-2). openapi + genererad TS-klient i synk (make api-ts-client-check). Wizard-UI + katalogvy = t-2/t-3. Bevis mot riktig Postgres: competition_wizard_backend_contract_integration_test.go. Docs: specs/api/competition-system-catalog.md. | ✅ ee51ed1f.m-5
F04.10.62 Shipped Full 7-stegs "Skapa tävling"-wizard, wire:ad mot riktiga endpoints (delta #3, ee51ed1f.m-5.t-2) — admin/components/competition/CompetitionWizard.tsx utökad från 4 → 7 steg i mockup-ordning (tavling-ny.astro): Grunder · Klass & format · Spelsystem · Sanktionering · Anmälan · Domare & jury · Granska & publicera. Varje steg/fält är wire:at till ett endpoint som finns: POST /v1/competitions (utkast + Grunder-fält), POST …/classes (constraints m-3 + scoring_default m-2), GET /v1/competitions/presets (preset-väljaren fyller steg/fas-editorn — inga hårdkodade mall-namn), PUT …/classes/{cid}/system + POST …/format/preview (komponering + fas-medveten förhandsvisning, m-1/m-2), POST …/request-sanction (§I-statuskedja), PATCH /v1/competitions/{id} (anmälnings-konfig), GET /v1/officials + POST /v1/officials/assignments (D-OFF), GET /v1/org-nodes (arrangör), och steg 7 bygger sammanfattningen från läst API-data (GET /v1/competitions/{id} + GET …/system) — aldrig formulärminne. Additiv backend-lucka stängd (FR-24): PATCH /v1/competitions/{id} accepterar nu entry_fee_minor/entry_fee_currency/allow_waitlist (Money *_minor+ISO-4217, NFR-4) för anmälnings-konfig-persistens (bakåtkompat; sqlc-regenererad). Bevis: admin/__acceptance__/competition-wizard.acceptance.mjs grön (7 steg + fält + wiring + kontrakt), npm run build grön, api-ts-client-check i synk, competition_registration_config_integration_test.go mot riktig Postgres. Katalogvy + spårbarhetsmatris = t-3. Docs: specs/admin/views/competition-wizard.md. ✅ ee51ed1f.m-5
F04.10.63 Shipped Fristående systemkatalog-vy (riktig data) + konformitets-/spårbarhetsmatris (delta #3, ee51ed1f.m-5.t-3) — den fristående systemkatalog-vyn (admin/app/tavlingar/spelsystem/page.tsx, route /tavlingar/spelsystem, nåbar från steg 3 via system-catalog-link, mockup spelsystem.astro) renderar hierarki-illustrationen (Tävling ▸ Steg ▸ Fas), de tre byggstens-sektionerna Lagbildning · Kvalfaser · Slutspelsfaser och de namngivna mallarna (presets) — allt från riktiga endpoints (GET /v1/competitions/system-catalog för byggstenarna, GET /v1/competitions/presets för mallarna), inte en hårdkodad frontend-lista (FR-22/AC-13). Serie/liga-preseten visas markerad "via D-LEAGUE" och expanderar inte (A-1). Parsers (parseSystemCatalog/parsePresets/presetViaExternal) är rena + enhetstestade (admin/lib/__tests__/competition-catalog.test.ts). Levererar även konformitets-/spårbarhetsmatrisen (milestones/ee51ed1f.m-5/conformance-matrix.md) som mappar varje steg+fält i tavling-ny.astro och varje byggsten+preset i spelsystem.astro post-för-post → wizard-/katalog-element + endpoint/datakälla. Bevis: node admin/__acceptance__/system-catalog-view.acceptance.mjs grön (vy + byggstens-/preset-testID + riktig-data-wiring + matris), npm run build grön. Docs: specs/admin/views/system-catalog.md, specs/admin/views/competition-wizard.md. ✅ ee51ed1f.m-5
F04.10.59 Shipped Strukturerade kategori-constraints + trupp > lag & reserver (D-COMP-SYS delta #4 + #6, ee51ed1f.m-3) — competition_class bär strukturerade behörighets-constraints min_age/max_age/gender_rule (open\ men_only|women_only|mixed_required, §F/§K, mockup tavling-ny.astro steg 2) + trupp/reserv-modellen squad_size/reserves_allowed (§A/§G: EM-triplette = 4-mannatrupp ställer upp 3 + 1 reserv), och registration_player bär player_role (fielded|reserve). t-1 [DONE]: additiv migration (00064) + rena DB-fria behörighetsfunktioner (CheckCategoryEligibility ålder+kön per spelare, CheckMixedRequirement mixed-kvot per lag), deterministiska/ackumulerande, fail-open på saknad fakta. t-2 [DONE]: enforcering i anmälningsgrinden mot D-MEMBER (player_profile.date_of_birth/gender — enda källan), deny-by-default 422 category_ineligible (reasons[] ∈ {age_below_min, age_above_max, gender_not_allowed, mixed_requirement_unmet}) skild från 409-licensfamiljen; trupp/reserv-validering + player_role-persistens (422 team_composition_invalid); constraints + trupproller exponerade på läs-API + OpenAPI (RegistrationCreateInput/CompetitionClassConstraints) + TS-klient i synk — bevisat mot riktig Postgres. Kategori-preset-select + wizard-yta = delta #3. Docs: docs/domain/competition/category-constraints-squad.md, specs/api/endpoints/registrations-v1.md. | ✅ ee51ed1f.m-3