diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 5708fa148..65dbfe7e1 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -61,6 +61,7 @@ jobs: env: HUGO_CACHEDIR: ${{ runner.temp }}/hugo_cache HUGO_ENVIRONMENT: production + FIPGUIDE_BRANCH: ${{ github.ref_name }} TZ: Europe/Berlin run: | hugo \ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d5b7d27f9..93a526529 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -23,7 +23,10 @@ repos: - id: check-xml exclude: "^layouts/.*rss\\.xml$" - id: check-yaml - exclude: "validity.yaml$" + exclude: + glob: + - "**/validity.yaml" + - "layouts/admin/section.cmsconfig.yml" - id: debug-statements - id: destroyed-symlinks - id: end-of-file-fixer diff --git a/content/admin/_index.md b/content/admin/_index.md new file mode 100644 index 000000000..f5bf6ac9b --- /dev/null +++ b/content/admin/_index.md @@ -0,0 +1,10 @@ +--- +title: "Admin" +url: "/admin/" +outputs: ["CMSConfig"] +sitemap: + disable: true +build: + list: never + render: always +--- diff --git a/content/application/cd/validity.yaml b/content/application/cd/validity.yaml index a9419ffd0..b4d11e4b6 100644 --- a/content/application/cd/validity.yaml +++ b/content/application/cd/validity.yaml @@ -1,12 +1,12 @@ -# This file shows the rules for FIP cards issued by CD. -_anchors: - coupon-not-available: &coupon-not-available +groups: + - name: coupon-not-available status: invalid text: - de: "Nicht verfügbar" - en: "Not available" - fr: "Non disponible" - coupon-1: &coupon-1 + de: Nicht verfügbar + en: Not available + fr: Non disponible + type: fip-coupon + - name: coupon-1 status: valid text: de: | @@ -15,10 +15,12 @@ _anchors: en: | **1 coupon** With 4 fields per year. Each field is valid for two days. - fr: | + fr: > **1 coupon** + Avec 4 champs par an. Chaque champ est valable deux jours. - coupon-2: &coupon-2 + type: fip-coupon + - name: coupon-2 status: valid text: de: | @@ -27,10 +29,12 @@ _anchors: en: | **2 coupons** With 4 fields per year. Each field is valid for two days. - fr: | + fr: > **2 coupons** + Avec 4 champs par an. Chaque champ est valable deux jours. - coupon-3: &coupon-3 + type: fip-coupon + - name: coupon-3 status: valid text: de: | @@ -39,22 +43,28 @@ _anchors: en: | **3 coupons** With 4 fields per year. Each field is valid for two days. - fr: | + fr: > **3 coupons** + Avec 4 champs par an. Chaque champ est valable deux jours. - coupon-crossing-1: &coupon-crossing-1 + type: fip-coupon + - name: coupon-crossing-1 status: valid text: - de: | + de: > **1 Freifahrtschein** + Mit 2 Feldern pro Jahr. Jedes Feld ist für eine Überfahrt gültig. - en: | + en: > **1 coupon** + With 2 fields per year. Each field is valid for one crossing. - fr: | + fr: > **1 coupon** + Avec 2 champs par an. Chaque champ est valable pour une traversée. - coupon-zssk: &coupon-zssk + type: fip-coupon + - name: coupon-zssk status: valid text: de: | @@ -63,314 +73,317 @@ _anchors: en: | **Unlimited** Only valid with an "In Karta" in the ŽP app. - fr: | + fr: > **Illimité** + Valable uniquement avec une «In Karta» dans l'application ŽP. -attica: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -bdz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -bls: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -bsb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -cfr: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -cfl: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -cie: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -cp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -db: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -dsb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -eil: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -eurostar: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -euskotren: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -fs: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -gb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -gysev: - fip-coupon: - active: *coupon-2 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -ht: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -hz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -kd: - fip-coupon: - active: *coupon-2 - active-relatives: *coupon-not-available - retired: *coupon-1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available -ks: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -kw: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -lka: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -mav: - fip-coupon: - active: *coupon-3 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -nir: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -ns: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-not-available -oebb: - fip-coupon: - active: *coupon-3 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available -pkp: - fip-coupon: - active: *coupon-2 - active-relatives: *coupon-2 - retired: *coupon-2 - retired-relatives: *coupon-2 - widows: *coupon-1 -renfe: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -sbb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -sll: - fip-coupon: - active: *coupon-crossing-1 - active-relatives: *coupon-crossing-1 - retired: *coupon-crossing-1 - retired-relatives: *coupon-crossing-1 - widows: *coupon-crossing-1 -sncb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -sncf: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -sp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -stl: - fip-coupon: - active: *coupon-crossing-1 - active-relatives: *coupon-crossing-1 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -sv: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -sz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -thi: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -vy: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -vr: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -zfbh: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -zpcg: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - widows: *coupon-1 -zrms: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -zrs: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available -zssk: - fip-coupon: - active: *coupon-zssk - active-relatives: *coupon-zssk - retired: *coupon-zssk - retired-relatives: *coupon-zssk - widows: *coupon-zssk + type: fip-coupon +operators: + attica: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + bdz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + bls: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + bsb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + cfl: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + cfr: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + cie: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + cp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + db: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + dsb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + eil: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + eurostar: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + euskotren: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fs: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + gb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + gysev: + fip-coupon: + active: coupon-2 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + ht: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + hz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + kd: + fip-coupon: + active: coupon-2 + active-relatives: coupon-not-available + retired: coupon-1 + retired-relatives: coupon-not-available + widows: coupon-not-available + ks: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + kw: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + lka: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + mav: + fip-coupon: + active: coupon-3 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + nir: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + ns: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-not-available + oebb: + fip-coupon: + active: coupon-3 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-not-available + widows: coupon-not-available + pkp: + fip-coupon: + active: coupon-2 + active-relatives: coupon-2 + retired: coupon-2 + retired-relatives: coupon-2 + widows: coupon-1 + renfe: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + sbb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + sll: + fip-coupon: + active: coupon-crossing-1 + active-relatives: coupon-crossing-1 + retired: coupon-crossing-1 + retired-relatives: coupon-crossing-1 + widows: coupon-crossing-1 + sncb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + sncf: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + sp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + stl: + fip-coupon: + active: coupon-crossing-1 + active-relatives: coupon-crossing-1 + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + sv: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + sz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + thi: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + vr: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + vy: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + zfbh: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + zpcg: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + widows: coupon-1 + zrms: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + zrs: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + zssk: + fip-coupon: + active: coupon-zssk + active-relatives: coupon-zssk + retired: coupon-zssk + retired-relatives: coupon-zssk + widows: coupon-zssk diff --git a/content/application/cie/validity.yaml b/content/application/cie/validity.yaml index 9ff054180..f5e3cdf1b 100644 --- a/content/application/cie/validity.yaml +++ b/content/application/cie/validity.yaml @@ -1,15 +1,15 @@ -# This file shows the rules for FIP cards issued by CIE. -_anchors: - reduced-75: &reduced-75 +groups: + - name: reduced-75 status: valid text: - de: "75 % Rabatt" - en: "75 % discount" - fr: "75 % de réduction" - reduced-75-group: &reduced-75-group - active: *reduced-75 - active-relatives: *reduced-75 - retired: *reduced-75 - retired-relatives: *reduced-75 -gb: - fip-reduced-ticket: *reduced-75-group + de: 75 % Rabatt + en: 75 % discount + fr: 75 % de réduction + type: fip-reduced-ticket +operators: + gb: + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-75 + retired-relatives: reduced-75 diff --git a/content/application/db/validity.yaml b/content/application/db/validity.yaml index 3cbfa47c3..f56a70954 100644 --- a/content/application/db/validity.yaml +++ b/content/application/db/validity.yaml @@ -1,47 +1,44 @@ -# This file shows the rules for FIP cards issued by DB. -_anchors: - coupon-4fields: &coupon-4fields +groups: + - name: coupon-4fields status: valid text: - de: | + de: > **1 Freifahrtschein** + Mit jeweils 4 Feldern pro Jahr. Jedes Feld ist zwei Tage gültig. - en: | + en: > **1 coupon** + With 4 fields each per year. Each field is valid for two days. - fr: | + fr: > **1 coupon** + Avec 4 champs chacun par an. Chaque champ est valable deux jours. - coupon-not-available: &coupon-not-available + type: fip-coupon + - name: coupon-not-available status: invalid text: - de: "Nicht verfügbar" - en: "Not available" - fr: "Non disponible" - reduced-50: &reduced-50 - status: valid - text: - de: "50 % Rabatt" - en: "50 % discount" - fr: "50 % de réduction" - reduced-50-group: &reduced-50-group - active: *reduced-50 - active-relatives: *reduced-50 - retired: *reduced-50 - retired-relatives: *reduced-50 - coupon-crossing: &coupon-crossing + de: Nicht verfügbar + en: Not available + fr: Non disponible + type: fip-coupon + - name: coupon-crossing status: valid text: - de: | + de: > **1 Freifahrtschein** + Mit jeweils 2 Feldern pro Jahr. Jedes Feld ist für eine Überfahrt gültig. - en: | + en: > **1 coupon** + With 2 fields each per year. Each field is valid for one crossing. - fr: | + fr: > **1 coupon** + Avec 2 champs chacun par an. Chaque champ est valable pour une traversée. - coupon-former-1-onetime: &coupon-former-1-onetime + type: fip-coupon + - name: coupon-former-1-onetime status: valid text: de: | @@ -53,283 +50,452 @@ _anchors: fr: | **1 coupon** Unique, dans les 45 mois suivant le départ. -sncf: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -stl: - fip-coupon: - active: *coupon-crossing - active-relatives: *coupon-crossing - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -pkp: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sncb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -gysev: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ns: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -oebb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cp: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -fs: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -bls: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -bdz: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zssk: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sp: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sbb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -renfe: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kd: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -dsb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cfl: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cd: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -bsb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ltg: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -gb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cfr: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cie: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ht: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -hz: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ks: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kw: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -lka: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -mav: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -nir: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sll: - fip-coupon: - active: *coupon-crossing - active-relatives: *coupon-crossing - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sv: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sz: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -vr: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -vy: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zfbh: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zpcg: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zrs: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zrms: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-4fields - retired: *coupon-former-1-onetime - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group + type: fip-coupon + - name: reduced-50 + status: valid + text: + de: 50 % Rabatt + en: 50 % discount + fr: 50 % de réduction + type: fip-reduced-ticket +operators: + bdz: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + bls: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + bsb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cd: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cfl: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cfr: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cie: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cp: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + dsb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + fs: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + gb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + gysev: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ht: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + hz: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + kd: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ks: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + kw: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + lka: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ltg: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + mav: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + nir: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ns: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + oebb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + pkp: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + renfe: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sbb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sll: + fip-coupon: + active: coupon-crossing + active-relatives: coupon-crossing + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sncb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sncf: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sp: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + stl: + fip-coupon: + active: coupon-crossing + active-relatives: coupon-crossing + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sv: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sz: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + vr: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + vy: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zfbh: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zpcg: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zrms: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-4fields + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zrs: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zssk: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-former-1-onetime + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 diff --git a/content/application/gb/validity.yaml b/content/application/gb/validity.yaml index 3a7711820..68a06d2dc 100644 --- a/content/application/gb/validity.yaml +++ b/content/application/gb/validity.yaml @@ -1,39 +1,12 @@ -# This file shows the rules for FIP cards issued by GB (National Rail). -_anchors: - coupon-not-available: &coupon-not-available +groups: + - name: coupon-not-available status: invalid text: - de: "Nicht verfügbar" - en: "Not available" - fr: "Non disponible" - reduced-50: &reduced-50 - status: valid - text: - de: "50 % Rabatt" - en: "50 % discount" - fr: "50 % de réduction" - reduced-50-group: &reduced-50-group - active: *reduced-50 - active-relatives: *reduced-50 - retired: *reduced-50 - retired-relatives: *reduced-50 - reduced-75: &reduced-75 - status: valid - text: - de: "75 % Rabatt" - en: "75 % discount" - fr: "75 % de réduction" - reduced-75-group: &reduced-75-group - active: *reduced-75 - active-relatives: *reduced-75 - retired: *reduced-75 - retired-relatives: *reduced-75 - reduced-active-75-retired-50-group: &reduced-active-75-retired-50-group - active: *reduced-75 - active-relatives: *reduced-75 - retired: *reduced-50 - retired-relatives: *reduced-50 - coupon-active-1: &coupon-active-1 + de: Nicht verfügbar + en: Not available + fr: Non disponible + type: fip-coupon + - name: coupon-active-1 status: valid text: de: | @@ -45,7 +18,8 @@ _anchors: fr: | **1 coupon** Par an. - coupon-active-2: &coupon-active-2 + type: fip-coupon + - name: coupon-active-2 status: valid text: de: | @@ -57,331 +31,511 @@ _anchors: fr: | **2 coupons** Par an. -attica: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -bdz: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-active-1 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -bls: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-active-1 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -bsb: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cd: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cfr: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -cfl: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-active-1 - retired: *coupon-active-1 - retired-relatives: *coupon-active-1 - widows: *coupon-active-1 - fip-reduced-ticket: *reduced-50-group -cie: - fip-coupon: - active: *coupon-active-2 - active-relatives: *coupon-active-2 - retired: *coupon-active-1 - retired-relatives: *coupon-active-1 - widows: *coupon-active-1 - fip-reduced-ticket: *reduced-75-group -cp: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -db: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -dsb: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -fs: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-active-1 - retired: *coupon-active-1 - retired-relatives: *coupon-active-1 - widows: *coupon-active-1 - fip-reduced-ticket: *reduced-50-group -gysev: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ht: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-active-1 - retired: *coupon-active-1 - retired-relatives: *coupon-active-1 - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -hz: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kd: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ks: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kw: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kml: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -lka: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ltg: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -mav: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -nir: - fip-coupon: - active: *coupon-active-2 - active-relatives: *coupon-active-2 - retired: *coupon-active-2 - retired-relatives: *coupon-active-2 - widows: *coupon-active-2 - fip-reduced-ticket: *reduced-75-group -ns: - fip-coupon: - active: *coupon-active-2 - active-relatives: *coupon-active-2 - retired: *coupon-active-1 - retired-relatives: *coupon-active-1 - widows: *coupon-active-1 - fip-reduced-ticket: *reduced-50-group -oebb: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-active-1 - retired: *coupon-active-1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -pkp: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -renfe: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sbb: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sll: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sncb: - fip-coupon: - active: *coupon-active-2 - active-relatives: *coupon-active-2 - retired: *coupon-active-1 - retired-relatives: *coupon-active-1 - widows: *coupon-active-1 - fip-reduced-ticket: *reduced-active-75-retired-50-group -sncf: - fip-coupon: - active: *coupon-active-2 - active-relatives: *coupon-active-2 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-active-75-retired-50-group -sp: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -stl: - fip-coupon: - active: *coupon-active-2 - active-relatives: *coupon-active-2 - retired: *coupon-active-1 - retired-relatives: *coupon-active-1 - widows: *coupon-active-1 - fip-reduced-ticket: *reduced-50-group -sv: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sz: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -vy: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zfbh: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zpcg: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zrs: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zrms: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zssk: - fip-coupon: - active: *coupon-active-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group + type: fip-coupon + - name: reduced-50 + status: valid + text: + de: 50 % Rabatt + en: 50 % discount + fr: 50 % de réduction + type: fip-reduced-ticket + - name: reduced-75 + status: valid + text: + de: 75 % Rabatt + en: 75 % discount + fr: 75 % de réduction + type: fip-reduced-ticket +operators: + attica: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + bdz: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-active-1 + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + bls: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-active-1 + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + bsb: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cd: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cfl: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-active-1 + retired: coupon-active-1 + retired-relatives: coupon-active-1 + widows: coupon-active-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cfr: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cie: + fip-coupon: + active: coupon-active-2 + active-relatives: coupon-active-2 + retired: coupon-active-1 + retired-relatives: coupon-active-1 + widows: coupon-active-1 + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-75 + retired-relatives: reduced-75 + cp: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + db: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + dsb: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + fs: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-active-1 + retired: coupon-active-1 + retired-relatives: coupon-active-1 + widows: coupon-active-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + gysev: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ht: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-active-1 + retired: coupon-active-1 + retired-relatives: coupon-active-1 + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + hz: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + kd: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + kml: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ks: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + kw: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + lka: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ltg: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + mav: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + nir: + fip-coupon: + active: coupon-active-2 + active-relatives: coupon-active-2 + retired: coupon-active-2 + retired-relatives: coupon-active-2 + widows: coupon-active-2 + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-75 + retired-relatives: reduced-75 + ns: + fip-coupon: + active: coupon-active-2 + active-relatives: coupon-active-2 + retired: coupon-active-1 + retired-relatives: coupon-active-1 + widows: coupon-active-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + oebb: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-active-1 + retired: coupon-active-1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + pkp: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + renfe: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sbb: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sll: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sncb: + fip-coupon: + active: coupon-active-2 + active-relatives: coupon-active-2 + retired: coupon-active-1 + retired-relatives: coupon-active-1 + widows: coupon-active-1 + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-50 + retired-relatives: reduced-50 + sncf: + fip-coupon: + active: coupon-active-2 + active-relatives: coupon-active-2 + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-50 + retired-relatives: reduced-50 + sp: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + stl: + fip-coupon: + active: coupon-active-2 + active-relatives: coupon-active-2 + retired: coupon-active-1 + retired-relatives: coupon-active-1 + widows: coupon-active-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sv: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sz: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + vy: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zfbh: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zpcg: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zrms: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zrs: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zssk: + fip-coupon: + active: coupon-active-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 diff --git a/content/application/nir/validity.yaml b/content/application/nir/validity.yaml index 6e24b4b04..f5e3cdf1b 100644 --- a/content/application/nir/validity.yaml +++ b/content/application/nir/validity.yaml @@ -1,15 +1,15 @@ -# This file shows the rules for FIP cards issued by NIR. -_anchors: - reduced-75: &reduced-75 +groups: + - name: reduced-75 status: valid text: - de: "75 % Rabatt" - en: "75 % discount" - fr: "75 % de réduction" - reduced-75-group: &reduced-75-group - active: *reduced-75 - active-relatives: *reduced-75 - retired: *reduced-75 - retired-relatives: *reduced-75 -gb: - fip-reduced-ticket: *reduced-75-group + de: 75 % Rabatt + en: 75 % discount + fr: 75 % de réduction + type: fip-reduced-ticket +operators: + gb: + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-75 + retired-relatives: reduced-75 diff --git a/content/application/ns/validity.yaml b/content/application/ns/validity.yaml index afbae54ca..0a3b4ab17 100644 --- a/content/application/ns/validity.yaml +++ b/content/application/ns/validity.yaml @@ -1,24 +1,28 @@ -# This file shows the rules for FIP cards issued by NS. -_anchors: - coupon-not-available: &coupon-not-available +groups: + - name: coupon-not-available status: invalid text: - de: "Nicht verfügbar" - en: "Not available" - fr: "Non disponible" - free-travel: &free-travel + de: Nicht verfügbar + en: Not available + fr: Non disponible + type: fip-coupon + - name: free-travel status: valid text: - de: | + de: > **Unbegrenzt** + Unbegrenzte Anzahl an Ländercoupons möglich (jeweils ein Coupon pro Anfrage). - en: | + en: > **Unlimited** + Unlimited country coupons can be requested (one coupon per request). - fr: | + fr: > **Illimité** + Un nombre illimité de coupons pays peut être demandé (un coupon par demande). - coupon-1: &coupon-1 + type: fip-coupon + - name: coupon-1 status: valid text: de: | @@ -30,7 +34,8 @@ _anchors: fr: | **1 coupon** Par an. - coupon-2: &coupon-2 + type: fip-coupon + - name: coupon-2 status: valid text: de: | @@ -42,7 +47,8 @@ _anchors: fr: | **2 coupons** Par an. - coupon-4: &coupon-4 + type: fip-coupon + - name: coupon-4 status: valid text: de: | @@ -54,7 +60,8 @@ _anchors: fr: | **4 coupons** Par an. - coupon-1-onetime: &coupon-1-onetime + type: fip-coupon + - name: coupon-1-onetime status: valid text: de: | @@ -66,261 +73,267 @@ _anchors: fr: | **1 coupon** Unique, dans les 45 mois suivant le départ. - relatives-sncf-active: &relatives-sncf-active + type: fip-coupon + - name: relatives-sncf-active status: valid text: - de: | + de: > **1 / 3 Freifahrtscheine** + Gesamtes Netz: 1 Freifahrtschein pro Jahr. Région Nord: 3 Freifahrtscheine pro Jahr. - en: | + en: > **1 / 3 coupons** + Whole network: 1 coupon per year. Région Nord: 3 coupons per year. - fr: | + fr: > **1 / 3 coupons** + Réseau entier : 1 coupon par an. Région Nord : 3 coupons par an. -attica: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -bdz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -bls: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -bsb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-1-onetime - retired-relatives: *coupon-not-available -cd: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -cfr: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -cfl: - fip-coupon: - active: *free-travel - active-relatives: *free-travel - retired: *free-travel - retired-relatives: *free-travel -cie: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -cp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -db: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1-onetime - retired-relatives: *coupon-1-onetime -dsb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-1-onetime - retired-relatives: *coupon-not-available -fs: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -gb: - fip-coupon: - active: *coupon-2 - active-relatives: *coupon-2 - retired: *coupon-1 - retired-relatives: *coupon-1 -gysev: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -ht: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -hz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -kd: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -ks: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -kw: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -lka: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -ltg: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-1-onetime - retired-relatives: *coupon-not-available -mav: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -nir: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -oebb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1-onetime -pkp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -renfe: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -sbb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-1-onetime - retired-relatives: *coupon-not-available -sll: - fip-coupon: - active: *coupon-2 - active-relatives: *coupon-2 - retired: *coupon-1 - retired-relatives: *coupon-1 -sncb: - fip-coupon: - active: *free-travel - active-relatives: *free-travel - retired: *free-travel - retired-relatives: *free-travel -sncf: - fip-coupon: - active: *coupon-4 - active-relatives: *relatives-sncf-active - retired: *coupon-1-onetime - retired-relatives: *coupon-1-onetime -sp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-1-onetime - retired-relatives: *coupon-not-available -stl: - fip-coupon: - active: *coupon-4 - active-relatives: *coupon-4 - retired: *coupon-2 - retired-relatives: *coupon-2 -sv: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -sz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -vy: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-1-onetime - retired-relatives: *coupon-not-available -zfbh: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -zpcg: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -zrms: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -zrs: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -zssk: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 -kml: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-1-onetime - retired-relatives: *coupon-not-available + type: fip-coupon +operators: + attica: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + bdz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + bls: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + bsb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-1-onetime + retired-relatives: coupon-not-available + cd: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + cfl: + fip-coupon: + active: free-travel + active-relatives: free-travel + retired: free-travel + retired-relatives: free-travel + cfr: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + cie: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + cp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + db: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1-onetime + retired-relatives: coupon-1-onetime + dsb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-1-onetime + retired-relatives: coupon-not-available + fs: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + gb: + fip-coupon: + active: coupon-2 + active-relatives: coupon-2 + retired: coupon-1 + retired-relatives: coupon-1 + gysev: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + ht: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + hz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + kd: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + kml: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-1-onetime + retired-relatives: coupon-not-available + ks: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + kw: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + lka: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + ltg: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-1-onetime + retired-relatives: coupon-not-available + mav: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + nir: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + oebb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1-onetime + pkp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + renfe: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + sbb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-1-onetime + retired-relatives: coupon-not-available + sll: + fip-coupon: + active: coupon-2 + active-relatives: coupon-2 + retired: coupon-1 + retired-relatives: coupon-1 + sncb: + fip-coupon: + active: free-travel + active-relatives: free-travel + retired: free-travel + retired-relatives: free-travel + sncf: + fip-coupon: + active: coupon-4 + active-relatives: relatives-sncf-active + retired: coupon-1-onetime + retired-relatives: coupon-1-onetime + sp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-1-onetime + retired-relatives: coupon-not-available + stl: + fip-coupon: + active: coupon-4 + active-relatives: coupon-4 + retired: coupon-2 + retired-relatives: coupon-2 + sv: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + sz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + vy: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-1-onetime + retired-relatives: coupon-not-available + zfbh: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + zpcg: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + zrms: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + zrs: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + zssk: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 diff --git a/content/application/oebb/validity.yaml b/content/application/oebb/validity.yaml index 84d8bef1c..af5912b9f 100644 --- a/content/application/oebb/validity.yaml +++ b/content/application/oebb/validity.yaml @@ -1,590 +1,675 @@ -# This file shows the rules for FIP cards issued by ÖBB. -_anchors: - coupon-not-available: &coupon-not-available +groups: + - name: coupon-not-available status: invalid text: - de: "Nicht verfügbar" - en: "Not available" - fr: "Non disponible" - reduced-50: &reduced-50 + de: Nicht verfügbar + en: Not available + fr: Non disponible + type: fip-coupon + - name: coupon-1 status: valid text: - de: "50 % Rabatt" - en: "50 % discount" - fr: "50 % de réduction" - reduced-50-group: &reduced-50-group - active: *reduced-50 - active-relatives: *reduced-50 - retired: *reduced-50 - retired-relatives: *reduced-50 - widows: *reduced-50 - reduced-no-discount: &reduced-no-discount - status: invalid - text: - de: "Kein Rabatt" - en: "No discount" - fr: "Pas de réduction" - coupon-1: &coupon-1 + de: | + **1 Freifahrtschein** nur Vollzeit + en: | + **1 coupon** Full-time only + fr: | + **1 coupon** Temps plein uniquement + type: fip-coupon + - name: coupon-1-1 status: valid text: de: > - **1 Freifahrtschein** - - nur Vollzeit - + **1 Freifahrtschein** Vollzeit
Teilzeit (mind. 50%): 1 + Freifahrtschein
en: > - **1 coupon** - - Full-time only - + **1 coupon** Full-time
Part-time (min. 50%): 1 coupon
fr: > - **1 coupon** - - Temps plein uniquement - - coupon-1-1: &coupon-1-1 + **1 coupon** Temps plein
Temps partiel (min. 50%): 1 + coupon
+ type: fip-coupon + - name: coupon-2-1 status: valid text: de: > - **1 Freifahrtschein** - - Vollzeit -
- Teilzeit (mind. 50%): 1 Freifahrtschein -
+ **2 Freifahrtscheine** Vollzeit
Teilzeit (mind. 50%): 1 + Freifahrtschein
en: > - **1 coupon** - - Full-time -
- Part-time (min. 50%): 1 coupon -
+ **2 coupons** Full-time
Part-time (min. 50%): 1 + coupon
fr: > - **1 coupon** - - Temps plein -
- Temps partiel (min. 50%): 1 coupon -
- coupon-2-1: &coupon-2-1 + **2 coupons** Temps plein
Temps partiel (min. 50%): 1 + coupon
+ type: fip-coupon + - name: coupon-3-1 status: valid text: de: > - **2 Freifahrtscheine** - - Vollzeit -
- Teilzeit (mind. 50%): 1 Freifahrtschein -
+ **3 Freifahrtscheine** Vollzeit
Teilzeit (mind. 50%): 1 + Freifahrtschein
en: > - **2 coupons** - - Full-time -
- Part-time (min. 50%): 1 coupon -
+ **3 coupons** Full-time
Part-time (min. 50%): 1 + coupon
fr: > - **2 coupons** - - Temps plein -
- Temps partiel (min. 50%): 1 coupon -
- coupon-3-1: &coupon-3-1 + **3 coupons** Temps plein
Temps partiel (min. 50%): 1 + coupon
+ type: fip-coupon + - name: coupon-y1-9x1-45x0 status: valid text: de: > - **3 Freifahrtscheine** - - Vollzeit -
- Teilzeit (mind. 50%): 1 Freifahrtschein -
+ **1 / 1 / 0 Freifahrtscheine** Jährlich: 1 Freifahrtschein
+ **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 1 + Freifahrtschein
**Einmalig innerhalb von 45 Monaten** nach + Versetzung in den Ruhestand: 0 Freifahrtscheine
en: > - **3 coupons** - - Full-time -
- Part-time (min. 50%): 1 coupon -
+ **1 / 1 / 0 coupons** Yearly: 1 coupon
**One-time within 9 + months** after retirement: 1 coupon
**One-time within 45 months** + after retirement: 0 coupons
fr: > - **3 coupons** - - Temps plein -
- Temps partiel (min. 50%): 1 coupon -
- coupon-y1-9x1-45x0: &coupon-y1-9x1-45x0 + **1 / 1 / 0 coupons** Annuel: 1 coupon
**Unique dans les 9 + mois** après le départ à la retraite: 1 coupon
**Unique dans les 45 + mois** après le départ à la retraite: 0 coupon
+ type: fip-coupon + - name: coupon-y0-9x1-45x1 status: valid text: de: > - **1 / 1 / 0 Freifahrtscheine** - - Jährlich: 1 Freifahrtschein -
- **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 1 Freifahrtschein -
- **Einmalig innerhalb von 45 Monaten** nach Versetzung in den Ruhestand: 0 Freifahrtscheine -
+ **0 / 1 / 1 Freifahrtscheine** Jährlich: 0 Freifahrtscheine
+ **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 1 + Freifahrtschein
**Einmalig innerhalb von 45 Monaten** nach + Versetzung in den Ruhestand: 1 Freifahrtschein
en: > - **1 / 1 / 0 coupons** - - Yearly: 1 coupon -
- **One-time within 9 months** after retirement: 1 coupon -
- **One-time within 45 months** after retirement: 0 coupons -
+ **0 / 1 / 1 coupons** Yearly: 0 coupons
**One-time within 9 + months** after retirement: 1 coupon
**One-time within 45 months** + after retirement: 1 coupon
fr: > - **1 / 1 / 0 coupons** - - Annuel: 1 coupon -
- **Unique dans les 9 mois** après le départ à la retraite: 1 coupon -
- **Unique dans les 45 mois** après le départ à la retraite: 0 coupon -
- coupon-y0-9x1-45x1: &coupon-y0-9x1-45x1 + **0 / 1 / 1 coupons** Annuel: 0 coupon
**Unique dans les 9 + mois** après le départ à la retraite: 1 coupon
**Unique dans les 45 + mois** après le départ à la retraite: 1 coupon
+ type: fip-coupon + - name: coupon-y0-9x2-45x1 status: valid text: de: > - **0 / 1 / 1 Freifahrtscheine** - - Jährlich: 0 Freifahrtscheine -
- **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 1 Freifahrtschein -
- **Einmalig innerhalb von 45 Monaten** nach Versetzung in den Ruhestand: 1 Freifahrtschein -
+ **0 / 2 / 1 Freifahrtscheine** Jährlich: 0 Freifahrtscheine
+ **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 2 + Freifahrtscheine
**Einmalig innerhalb von 45 Monaten** nach + Versetzung in den Ruhestand: 1 Freifahrtschein
en: > - **0 / 1 / 1 coupons** - - Yearly: 0 coupons -
- **One-time within 9 months** after retirement: 1 coupon -
- **One-time within 45 months** after retirement: 1 coupon -
+ **0 / 2 / 1 coupons** Yearly: 0 coupons
**One-time within 9 + months** after retirement: 2 coupons
**One-time within 45 months** + after retirement: 1 coupon
fr: > - **0 / 1 / 1 coupons** - - Annuel: 0 coupon -
- **Unique dans les 9 mois** après le départ à la retraite: 1 coupon -
- **Unique dans les 45 mois** après le départ à la retraite: 1 coupon -
- coupon-y0-9x2-45x1: &coupon-y0-9x2-45x1 + **0 / 2 / 1 coupons** Annuel: 0 coupon
**Unique dans les 9 + mois** après le départ à la retraite: 2 coupons
**Unique dans les + 45 mois** après le départ à la retraite: 1 coupon
+ type: fip-coupon + - name: coupon-y1-9x3-45x0 status: valid text: de: > - **0 / 2 / 1 Freifahrtscheine** - - Jährlich: 0 Freifahrtscheine -
- **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 2 Freifahrtscheine -
- **Einmalig innerhalb von 45 Monaten** nach Versetzung in den Ruhestand: 1 Freifahrtschein -
+ **1 / 3 / 0 Freifahrtscheine** Jährlich: 1 Freifahrtschein
+ **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 3 + Freifahrtscheine
**Einmalig innerhalb von 45 Monaten** nach + Versetzung in den Ruhestand: 0 Freifahrtscheine
en: > - **0 / 2 / 1 coupons** - - Yearly: 0 coupons -
- **One-time within 9 months** after retirement: 2 coupons -
- **One-time within 45 months** after retirement: 1 coupon -
+ **1 / 3 / 0 coupons** Yearly: 1 coupon
**One-time within 9 + months** after retirement: 3 coupons
**One-time within 45 months** + after retirement: 0 coupons
fr: > - **0 / 2 / 1 coupons** - - Annuel: 0 coupon -
- **Unique dans les 9 mois** après le départ à la retraite: 2 coupons -
- **Unique dans les 45 mois** après le départ à la retraite: 1 coupon -
- coupon-y1-9x3-45x0: &coupon-y1-9x3-45x0 + **1 / 3 / 0 coupons** Annuel: 1 coupon
**Unique dans les 9 + mois** après le départ à la retraite: 3 coupons
**Unique dans les + 45 mois** après le départ à la retraite: 0 coupon
+ type: fip-coupon + - name: coupon-y0-9x0-45x1 status: valid text: de: > - **1 / 3 / 0 Freifahrtscheine** - - Jährlich: 1 Freifahrtschein -
- **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 3 Freifahrtscheine -
- **Einmalig innerhalb von 45 Monaten** nach Versetzung in den Ruhestand: 0 Freifahrtscheine -
+ **0 / 0 / 1 Freifahrtscheine** Jährlich: 0 Freifahrtscheine
+ **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 0 + Freifahrtscheine
**Einmalig innerhalb von 45 Monaten** nach + Versetzung in den Ruhestand: 1 Freifahrtschein
en: > - **1 / 3 / 0 coupons** - - Yearly: 1 coupon -
- **One-time within 9 months** after retirement: 3 coupons -
- **One-time within 45 months** after retirement: 0 coupons -
+ **0 / 0 / 1 coupons** Yearly: 0 coupons
**One-time within 9 + months** after retirement: 0 coupons
**One-time within 45 months** + after retirement: 1 coupon
fr: > - **1 / 3 / 0 coupons** - - Annuel: 1 coupon -
- **Unique dans les 9 mois** après le départ à la retraite: 3 coupons -
- **Unique dans les 45 mois** après le départ à la retraite: 0 coupon -
- coupon-y0-9x0-45x1: &coupon-y0-9x0-45x1 + **0 / 0 / 1 coupons** Annuel: 0 coupon
**Unique dans les 9 + mois** après le départ à la retraite: 0 coupon
**Unique dans les 45 + mois** après le départ à la retraite: 1 coupon
+ type: fip-coupon + - name: reduced-50 status: valid text: - de: > - **0 / 0 / 1 Freifahrtscheine** - - Jährlich: 0 Freifahrtscheine -
- **Einmalig innerhalb von 9 Monaten** nach Versetzung in den Ruhestand: 0 Freifahrtscheine -
- **Einmalig innerhalb von 45 Monaten** nach Versetzung in den Ruhestand: 1 Freifahrtschein -
- en: > - **0 / 0 / 1 coupons** - - Yearly: 0 coupons -
- **One-time within 9 months** after retirement: 0 coupons -
- **One-time within 45 months** after retirement: 1 coupon -
- fr: > - **0 / 0 / 1 coupons** - - Annuel: 0 coupon -
- **Unique dans les 9 mois** après le départ à la retraite: 0 coupon -
- **Unique dans les 45 mois** après le départ à la retraite: 1 coupon -
-attica: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: - active: *reduced-50 - active-relatives: *reduced-50 - retired: *reduced-no-discount - retired-relatives: *reduced-no-discount -bdz: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -bls: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -bsb: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -cd: - fip-coupon: - active: *coupon-3-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x3-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -cfl: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -cfr: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -cie: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -cp: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -db: - fip-coupon: - active: *coupon-2-1 - active-relatives: *coupon-1 - retired: *coupon-y0-9x2-45x1 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -dsb: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -eurostar: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -euskotren: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -fs: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -gb: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -gysev: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -ht: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -kd: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kml: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ks: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kw: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -lka: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ltg: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -mav: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -nir: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -ns: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -oebb: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -pkp: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -renfe: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -sbb: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -sll: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -sncb: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -sncf: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sp: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -stl: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -sv: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -sz: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -vy: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-not-available - retired: *coupon-y0-9x1-45x1 - retired-relatives: *coupon-not-available - widows: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zssk: - fip-coupon: - active: *coupon-3-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x3-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group -zpcg: - fip-coupon: - active: *coupon-1-1 - active-relatives: *coupon-1 - retired: *coupon-y1-9x1-45x0 - retired-relatives: *coupon-y0-9x1-45x1 - widows: *coupon-y0-9x0-45x1 - fip-reduced-ticket: *reduced-50-group + de: 50 % Rabatt + en: 50 % discount + fr: 50 % de réduction + type: fip-reduced-ticket + - name: reduced-no-discount + status: invalid + text: + de: Kein Rabatt + en: No discount + fr: Pas de réduction + type: fip-reduced-ticket +operators: + attica: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-no-discount + retired-relatives: reduced-no-discount + bdz: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + bls: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + bsb: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + cd: + fip-coupon: + active: coupon-3-1 + active-relatives: coupon-1 + retired: coupon-y1-9x3-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + cfl: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + cfr: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + cie: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + cp: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + db: + fip-coupon: + active: coupon-2-1 + active-relatives: coupon-1 + retired: coupon-y0-9x2-45x1 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + dsb: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + eurostar: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + euskotren: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + fs: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + gb: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + gysev: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + ht: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + kd: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + kml: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + ks: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + kw: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + lka: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + ltg: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + mav: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + nir: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + ns: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + oebb: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + pkp: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + renfe: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + sbb: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + sll: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + sncb: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + sncf: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + sp: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + stl: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + sv: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + sz: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + vy: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-not-available + retired: coupon-y0-9x1-45x1 + retired-relatives: coupon-not-available + widows: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + zpcg: + fip-coupon: + active: coupon-1-1 + active-relatives: coupon-1 + retired: coupon-y1-9x1-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 + zssk: + fip-coupon: + active: coupon-3-1 + active-relatives: coupon-1 + retired: coupon-y1-9x3-45x0 + retired-relatives: coupon-y0-9x1-45x1 + widows: coupon-y0-9x0-45x1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + widows: reduced-50 diff --git a/content/application/sncb/validity.yaml b/content/application/sncb/validity.yaml index 09394226b..be397a4f1 100644 --- a/content/application/sncb/validity.yaml +++ b/content/application/sncb/validity.yaml @@ -1,34 +1,12 @@ -# This file shows the rules for FIP cards issued by SNCB. -_anchors: - coupon-not-available: &coupon-not-available +groups: + - name: coupon-not-available status: invalid text: - de: "Nicht verfügbar" - en: "Not available" - fr: "Non disponible" - reduced-50: &reduced-50 - status: valid - text: - de: "50 % Rabatt" - en: "50 % discount" - fr: "50 % de réduction" - reduced-50-group: &reduced-50-group - active: *reduced-50 - active-relatives: *reduced-50 - retired: *reduced-50 - retired-relatives: *reduced-50 - reduced-75: &reduced-75 - status: valid - text: - de: "75 % Rabatt" - en: "75 % discount" - fr: "75 % de réduction" - reduced-75-group: &reduced-75-group - active: *reduced-75 - active-relatives: *reduced-75 - retired: *reduced-75 - retired-relatives: *reduced-75 - coupon-1: &coupon-1 + de: Nicht verfügbar + en: Not available + fr: Non disponible + type: fip-coupon + - name: coupon-1 status: valid text: de: | @@ -40,7 +18,8 @@ _anchors: fr: | **1 coupon** Par an. - coupon-2: &coupon-2 + type: fip-coupon + - name: coupon-2 status: valid text: de: | @@ -52,31 +31,40 @@ _anchors: fr: | **2 coupons** Par an. - coupon-sncf-nord: &coupon-sncf-nord + type: fip-coupon + - name: coupon-sncf-nord status: valid text: - de: | + de: > **4 / 8 Freifahrtscheine** + Gesamtes Netz: 4 Freifahrtscheine pro Jahr. Région Nord: 8 Freifahrtscheine pro Jahr. - en: | + en: > **4 / 8 coupons** + Whole network: 4 coupons per year. Région Nord: 8 coupons per year. - fr: | + fr: > **4 / 8 coupons** + Réseau entier : 4 coupons par an. Région Nord : 8 coupons par an. - relatives-sncf-nord: &relatives-sncf-nord + type: fip-coupon + - name: relatives-sncf-nord status: valid text: - de: | + de: > **2 / 4 Freifahrtscheine** + Gesamtes Netz: 2 Freifahrtscheine pro Jahr. Région Nord: 4 Freifahrtscheine pro Jahr. - en: | + en: > **2 / 4 coupons** + Whole network: 2 coupons per year. Région Nord: 4 coupons per year. - fr: | + fr: > **2 / 4 coupons** + Réseau entier : 2 coupons par an. Région Nord : 4 coupons par an. - relatives-sncf-retired: &relatives-sncf-retired + type: fip-coupon + - name: relatives-sncf-retired status: valid text: de: | @@ -88,245 +76,393 @@ _anchors: fr: | **1 coupon** Par an (enfant uniquement). -bdz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -bls: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -cd: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -cfr: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -cie: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -cp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -db: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -dsb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -euskotren: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -fs: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -gb: - fip-coupon: - active: *coupon-2 - active-relatives: *coupon-2 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: - active: *reduced-75 - active-relatives: *reduced-75 - retired: *reduced-50 - retired-relatives: *reduced-50 -gysev: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ht: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -hz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -kd: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ks: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -kw: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -lka: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -ltg: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -mav: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -nir: - fip-coupon: - active: *coupon-2 - active-relatives: *coupon-2 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-75-group -oebb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -pkp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -renfe: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -sncf: - fip-coupon: - active: *coupon-sncf-nord - active-relatives: *relatives-sncf-nord - retired: *coupon-not-available - retired-relatives: *relatives-sncf-retired - fip-reduced-ticket: *reduced-50-group -sv: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -sz: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -sbb: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -sp: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -vy: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zpcg: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -zrms: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group -zrs: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-50-group -zssk: - fip-coupon: - active: *coupon-1 - active-relatives: *coupon-1 - retired: *coupon-1 - retired-relatives: *coupon-1 - fip-reduced-ticket: *reduced-50-group + type: fip-coupon + - name: reduced-50 + status: valid + text: + de: 50 % Rabatt + en: 50 % discount + fr: 50 % de réduction + type: fip-reduced-ticket + - name: reduced-75 + status: valid + text: + de: 75 % Rabatt + en: 75 % discount + fr: 75 % de réduction + type: fip-reduced-ticket +operators: + bdz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + bls: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cd: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cfr: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cie: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + cp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + db: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + dsb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + euskotren: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + fs: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + gb: + fip-coupon: + active: coupon-2 + active-relatives: coupon-2 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-50 + retired-relatives: reduced-50 + gysev: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ht: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + hz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + kd: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ks: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + kw: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + lka: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + ltg: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + mav: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + nir: + fip-coupon: + active: coupon-2 + active-relatives: coupon-2 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-75 + retired-relatives: reduced-75 + oebb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + pkp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + renfe: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sbb: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sncf: + fip-coupon: + active: coupon-sncf-nord + active-relatives: relatives-sncf-nord + retired: coupon-not-available + retired-relatives: relatives-sncf-retired + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sp: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sv: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + sz: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + vy: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zpcg: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zrms: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zrs: + fip-coupon: + active: coupon-1 + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 + zssk: + fip-coupon: + active: coupon-1 + active-relatives: coupon-1 + retired: coupon-1 + retired-relatives: coupon-1 + fip-reduced-ticket: + active: reduced-50 + active-relatives: reduced-50 + retired: reduced-50 + retired-relatives: reduced-50 diff --git a/content/application/sncf/validity.yaml b/content/application/sncf/validity.yaml index 1ed4819f0..76e3082d4 100644 --- a/content/application/sncf/validity.yaml +++ b/content/application/sncf/validity.yaml @@ -1,326 +1,348 @@ -# This file shows the rules for FIP cards issued by SNCF. -_anchors: - coupon-4fields: &coupon-4fields +groups: + - name: coupon-4fields status: valid text: - de: | + de: > **1 Freifahrtschein** + Mit jeweils 4 Feldern pro Jahr. Jedes Feld ist zwei Tage gültig. - en: | + en: > **1 coupon** + With 4 fields each per year. Each field is valid for two days. - fr: | + fr: > **1 coupon** + Avec 4 champs chacun par an. Chaque champ est valable deux jours. - coupon-not-available: &coupon-not-available + type: fip-coupon + - name: coupon-not-available status: invalid text: - de: "Nicht verfügbar" - en: "Not available" - fr: "Non disponible" - coupon-2fields: &coupon-2fields + de: Nicht verfügbar + en: Not available + fr: Non disponible + type: fip-coupon + - name: coupon-2fields status: valid text: - de: | + de: > **2 Freifahrtscheine** + Mit jeweils 4 Feldern pro Jahr. Jedes Feld ist zwei Tage gültig. - en: | + en: > **2 coupons** + With 4 fields each per year. Each field is valid for two days. - fr: | + fr: > **2 coupons** + Avec 4 champs chacun par an. Chaque champ est valable deux jours. - coupon-4fields-4: &coupon-4fields-4 + type: fip-coupon + - name: coupon-4fields-4 status: valid text: - de: | + de: > **4 Freifahrtscheine** + Mit jeweils 4 Feldern pro Jahr. Jedes Feld ist zwei Tage gültig. - en: | + en: > **4 coupons** + With 4 fields each per year. Each field is valid for two days. - fr: | + fr: > **4 coupons** + Avec 4 champs chacun par an. Chaque champ est valable deux jours. - coupon-6fields: &coupon-6fields + type: fip-coupon + - name: coupon-6fields status: valid text: - de: | + de: > **6 Freifahrtscheine** + Mit jeweils 4 Feldern pro Jahr. Jedes Feld ist zwei Tage gültig. - en: | + en: > **6 coupons** + With 4 fields each per year. Each field is valid for two days. - fr: | + fr: > **6 coupons** + Avec 4 champs chacun par an. Chaque champ est valable deux jours. - coupon-crossing: &coupon-crossing + type: fip-coupon + - name: coupon-crossing status: valid text: - de: | + de: > **1 Freifahrtschein** + Mit jeweils 2 Feldern pro Jahr. Jedes Feld ist für eine Überfahrt gültig. - en: | + en: > **1 coupon** + With 2 fields each per year. Each field is valid for one crossing. - fr: | + fr: > **1 coupon** + Avec 2 champs chacun par an. Chaque champ est valable pour une traversée. - reduced-50: &reduced-50 + type: fip-coupon + - name: reduced-50 status: valid text: - de: "50 % Rabatt" - en: "50 % discount" - fr: "50 % de réduction" - reduced-75: &reduced-75 + de: 50 % Rabatt + en: 50 % discount + fr: 50 % de réduction + type: fip-reduced-ticket + - name: reduced-75 status: valid text: - de: "75 % Rabatt" - en: "75 % discount" - fr: "75 % de réduction" - reduced-active-75-retired-50-group: &reduced-active-75-retired-50-group - active: *reduced-75 - active-relatives: *reduced-75 - retired: *reduced-50 - retired-relatives: *reduced-50 -db: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -sncb: - fip-coupon: - active: *coupon-4fields-4 - active-relatives: *coupon-2fields - retired: *coupon-not-available - retired-relatives: *coupon-not-available -ns: - fip-coupon: - active: *coupon-4fields-4 - active-relatives: *coupon-4fields - retired: *coupon-not-available - retired-relatives: *coupon-not-available -cfl: - fip-coupon: - active: *coupon-6fields - active-relatives: *coupon-6fields - retired: *coupon-not-available - retired-relatives: *coupon-not-available -gb: - fip-coupon: - active: *coupon-2fields - active-relatives: *coupon-2fields - retired: *coupon-not-available - retired-relatives: *coupon-not-available - fip-reduced-ticket: *reduced-active-75-retired-50-group -stl: - fip-coupon: - active: *coupon-crossing - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -pkp: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -oebb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -gysev: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -cp: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -fs: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -bls: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -bdz: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -zssk: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -sp: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -sbb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -renfe: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -kd: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -dsb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -cd: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -bsb: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -ltg: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -zfbh: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -zrs: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -hz: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -ht: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -attica: - fip-coupon: - active: *coupon-not-available - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -mav: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -cie: - fip-coupon: - active: *coupon-2fields - active-relatives: *coupon-2fields - retired: *coupon-not-available - retired-relatives: *coupon-not-available -nir: - fip-coupon: - active: *coupon-2fields - active-relatives: *coupon-2fields - retired: *coupon-not-available - retired-relatives: *coupon-not-available -sll: - fip-coupon: - active: *coupon-crossing - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -zrms: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -zpcg: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -vy: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -ks: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -kw: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -lka: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -cfr: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -sv: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available -sz: - fip-coupon: - active: *coupon-4fields - active-relatives: *coupon-not-available - retired: *coupon-not-available - retired-relatives: *coupon-not-available + de: 75 % Rabatt + en: 75 % discount + fr: 75 % de réduction + type: fip-reduced-ticket +operators: + attica: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + bdz: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + bls: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + bsb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + cd: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + cfl: + fip-coupon: + active: coupon-6fields + active-relatives: coupon-6fields + retired: coupon-not-available + retired-relatives: coupon-not-available + cfr: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + cie: + fip-coupon: + active: coupon-2fields + active-relatives: coupon-2fields + retired: coupon-not-available + retired-relatives: coupon-not-available + cp: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + db: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + dsb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + fs: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + gb: + fip-coupon: + active: coupon-2fields + active-relatives: coupon-2fields + retired: coupon-not-available + retired-relatives: coupon-not-available + fip-reduced-ticket: + active: reduced-75 + active-relatives: reduced-75 + retired: reduced-50 + retired-relatives: reduced-50 + gysev: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + ht: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + hz: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + kd: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + ks: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + kw: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + lka: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + ltg: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + mav: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + nir: + fip-coupon: + active: coupon-2fields + active-relatives: coupon-2fields + retired: coupon-not-available + retired-relatives: coupon-not-available + ns: + fip-coupon: + active: coupon-4fields-4 + active-relatives: coupon-4fields + retired: coupon-not-available + retired-relatives: coupon-not-available + oebb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + pkp: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + renfe: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + sbb: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + sll: + fip-coupon: + active: coupon-crossing + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + sncb: + fip-coupon: + active: coupon-4fields-4 + active-relatives: coupon-2fields + retired: coupon-not-available + retired-relatives: coupon-not-available + sp: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + stl: + fip-coupon: + active: coupon-crossing + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + sv: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + sz: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + vy: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + zfbh: + fip-coupon: + active: coupon-not-available + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + zpcg: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + zrms: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + zrs: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available + zssk: + fip-coupon: + active: coupon-4fields + active-relatives: coupon-not-available + retired: coupon-not-available + retired-relatives: coupon-not-available diff --git a/hugo.yaml b/hugo.yaml index eec01b2e7..16e2ce538 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -2,6 +2,10 @@ enableRobotsTXT: true enableGitInfo: true ignoreLogs: ["warning-rendershortcodes-in-html"] +security: + funcs: + getenv: ["^HUGO_", "^CI$", "^FIPGUIDE_"] + defaultContentLanguage: "en" defaultContentLanguageInSubdir: true languages: @@ -36,6 +40,17 @@ module: hugoVersion: min: "0.164.0" +mediaTypes: + application/x-yaml: + suffixes: ["yml"] + +outputFormats: + CMSConfig: + mediaType: "application/x-yaml" + baseName: "config" + isPlainText: true + notAlternative: true + related: includeNewer: true indices: diff --git a/layouts/_partials/fip-validity/dialog.html b/layouts/_partials/fip-validity/dialog.html index c92660f62..ea8f39582 100644 --- a/layouts/_partials/fip-validity/dialog.html +++ b/layouts/_partials/fip-validity/dialog.html @@ -10,14 +10,16 @@ {{- end -}} {{- $appPage := .GetPage (printf "/application/%s" .File.ContentBaseName) -}} {{- $entry := false -}} + {{- $groupsMap := dict -}} {{- with $appPage -}} {{- with .Resources.Get "validity.yaml" -}} {{- $validity := . | transform.Unmarshal -}} - {{- $entry = index (index $validity $currentSlug) $type -}} + {{- $groupsMap = partial "fip-validity/groups-map" $validity -}} + {{- $entry = index (index (index $validity "operators") $currentSlug) $type -}} {{- end -}} {{- end -}} {{- if $entry -}} - {{- $issuers = $issuers | append (dict "page" $appPage "entry" $entry) -}} + {{- $issuers = $issuers | append (dict "page" $appPage "entry" $entry "groups" $groupsMap) -}} {{- $issuerPages = $issuerPages | append $appPage -}} {{- end -}} {{- end -}} @@ -36,6 +38,7 @@ {{- range $issuers -}} {{- $slug := .page.File.ContentBaseName -}} {{- $entry := .entry -}} + {{- $groups := .groups -}} diff --git a/layouts/_partials/fip-validity/groups-map.html b/layouts/_partials/fip-validity/groups-map.html new file mode 100644 index 000000000..79130ff84 --- /dev/null +++ b/layouts/_partials/fip-validity/groups-map.html @@ -0,0 +1,5 @@ +{{- $map := dict -}} +{{- range $g := index . "groups" -}} + {{- $map = merge $map (dict $g.name $g) -}} +{{- end -}} +{{- return $map -}} diff --git a/layouts/_partials/fip-validity/table.html b/layouts/_partials/fip-validity/table.html index ea995f095..505a9164e 100644 --- a/layouts/_partials/fip-validity/table.html +++ b/layouts/_partials/fip-validity/table.html @@ -1,6 +1,7 @@ {{- $lang := .lang -}} {{- $page := .page -}} {{- $entries := .entries -}} +{{- $groups := .groups -}} {{- $firstColHeader := or .firstColHeader "operators.listTitle" -}} @@ -23,19 +24,19 @@ {{ partial "link" (dict "Destination" (print "/operator/" $targetSlug) "Text" $targetPage.Title "Page" $page) }} - {{ partial "fip-validity/value" (dict "entry" $entry "field" "active" "lang" $lang "page" $page) }} + {{ partial "fip-validity/value" (dict "entry" $entry "field" "active" "lang" $lang "page" $page "groups" $groups) }} - {{ partial "fip-validity/value" (dict "entry" $entry "field" "active-relatives" "lang" $lang "page" $page) }} + {{ partial "fip-validity/value" (dict "entry" $entry "field" "active-relatives" "lang" $lang "page" $page "groups" $groups) }} - {{ partial "fip-validity/value" (dict "entry" $entry "field" "retired" "lang" $lang "page" $page) }} + {{ partial "fip-validity/value" (dict "entry" $entry "field" "retired" "lang" $lang "page" $page "groups" $groups) }} - {{ partial "fip-validity/value" (dict "entry" $entry "field" "retired-relatives" "lang" $lang "page" $page) }} + {{ partial "fip-validity/value" (dict "entry" $entry "field" "retired-relatives" "lang" $lang "page" $page "groups" $groups) }} - {{ partial "fip-validity/value" (dict "entry" $entry "field" "widows" "lang" $lang "page" $page) }} + {{ partial "fip-validity/value" (dict "entry" $entry "field" "widows" "lang" $lang "page" $page "groups" $groups) }} {{- end -}} diff --git a/layouts/_partials/fip-validity/value.html b/layouts/_partials/fip-validity/value.html index cfcd3a7c9..24e016bf3 100644 --- a/layouts/_partials/fip-validity/value.html +++ b/layouts/_partials/fip-validity/value.html @@ -7,10 +7,15 @@ {{- $status := "unknown" -}} {{- $text := T "fipValidity.unknown" -}} {{- if .entry -}} - {{- $fieldData := index .entry .field -}} - {{- if $fieldData -}} - {{- $status = $fieldData.status -}} - {{- $text = index $fieldData.text .lang -}} + {{- $groupName := index .entry .field -}} + {{- if $groupName -}} + {{- $group := index .groups $groupName -}} + {{- if $group -}} + {{- $status = $group.status -}} + {{- $text = index $group.text .lang -}} + {{- else -}} + {{- warnf "fip-validity: group %q not found (field %q, page: %s)" $groupName .field $.page.File.Path -}} + {{- end -}} {{- end -}} {{- end -}} diff --git a/layouts/_shortcodes/fip-validity-table.html b/layouts/_shortcodes/fip-validity-table.html index d33903be7..ff184a192 100644 --- a/layouts/_shortcodes/fip-validity-table.html +++ b/layouts/_shortcodes/fip-validity-table.html @@ -4,11 +4,12 @@ {{- $excluded := slice "eurostar" "euskotren" -}} {{- $issuerSlug := $page.File.ContentBaseName -}} {{- $validity := $page.Resources.Get "validity.yaml" | transform.Unmarshal -}} +{{- $groupsMap := partial "fip-validity/groups-map" $validity -}} {{- $entries := dict -}} {{- range where $page.Site.RegularPages "Type" "operator" -}} {{- $targetSlug := .File.ContentBaseName -}} {{- if and (ne $targetSlug $issuerSlug) (not (in $excluded $targetSlug)) -}} - {{- $entries = merge $entries (dict $targetSlug (index (index $validity $targetSlug) $type)) -}} + {{- $entries = merge $entries (dict $targetSlug (index (index (index $validity "operators") $targetSlug) $type)) -}} {{- end -}} {{- end -}} -{{ partial "fip-validity/table" (dict "entries" $entries "lang" $lang "page" $page) }} +{{ partial "fip-validity/table" (dict "entries" $entries "lang" $lang "page" $page "groups" $groupsMap) }} diff --git a/static/admin/config.yml b/layouts/admin/section.cmsconfig.yml similarity index 69% rename from static/admin/config.yml rename to layouts/admin/section.cmsconfig.yml index 6db4b6251..4a9e91f33 100644 --- a/static/admin/config.yml +++ b/layouts/admin/section.cmsconfig.yml @@ -1,7 +1,10 @@ +{{- if hugo.IsServer }} +local_backend: true +{{ end -}} backend: name: github repo: fipguide/fipguide.github.io - branch: main + branch: "{{ or (os.Getenv "FIPGUIDE_BRANCH") "main" }}" auth_scope: repo open_authoring: true site_domain: fipguide.netlify.app @@ -20,12 +23,68 @@ i18n: locales: [en, de, fr] default_locale: en +x_fip_validity_target_fields_coupon: &fip_validity_target_fields_coupon + - label: "Active Employees" + name: "active" + widget: "fip-validity-select" + group_type: "fip-coupon" + - label: "Relatives of Active Employees" + name: "active-relatives" + widget: "fip-validity-select" + group_type: "fip-coupon" + - label: "Retirees" + name: "retired" + widget: "fip-validity-select" + group_type: "fip-coupon" + - label: "Relatives of Retirees" + name: "retired-relatives" + widget: "fip-validity-select" + group_type: "fip-coupon" + - label: "Widows, Widowers and Orphans" + name: "widows" + widget: "fip-validity-select" + group_type: "fip-coupon" + +x_fip_validity_target_fields_reduced: &fip_validity_target_fields_reduced + - label: "Active Employees" + name: "active" + widget: "fip-validity-select" + group_type: "fip-reduced-ticket" + - label: "Relatives of Active Employees" + name: "active-relatives" + widget: "fip-validity-select" + group_type: "fip-reduced-ticket" + - label: "Retirees" + name: "retired" + widget: "fip-validity-select" + group_type: "fip-reduced-ticket" + - label: "Relatives of Retirees" + name: "retired-relatives" + widget: "fip-validity-select" + group_type: "fip-reduced-ticket" + - label: "Widows, Widowers and Orphans" + name: "widows" + widget: "fip-validity-select" + group_type: "fip-reduced-ticket" + +x_fip_validity_columns: &fip_validity_columns + - label: "FIP Coupon" + name: "fip-coupon" + widget: "object" + hint: "Number and validity of FIP Coupons available to this target group." + fields: *fip_validity_target_fields_coupon + - label: "FIP Reduced Ticket" + name: "fip-reduced-ticket" + widget: "object" + hint: "Discount on FIP Reduced Tickets (FIP 50 / FIP 75) available to this target group." + fields: *fip_validity_target_fields_reduced + collections: - name: "news" label: "News" label_singular: "News Article" folder: "content/news" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" publish: false create: true delete: false @@ -92,7 +151,7 @@ collections: label: "Countries" label_singular: "Country" folder: "content/country" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" create: false publish: false delete: false @@ -127,7 +186,7 @@ collections: label: "Operators" label_singular: "Operator" folder: "content/operator" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" publish: false delete: false i18n: true @@ -172,9 +231,9 @@ collections: - name: "application" label: "FIP Application" - label_singular: "FIP Application" + label_singular: "FIP Application Page" folder: "content/application" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" publish: false create: true delete: false @@ -220,7 +279,7 @@ collections: How and when can employees of this issuer request FIP Coupons? --> - {{< fip-validity-table type="fip-coupon" >}} + {{"{{"}}< fip-validity-table type="fip-coupon" >}} ## FIP Reduced Ticket @@ -228,7 +287,7 @@ collections: How and when can employees of this issuer request FIP Reduced Tickets (FIP 50 / FIP 75)? --> - {{< fip-validity-table type="fip-reduced-ticket" >}} + {{"{{"}}< fip-validity-table type="fip-reduced-ticket" >}} editor_components: - "image" - "highlight" @@ -240,11 +299,76 @@ collections: - "wip" - "columns" + - name: "fip-validity" + label: "FIP Validity Tables" + label_singular: "FIP Validity Table" + folder: "content/application" + path: "{{"{{"}}slug}}/validity" + extension: "yaml" + format: "yaml" + summary: "{{"{{"}}dirname}}" + create: true + publish: false + delete: false + hide: true + editor: + preview: false + fields: + - label: "Validity Groups" + name: "groups" + widget: "list" + summary: "{{"{{"}}fields.name}} ({{"{{"}}fields.type}}, {{"{{"}}fields.status}})" + hint: "The validity groups available for this issuer. Referenced by name in the Operators section below." + fields: + - label: "Name" + name: "name" + widget: "string" + hint: 'Unique identifier of this group, e.g. "coupon-1".' + - label: "Type" + name: "type" + widget: "select" + options: ["fip-coupon", "fip-reduced-ticket"] + required: false + hint: "Which FIP product this group applies to. Restricts which dropdowns it shows up in below. Leave unset to show it under both." + - label: "Status" + name: "status" + widget: "select" + options: ["valid", "invalid", "unknown"] + - label: "Text" + name: "text" + widget: "object" + fields: + - label: "Deutsch" + name: "de" + widget: "markdown" + minimal: true + - label: "English" + name: "en" + widget: "markdown" + minimal: true + - label: "Français" + name: "fr" + widget: "markdown" + minimal: true + - label: "Operators" + name: "operators" + widget: "object" + collapsed: true + hint: "For each target operator, select the applicable validity group per FIP product and target group." + fields: +{{- range (sort (where site.RegularPages "Type" "operator") "File.ContentBaseName") }} + - label: {{ printf "%q" .Title }} + name: {{ printf "%q" .File.ContentBaseName }} + widget: "object" + collapsed: true + fields: *fip_validity_columns +{{- end }} + - name: "booking" label: "Booking Platforms" label_singular: "Booking Platform" folder: "content/booking" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" publish: false create: true delete: false @@ -331,7 +455,7 @@ collections: widget: "markdown" i18n: true default: | - {{% booking-section "fip_50" %}} + {{"{{"}}% booking-section "fip_50" %}} ## FIP 50 Tickets @@ -339,9 +463,9 @@ collections: Explain the steps for booking FIP 50 Tickets with this booking platform. --> - {{% /booking-section %}} + {{"{{"}}% /booking-section %}} - {{% booking-section "fip_global_fare" %}} + {{"{{"}}% booking-section "fip_global_fare" %}} ## FIP Global Fare @@ -349,9 +473,9 @@ collections: Explain the steps for booking FIP Global Fares with this booking platform. --> - {{% /booking-section %}} + {{"{{"}}% /booking-section %}} - {{% booking-section "reservations" %}} + {{"{{"}}% booking-section "reservations" %}} ## Reservations @@ -359,7 +483,7 @@ collections: Explain the steps for booking reservations with this booking platform. --> - {{% /booking-section %}} + {{"{{"}}% /booking-section %}} editor_components: - "image" - "highlight-raw" @@ -376,7 +500,7 @@ collections: label: "General Pages" label_singular: "General Page" folder: "content/general" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" create: false publish: false delete: false @@ -411,7 +535,7 @@ collections: label: "FAQ" label_singular: "FAQ Entry" folder: "content/general/faq" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" publish: false create: true delete: false @@ -446,7 +570,7 @@ collections: label: "Identify Operator" label_singular: "Identify Operator" folder: "content/identify-operator" - path: "{{slug}}/index" + path: "{{"{{"}}slug}}/index" publish: false create: true delete: false diff --git a/netlify.toml b/netlify.toml index fb97f2efd..40eef66bc 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,5 +1,5 @@ [build] - command = "echo 'resourceDir: /opt/build/cache/resources_cache' >> hugo.yaml && hugo --gc --minify -b $DEPLOY_PRIME_URL && npx -y pagefind --site public" + command = "echo 'resourceDir: /opt/build/cache/resources_cache' >> hugo.yaml && FIPGUIDE_BRANCH=\"$HEAD\" hugo --gc --minify -b $DEPLOY_PRIME_URL && npx -y pagefind --site public" publish = "public" [build.environment] diff --git a/static/admin/index.html b/static/admin/index.html index 268c072ee..a2c611def 100644 --- a/static/admin/index.html +++ b/static/admin/index.html @@ -4,9 +4,11 @@ FIP Guide Content Manager + + diff --git a/static/admin/shortcodes.js b/static/admin/shortcodes.js index 316b498c8..9bb077ff0 100644 --- a/static/admin/shortcodes.js +++ b/static/admin/shortcodes.js @@ -12,13 +12,23 @@ return result; } - function shortcodePattern(name) { + function shortcodePattern(name, bracket) { + var open = bracket || "[%<]"; + var close = bracket === "%" ? "%" : bracket === "<" ? ">" : "[%>]"; return new RegExp( - "\\{\\{[%<] " + + "\\{\\{" + + open + + " " + name + - "(?![\\w-])([\\s\\S]*?)[%>]\\}\\}([\\s\\S]*?)\\{\\{[%<] \\/" + + "(?![\\w-])([\\s\\S]*?)" + + close + + "\\}\\}([\\s\\S]*?)\\{\\{" + + open + + " \\/" + name + - " [%>]\\}\\}", + " " + + close + + "\\}\\}", ); } @@ -167,7 +177,7 @@ id: "highlight", label: "Highlight", fields: highlightFields, - pattern: shortcodePattern("highlight"), + pattern: shortcodePattern("highlight", "%"), fromBlock: function (match) { return { type: match[1].trim(), body: match[2].trim() }; }, @@ -182,7 +192,7 @@ id: "highlight-raw", label: "Highlight", fields: highlightFields, - pattern: shortcodePattern("highlight"), + pattern: shortcodePattern("highlight", "<"), fromBlock: function (match) { return { type: match[1].trim(), body: match[2].trim() }; }, @@ -436,6 +446,19 @@ }, }, }, + { + name: "booking_data_link", + label: "Booking Platform Link", + widget: "cms-edit-link", + get_value: function (props) { + return String(props.value || "") + .replace(/\/index$/, "") + .trim(); + }, + href: "#/collections/booking/entries/{value}/index", + label_template: "Edit the Booking Platform \u201c{value}\u201d \u2192", + empty_hint: "Select a booking platform above to edit it.", + }, { name: "subtitle", label: "Subtitle", @@ -537,8 +560,10 @@ pattern: dualFormPattern("booking"), fromBlock: function (match) { var p = parseHugoParams(match[1]); + var rawId = p.id ? String(p.id) : ""; return { - id: p.id ? String(p.id) + "/index" : "", + id: rawId ? rawId + "/index" : "", + booking_data_link: rawId, subtitle: String(p.subtitle || ""), "classes.first": String(p["classes.first"] || ""), "classes.second": String(p["classes.second"] || ""), @@ -921,6 +946,19 @@ options: ["fip-coupon", "fip-reduced-ticket"], param: { required: true }, }, + { + name: "validity_data_link", + label: "FIP Validity Table", + widget: "cms-edit-link", + get_value: function (props) { + var slug = props.entry ? props.entry.get("slug") : null; + return slug ? String(slug).replace(/\/[^/]+$/, "") : ""; + }, + href: "#/collections/fip-validity/entries/{value}/validity", + label_template: + "Edit the FIP Validity Table for \u201c{value}\u201d \u2192", + empty_hint: "Save this page first to link its FIP Validity Table.", + }, ]; CMS.registerEditorComponent({ diff --git a/static/admin/style.css b/static/admin/style.css new file mode 100644 index 000000000..17b9f19b8 --- /dev/null +++ b/static/admin/style.css @@ -0,0 +1,27 @@ +[class]:has(> [id^="fip-coupon-field-"]), +[class]:has(> [id^="fip-reduced-ticket-field-"]) { + display: inline-block; + width: 48%; + vertical-align: top; + box-sizing: border-box; +} + +[class]:has(> [id^="fip-coupon-field-"]) { + margin-right: 4%; + margin-top: 16px !important; +} + +.o-cms-edit-link__info { + font-size: 0.85rem; + color: #6b7280; +} + +.o-cms-edit-link__info a { + color: #3a69c7; + font-weight: 600; + text-decoration: none; +} + +.o-cms-edit-link__info a:hover { + text-decoration: underline; +} diff --git a/static/admin/widget.js b/static/admin/widget.js new file mode 100644 index 000000000..594cca355 --- /dev/null +++ b/static/admin/widget.js @@ -0,0 +1,121 @@ +(function () { + function toPlain(value) { + if (value && typeof value.toJS === "function") { + return value.toJS(); + } + return value || null; + } + + function makeSelectFieldConfig(options) { + var config = { options: options, multiple: false, required: false }; + return { + get: function (key, defaultValue) { + return Object.prototype.hasOwnProperty.call(config, key) + ? config[key] + : defaultValue; + }, + has: function (key) { + return Object.prototype.hasOwnProperty.call(config, key); + }, + }; + } + + var SelectControl = CMS.getWidget("select").control; + + function FipValiditySelectControl(props) { + var groups = props.entry + ? toPlain(props.entry.getIn(["data", "groups"])) + : null; + groups = groups || []; + var groupType = props.field ? props.field.get("group_type") : null; + if (groupType) { + groups = groups.filter(function (group) { + return !group.type || group.type === groupType; + }); + } + var options = groups.map(function (group) { + return { label: group.name, value: group.name }; + }); + return h(SelectControl, { + field: makeSelectFieldConfig(options), + value: props.value || null, + forID: props.forID, + classNameWrapper: props.classNameWrapper, + onChange: props.onChange, + setActiveStyle: props.setActiveStyle, + setInactiveStyle: props.setInactiveStyle, + }); + } + + function FipValiditySelectPreview(props) { + return h("span", {}, props.value || "\u2014"); + } + + CMS.registerWidget( + "fip-validity-select", + FipValiditySelectControl, + FipValiditySelectPreview, + ); + + function CmsEditLinkControl(props) { + var field = props.field; + var getValue = field.get("get_value"); + var hrefTemplate = field.get("href"); + var labelTemplate = field.get("label_template"); + var emptyHint = field.get("empty_hint"); + + var value = String(getValue(props) || ""); + + if (!value) { + return h("p", { className: "o-cms-edit-link__info" }, emptyHint); + } + + var href = hrefTemplate.replace(/\{value\}/g, value); + var label = labelTemplate.replace(/\{value\}/g, value); + return h( + "p", + { className: "o-cms-edit-link__info" }, + h( + "a", + { + href: href, + onClick: function (event) { + if ( + event.button !== 0 || + event.metaKey || + event.ctrlKey || + event.shiftKey || + event.altKey + ) { + return; + } + event.preventDefault(); + window.location.hash = href; + window.location.reload(); + }, + }, + label, + ), + ); + } + + CMS.registerWidget("cms-edit-link", CmsEditLinkControl, CmsEditLinkControl); + + CMS.registerEventListener({ + name: "preSave", + handler: function (data) { + var entry = data && data.entry; + if (!entry || entry.get("collection") !== "fip-validity") { + return undefined; + } + var operators = entry.getIn(["data", "operators"]); + if (!operators || typeof operators.sortBy !== "function") { + return undefined; + } + var sortedOperators = operators.sortBy(function (value, key) { + return key; + }); + return entry.get("data").set("operators", sortedOperators); + }, + }); +})();