{
  "period": "2026-08",
  "entity": null,
  "prior_period": "2026-07",
  "rules": [
    {
      "rule_id": "R-EASA-ACC",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "EASA",
      "reference": "CS FTL.1.235",
      "name": "Accommodation standard",
      "description": "Quiet, comfortable and separate room with control of light and temperature, access to food and drink.",
      "severity": "block",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO,CC,ENG",
      "applies_entities": "ALL",
      "applies_regions": "EU",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"all\":[{\"field\":\"property.easa_suitable\",\"op\":\"==\",\"value\":true},{\"field\":\"occupancy\",\"op\":\"==\",\"value\":1}]}",
      "threshold": "quiet, private, controlled",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-EASA-REST",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "EASA",
      "reference": "ORO.FTL.235(b)",
      "name": "Minimum rest away from base",
      "description": "Rest away from home base at least as long as the preceding duty period, or 12 hours, whichever is greater.",
      "severity": "block",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO,CC,ENG",
      "applies_entities": "ALL",
      "applies_regions": "EU",
      "applies_duty": "overnight,irops,positioning",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"rest_hours_available\",\"op\":\">=\",\"expr\":\"max(preceding_duty_hours, min_rest_hours)\"}",
      "threshold": "max(duty, 12h)",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-FAA-168",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "FAA",
      "reference": "14 CFR 117.25(b)",
      "name": "Weekly duty-free period",
      "description": "30 consecutive hours free from all duty within any 168 consecutive hours.",
      "severity": "block",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO",
      "applies_entities": "ALL",
      "applies_regions": "US",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"duty_free_hours_in_168\",\"op\":\">=\",\"param\":\"min_duty_free_hours\"}",
      "threshold": "30h in 168h",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-FAA-REST",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "FAA",
      "reference": "14 CFR 117.25(e)",
      "name": "Minimum rest, US operations",
      "description": "10 consecutive hours rest with at least 8 uninterrupted hours of sleep opportunity, free of all duty.",
      "severity": "block",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO,CC,ENG",
      "applies_entities": "ALL",
      "applies_regions": "US",
      "applies_duty": "overnight,irops",
      "applies_channel": "ALL",
      "expression": "{\"all\":[{\"field\":\"rest_hours_available\",\"op\":\">=\",\"param\":\"min_rest_hours\"},{\"field\":\"sleep_opportunity_hours\",\"op\":\">=\",\"param\":\"min_sleep_hours\"}]}",
      "threshold": "10h rest / 8h sleep opportunity",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-FAA-SUIT",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "FAA",
      "reference": "14 CFR 117.3",
      "name": "Suitable accommodation",
      "description": "Temperature-controlled facility with sound mitigation and the ability to control light, providing a bed or bunk for sleeping.",
      "severity": "block",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO,CC,ENG",
      "applies_entities": "ALL",
      "applies_regions": "US",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"all\":[{\"field\":\"property.temp_controlled\",\"op\":\"==\",\"value\":true},{\"field\":\"property.sound_mitigated\",\"op\":\"==\",\"value\":true},{\"field\":\"property.blackout_curtains\",\"op\":\"==\",\"value\":true}]}",
      "threshold": "temperature, sound, light, bed",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-SINGLE",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "ASL",
      "reference": "ASL OM-A 7.4",
      "name": "Single occupancy",
      "description": "Crew are never allocated a shared room, on any station, under any circumstance.",
      "severity": "block",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO,CC,ENG",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"occupancy\",\"op\":\"==\",\"value\":1}",
      "threshold": "1 crew per room",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-TRANSFER",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "ASL",
      "reference": "ASL OM-A 7.6",
      "name": "Maximum transfer time",
      "description": "Airport to accommodation must not exceed the station limit; transfer time counts against the rest window both ways.",
      "severity": "block",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO,CC,ENG",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"property.transfer_minutes\",\"op\":\"<=\",\"param\":\"max_transfer_minutes\"}",
      "threshold": "45 minutes (60 at long-haul stations)",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-RECEPTION",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "regulatory",
      "authority": "ASL",
      "reference": "ASL OM-A 7.5",
      "name": "24-hour reception",
      "description": "Properties taking arrivals between 23:00 and 06:00 must have staffed reception.",
      "severity": "approve",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO,CC,ENG",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"any\":[{\"field\":\"arrival_time\",\"op\":\"between\",\"value\":[\"06:00\",\"23:00\"]},{\"field\":\"property.reception_24h\",\"op\":\"==\",\"value\":true}]}",
      "threshold": "staffed 24h",
      "approve_role": "travel_desk",
      "second_approver_above": null,
      "suspends_on_disruption": 1,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Flight Safety",
      "enabled": 1
    },
    {
      "rule_id": "R-ENTITLE",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "entitlement",
      "authority": "ASL",
      "reference": "ASL OM-A 7.1",
      "name": "Duty entitlement",
      "description": "A room is provided only where the roster shows an overnight duty, positioning, standby or training assignment.",
      "severity": "block",
      "applies_to": "all",
      "applies_ranks": "ALL",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "overnight,positioning,standby,training,irops",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"duty_reason\",\"op\":\"in\",\"value\":[\"overnight\",\"positioning\",\"standby\",\"training\",\"irops\",\"held\"]}",
      "threshold": "roster-derived",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Crew Management",
      "enabled": 1
    },
    {
      "rule_id": "R-GRADE",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "entitlement",
      "authority": "ASL",
      "reference": "ASL OM-A 7.2",
      "name": "Room grade by rank",
      "description": "Room grade follows rank where the entity differentiates. Captains may hold an executive grade at long-haul stations; requests above grade require approval.",
      "severity": "approve",
      "applies_to": "crew",
      "applies_ranks": "CPT,FO",
      "applies_entities": "ASL Airlines Belgium,ASL Airlines France",
      "applies_regions": "ALL",
      "applies_duty": "overnight",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"room_grade\",\"op\":\"<=\",\"param\":\"max_grade_for_rank\"}",
      "threshold": "rank-based",
      "approve_role": "travel_desk",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Crew Management",
      "enabled": 1
    },
    {
      "rule_id": "R-CAP",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "commercial",
      "authority": "ASL",
      "reference": null,
      "name": "Rate cap",
      "description": "Nightly rate must not exceed the station cap, adjusted seasonally.",
      "severity": "approve",
      "applies_to": "all",
      "applies_ranks": "ALL",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"rate_paid\",\"op\":\"<=\",\"param\":\"rate_cap\"}",
      "threshold": "station cap",
      "approve_role": "finance",
      "second_approver_above": 220,
      "suspends_on_disruption": 1,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Loïc Berger",
      "enabled": 1
    },
    {
      "rule_id": "R-PREF",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "commercial",
      "authority": "Routespring",
      "reference": null,
      "name": "Preferred property order",
      "description": "Book the first available property in the base's preferred order before any alternative.",
      "severity": "approve",
      "applies_to": "all",
      "applies_ranks": "ALL",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"property_rank_at_base\",\"op\":\"==\",\"value\":1}",
      "threshold": "preferred order",
      "approve_role": "travel_desk",
      "second_approver_above": 250,
      "suspends_on_disruption": 1,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Loïc Berger",
      "enabled": 1
    },
    {
      "rule_id": "R-ANC",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "commercial",
      "authority": "ASL",
      "reference": null,
      "name": "Covered ancillaries",
      "description": "Breakfast and wifi are covered; minibar, room service and laundry are the traveler's own cost.",
      "severity": "warn",
      "applies_to": "all",
      "applies_ranks": "ALL",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"ancillary_type\",\"op\":\"in\",\"param\":\"covered_ancillaries\"}",
      "threshold": "breakfast, wifi",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 0,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Loïc Berger",
      "enabled": 1
    },
    {
      "rule_id": "R-SOURCE",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "commercial",
      "authority": "Routespring",
      "reference": null,
      "name": "Inventory order",
      "description": "Contracted inventory before bed bank, bed bank before GDS or last-room-available.",
      "severity": "warn",
      "applies_to": "all",
      "applies_ranks": "ALL",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "ALL",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"rate_type\",\"op\":\"preference_order\",\"value\":[\"contracted\",\"bedbank\",\"gds\"]}",
      "threshold": "contract > bedbank > GDS",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 1,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Loïc Berger",
      "enabled": 1
    },
    {
      "rule_id": "R-WINDOW",
      "ruleset": "2026.2",
      "version": 3,
      "layer": "commercial",
      "authority": "ASL",
      "reference": null,
      "name": "Advance booking window",
      "description": "Scheduled overnights are booked at least 48 hours ahead where the roster allows.",
      "severity": "warn",
      "applies_to": "all",
      "applies_ranks": "ALL",
      "applies_entities": "ALL",
      "applies_regions": "ALL",
      "applies_duty": "overnight,positioning,training",
      "applies_channel": "ALL",
      "expression": "{\"field\":\"lead_time_hours\",\"op\":\">=\",\"param\":\"min_lead_hours\"}",
      "threshold": "48 hours",
      "approve_role": "none",
      "second_approver_above": null,
      "suspends_on_disruption": 1,
      "effective_from": "2026-01-01",
      "effective_to": null,
      "owner": "Loïc Berger",
      "enabled": 1
    }
  ],
  "policy": {
    "head": {
      "evals": 2409,
      "passed": 1455,
      "soft": 751,
      "refused": 203,
      "cost": 103615.65,
      "self_served": 178,
      "via_app": 278,
      "staff_requests": 137
    },
    "byRule": [
      {
        "rule_id": "R-WINDOW",
        "name": "Advance booking window",
        "layer": "commercial",
        "severity": "warn",
        "authority": "ASL",
        "reference": null,
        "n": 336,
        "cost": 20572.93,
        "refused": 0,
        "approved": 0
      },
      {
        "rule_id": "R-PREF",
        "name": "Preferred property order",
        "layer": "commercial",
        "severity": "approve",
        "authority": "Routespring",
        "reference": null,
        "n": 265,
        "cost": 20908.63,
        "refused": 0,
        "approved": 265
      },
      {
        "rule_id": "R-SOURCE",
        "name": "Inventory order",
        "layer": "commercial",
        "severity": "warn",
        "authority": "Routespring",
        "reference": null,
        "n": 186,
        "cost": 20126.09,
        "refused": 0,
        "approved": 0
      },
      {
        "rule_id": "R-ANC",
        "name": "Covered ancillaries",
        "layer": "commercial",
        "severity": "warn",
        "authority": "ASL",
        "reference": null,
        "n": 122,
        "cost": 3631.89,
        "refused": 0,
        "approved": 0
      },
      {
        "rule_id": "R-EASA-ACC",
        "name": "Accommodation standard",
        "layer": "regulatory",
        "severity": "block",
        "authority": "EASA",
        "reference": "CS FTL.1.235",
        "n": 94,
        "cost": 0,
        "refused": 94,
        "approved": 0
      },
      {
        "rule_id": "R-CAP",
        "name": "Rate cap",
        "layer": "commercial",
        "severity": "approve",
        "authority": "ASL",
        "reference": null,
        "n": 73,
        "cost": 4936.49,
        "refused": 0,
        "approved": 73
      },
      {
        "rule_id": "R-SINGLE",
        "name": "Single occupancy",
        "layer": "regulatory",
        "severity": "block",
        "authority": "ASL",
        "reference": "ASL OM-A 7.4",
        "n": 50,
        "cost": 0,
        "refused": 50,
        "approved": 0
      },
      {
        "rule_id": "R-ENTITLE",
        "name": "Duty entitlement",
        "layer": "entitlement",
        "severity": "block",
        "authority": "ASL",
        "reference": "ASL OM-A 7.1",
        "n": 48,
        "cost": 29173.39,
        "refused": 48,
        "approved": 0
      },
      {
        "rule_id": "R-RECEPTION",
        "name": "24-hour reception",
        "layer": "regulatory",
        "severity": "approve",
        "authority": "ASL",
        "reference": "ASL OM-A 7.5",
        "n": 47,
        "cost": 0,
        "refused": 0,
        "approved": 47
      },
      {
        "rule_id": "R-GRADE",
        "name": "Room grade by rank",
        "layer": "entitlement",
        "severity": "approve",
        "authority": "ASL",
        "reference": "ASL OM-A 7.2",
        "n": 38,
        "cost": 4266.23,
        "refused": 0,
        "approved": 38
      },
      {
        "rule_id": "R-EASA-REST",
        "name": "Minimum rest away from base",
        "layer": "regulatory",
        "severity": "block",
        "authority": "EASA",
        "reference": "ORO.FTL.235(b)",
        "n": 12,
        "cost": 0,
        "refused": 12,
        "approved": 0
      },
      {
        "rule_id": "R-TRANSFER",
        "name": "Maximum transfer time",
        "layer": "regulatory",
        "severity": "block",
        "authority": "ASL",
        "reference": "ASL OM-A 7.6",
        "n": 8,
        "cost": 0,
        "refused": 8,
        "approved": 0
      }
    ],
    "byChannel": [
      {
        "channel": "automation",
        "n": 1651,
        "passed": 1021
      },
      {
        "channel": "travel_desk",
        "n": 343,
        "passed": 194
      },
      {
        "channel": "crew_app",
        "n": 278,
        "passed": 178
      },
      {
        "channel": "staff_portal",
        "n": 137,
        "passed": 62
      }
    ],
    "byEntity": [
      {
        "entity": "ASL Airlines Belgium",
        "n": 820,
        "in_policy_pct": 57.31707317073171,
        "cost": 39211.75
      },
      {
        "entity": "ASL Airlines France",
        "n": 565,
        "in_policy_pct": 62.30088495575221,
        "cost": 22782.52
      },
      {
        "entity": "ASL Airlines Ireland",
        "n": 1024,
        "in_policy_pct": 61.81640625,
        "cost": 41621.38
      }
    ],
    "approvals": [
      {
        "approver": "P. Costa",
        "approver_role": "travel_desk",
        "n": 24,
        "reason": "Single-night stay, sourcing not economic"
      },
      {
        "approver": "R. Menon",
        "approver_role": "travel_desk",
        "n": 23,
        "reason": "Rank grade requested by fleet office"
      },
      {
        "approver": "S. Whelan",
        "approver_role": "travel_desk",
        "n": 23,
        "reason": "Rank grade requested by fleet office"
      },
      {
        "approver": "P. Costa",
        "approver_role": "travel_desk",
        "n": 20,
        "reason": "Operational necessity — disruption"
      },
      {
        "approver": "R. Menon",
        "approver_role": "travel_desk",
        "n": 20,
        "reason": "Crew rest would otherwise be compromised"
      },
      {
        "approver": "R. Menon",
        "approver_role": "travel_desk",
        "n": 20,
        "reason": "Preferred property sold out"
      },
      {
        "approver": "S. Whelan",
        "approver_role": "travel_desk",
        "n": 19,
        "reason": "Late schedule change inside window"
      },
      {
        "approver": "P. Costa",
        "approver_role": "travel_desk",
        "n": 18,
        "reason": "Rank grade requested by fleet office"
      },
      {
        "approver": "P. Costa",
        "approver_role": "travel_desk",
        "n": 18,
        "reason": "Rate cap exceeded, no alternative within transfer limit"
      },
      {
        "approver": "S. Whelan",
        "approver_role": "travel_desk",
        "n": 18,
        "reason": "Rate cap exceeded, no alternative within transfer limit"
      },
      {
        "approver": "P. Costa",
        "approver_role": "travel_desk",
        "n": 16,
        "reason": "Preferred property sold out"
      },
      {
        "approver": "R. Menon",
        "approver_role": "travel_desk",
        "n": 15,
        "reason": "Late schedule change inside window"
      },
      {
        "approver": "R. Menon",
        "approver_role": "travel_desk",
        "n": 15,
        "reason": "Operational necessity — disruption"
      },
      {
        "approver": "R. Menon",
        "approver_role": "travel_desk",
        "n": 15,
        "reason": "Single-night stay, sourcing not economic"
      },
      {
        "approver": "S. Whelan",
        "approver_role": "travel_desk",
        "n": 14,
        "reason": "Single-night stay, sourcing not economic"
      },
      {
        "approver": "P. Costa",
        "approver_role": "travel_desk",
        "n": 13,
        "reason": "Late schedule change inside window"
      },
      {
        "approver": "R. Menon",
        "approver_role": "travel_desk",
        "n": 13,
        "reason": "Rate cap exceeded, no alternative within transfer limit"
      },
      {
        "approver": "S. Whelan",
        "approver_role": "travel_desk",
        "n": 13,
        "reason": "Preferred property sold out"
      },
      {
        "approver": "P. Costa",
        "approver_role": "travel_desk",
        "n": 12,
        "reason": "Crew rest would otherwise be compromised"
      },
      {
        "approver": "S. Whelan",
        "approver_role": "travel_desk",
        "n": 12,
        "reason": "Operational necessity — disruption"
      },
      {
        "approver": "S. Whelan",
        "approver_role": "travel_desk",
        "n": 9,
        "reason": "Crew rest would otherwise be compromised"
      },
      {
        "approver": "K. Vermeulen",
        "approver_role": "line_manager",
        "n": 3,
        "reason": "Rate cap exceeded, no alternative within transfer limit"
      },
      {
        "approver": "M. Dupont",
        "approver_role": "line_manager",
        "n": 3,
        "reason": "Crew rest would otherwise be compromised"
      },
      {
        "approver": "M. Dupont",
        "approver_role": "line_manager",
        "n": 3,
        "reason": "Single-night stay, sourcing not economic"
      },
      {
        "approver": "M. Dupont",
        "approver_role": "line_manager",
        "n": 2,
        "reason": "Late schedule change inside window"
      },
      {
        "approver": "M. Dupont",
        "approver_role": "line_manager",
        "n": 2,
        "reason": "Rank grade requested by fleet office"
      },
      {
        "approver": "K. Vermeulen",
        "approver_role": "line_manager",
        "n": 1,
        "reason": "Late schedule change inside window"
      },
      {
        "approver": "K. Vermeulen",
        "approver_role": "line_manager",
        "n": 1,
        "reason": "Rank grade requested by fleet office"
      },
      {
        "approver": "K. Vermeulen",
        "approver_role": "line_manager",
        "n": 1,
        "reason": "Single-night stay, sourcing not economic"
      },
      {
        "approver": "M. Dupont",
        "approver_role": "line_manager",
        "n": 1,
        "reason": "Operational necessity — disruption"
      },
      {
        "approver": "M. Dupont",
        "approver_role": "line_manager",
        "n": 1,
        "reason": "Preferred property sold out"
      },
      {
        "approver": "M. Dupont",
        "approver_role": "line_manager",
        "n": 1,
        "reason": "Rate cap exceeded, no alternative within transfer limit"
      }
    ],
    "reasons": [
      {
        "reason": "Rank grade requested by fleet office",
        "n": 67
      },
      {
        "reason": "Single-night stay, sourcing not economic",
        "n": 57
      },
      {
        "reason": "Rate cap exceeded, no alternative within transfer limit",
        "n": 53
      },
      {
        "reason": "Preferred property sold out",
        "n": 50
      },
      {
        "reason": "Late schedule change inside window",
        "n": 50
      },
      {
        "reason": "Operational necessity — disruption",
        "n": 48
      },
      {
        "reason": "Crew rest would otherwise be compromised",
        "n": 44
      }
    ]
  }
}