{
  "rule": {
    "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
  },
  "params": [
    {
      "param_id": "PRP-9",
      "rule_id": "R-WINDOW",
      "scope_type": "global",
      "scope_value": "ALL",
      "param_name": "min_lead_hours",
      "param_value": "48",
      "unit": "hours",
      "note": null
    },
    {
      "param_id": "PRP-10",
      "rule_id": "R-WINDOW",
      "scope_type": "entity",
      "scope_value": "ASL Airlines Ireland",
      "param_name": "min_lead_hours",
      "param_value": "24",
      "unit": "hours",
      "note": "cargo rosters publish later"
    }
  ],
  "byPeriod": [
    {
      "period": "2026-03",
      "n": 351,
      "cost": 22162.37,
      "refused": 0
    },
    {
      "period": "2026-04",
      "n": 339,
      "cost": 20333.49,
      "refused": 0
    },
    {
      "period": "2026-05",
      "n": 346,
      "cost": 22351.87,
      "refused": 0
    },
    {
      "period": "2026-06",
      "n": 356,
      "cost": 22463.44,
      "refused": 0
    },
    {
      "period": "2026-07",
      "n": 297,
      "cost": 18602.68,
      "refused": 0
    },
    {
      "period": "2026-08",
      "n": 336,
      "cost": 20572.93,
      "refused": 0
    }
  ],
  "recent": [
    {
      "breach_id": "PB-7762",
      "eval_id": "PE-15036",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 109.54,
      "resolved": "auto_allowed",
      "station": "CDG",
      "entity": "ASL Airlines France",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8855035"
    },
    {
      "breach_id": "PB-7235",
      "eval_id": "PE-13901",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 109.41,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853900"
    },
    {
      "breach_id": "PB-7639",
      "eval_id": "PE-14734",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 108.86,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines France",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8854733"
    },
    {
      "breach_id": "PB-7000",
      "eval_id": "PE-13396",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 108.47,
      "resolved": "auto_allowed",
      "station": "EMA",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8853395"
    },
    {
      "breach_id": "PB-6954",
      "eval_id": "PE-13275",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 108.24,
      "resolved": "auto_allowed",
      "station": "CGN",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8853274"
    },
    {
      "breach_id": "PB-7528",
      "eval_id": "PE-14500",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 107.66,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8854499"
    },
    {
      "breach_id": "PB-7264",
      "eval_id": "PE-13958",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 107.58,
      "resolved": "auto_allowed",
      "station": "HKG",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853957"
    },
    {
      "breach_id": "PB-7553",
      "eval_id": "PE-14550",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 107.38,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8854549"
    },
    {
      "breach_id": "PB-7276",
      "eval_id": "PE-13972",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 107.12,
      "resolved": "auto_allowed",
      "station": "LGG",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8853971"
    },
    {
      "breach_id": "PB-6918",
      "eval_id": "PE-13193",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 106.83,
      "resolved": "auto_allowed",
      "station": "CGN",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853192"
    },
    {
      "breach_id": "PB-7221",
      "eval_id": "PE-13879",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 106.63,
      "resolved": "auto_allowed",
      "station": "LGG",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8853878"
    },
    {
      "breach_id": "PB-7407",
      "eval_id": "PE-14231",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 105.93,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8854230"
    },
    {
      "breach_id": "PB-6890",
      "eval_id": "PE-13139",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 105.92,
      "resolved": "auto_allowed",
      "station": "BHX",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853138"
    },
    {
      "breach_id": "PB-7773",
      "eval_id": "PE-15057",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 105.77,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines France",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8855056"
    },
    {
      "breach_id": "PB-7234",
      "eval_id": "PE-13896",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 105.16,
      "resolved": "auto_allowed",
      "station": "LGG",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "staff",
      "channel": "staff_portal",
      "booking_id": "RS-8853895"
    },
    {
      "breach_id": "PB-7666",
      "eval_id": "PE-14825",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 105,
      "resolved": "auto_allowed",
      "station": "TLS",
      "entity": "ASL Airlines France",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8854824"
    },
    {
      "breach_id": "PB-6978",
      "eval_id": "PE-13326",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 104.97,
      "resolved": "auto_allowed",
      "station": "STN",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853325"
    },
    {
      "breach_id": "PB-7477",
      "eval_id": "PE-14366",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 104.63,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8854365"
    },
    {
      "breach_id": "PB-6854",
      "eval_id": "PE-13063",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 104.4,
      "resolved": "auto_allowed",
      "station": "BHX",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853062"
    },
    {
      "breach_id": "PB-7013",
      "eval_id": "PE-13423",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 103.65,
      "resolved": "auto_allowed",
      "station": "CGN",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "crew_app",
      "booking_id": "RS-8853422"
    },
    {
      "breach_id": "PB-6839",
      "eval_id": "PE-13023",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 103.54,
      "resolved": "auto_allowed",
      "station": "CGN",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853022"
    },
    {
      "breach_id": "PB-7410",
      "eval_id": "PE-14238",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 103.52,
      "resolved": "auto_allowed",
      "station": "HKG",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8854237"
    },
    {
      "breach_id": "PB-7521",
      "eval_id": "PE-14481",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 103.47,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8854480"
    },
    {
      "breach_id": "PB-6896",
      "eval_id": "PE-13146",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 102.4,
      "resolved": "auto_allowed",
      "station": "LGG",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853145"
    },
    {
      "breach_id": "PB-7445",
      "eval_id": "PE-14307",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 102.29,
      "resolved": "auto_allowed",
      "station": "HKG",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8854306"
    },
    {
      "breach_id": "PB-6831",
      "eval_id": "PE-13007",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 101.64,
      "resolved": "auto_allowed",
      "station": "EMA",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853006"
    },
    {
      "breach_id": "PB-7308",
      "eval_id": "PE-14044",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "0.5 days",
      "limit_value": "48 hours",
      "cost_impact": 101.33,
      "resolved": "auto_allowed",
      "station": "LGG",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8854043"
    },
    {
      "breach_id": "PB-7179",
      "eval_id": "PE-13797",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 101.07,
      "resolved": "auto_allowed",
      "station": "EMA",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8853796"
    },
    {
      "breach_id": "PB-7595",
      "eval_id": "PE-14638",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 100.62,
      "resolved": "auto_allowed",
      "station": "BRU",
      "entity": "ASL Airlines Belgium",
      "traveller_type": "crew",
      "channel": "automation",
      "booking_id": "RS-8854637"
    },
    {
      "breach_id": "PB-7184",
      "eval_id": "PE-13808",
      "period": "2026-08",
      "rule_id": "R-WINDOW",
      "layer": "commercial",
      "severity": "warn",
      "observed": "1 days",
      "limit_value": "48 hours",
      "cost_impact": 100.45,
      "resolved": "auto_allowed",
      "station": "BHX",
      "entity": "ASL Airlines Ireland",
      "traveller_type": "crew",
      "channel": "travel_desk",
      "booking_id": "RS-8853807"
    }
  ]
}