[
  {
    "type": "raw_sql",
    "description": "Spec 049 Issue-3 fix: Add minOccurrences INT column to breakPolicyPresetRule (shared DB). Default=1 preserves existing behaviour. CA rest rule needs 2 (IWC: one per 4h or major fraction).",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT 1 FROM information_schema.columns WHERE table_schema='kiosk_buykiosk' AND table_name='breakPolicyPresetRule' AND column_name='minOccurrences' LIMIT 1",
    "sql": "ALTER TABLE `breakPolicyPresetRule` ADD COLUMN `minOccurrences` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Minimum times this rule must be satisfied per shift (e.g. CA rest = 2 for 1-per-4h IWC requirement)' AFTER `isRequired`"
  },
  {
    "type": "raw_sql",
    "description": "Spec 049 Issue-5 fix: Add triggerShiftMinHoursInclusive BOOLEAN column to breakPolicyPresetRule (shared DB). Default=1 (inclusive >=) preserves existing behaviour. Set to 0 for states using 'more than X hours' (exclusive >).",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT 1 FROM information_schema.columns WHERE table_schema='kiosk_buykiosk' AND table_name='breakPolicyPresetRule' AND column_name='triggerShiftMinHoursInclusive' LIMIT 1",
    "sql": "ALTER TABLE `breakPolicyPresetRule` ADD COLUMN `triggerShiftMinHoursInclusive` TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'true=inclusive (>=), false=exclusive (>) for triggerShiftMinHours. CA/WA/CO/OR use exclusive (more than X hours); NY/IL use inclusive (at least X hours).' AFTER `triggerShiftMaxHours`"
  },
  {
    "type": "raw_sql",
    "description": "Spec 049 Issue-3: Update CA-2025 rest rule to minOccurrences=2 (IWC: one 10-min rest per 4 hours or major fraction — an 8h shift requires two rests).",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT 1 FROM breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id WHERE p.presetKey='CA-2025' AND p.version=1 AND r.ruleType='rest' AND r.minOccurrences=2 LIMIT 1",
    "sql": "UPDATE breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id SET r.minOccurrences=2 WHERE p.presetKey='CA-2025' AND p.version=1 AND r.ruleType='rest'"
  },
  {
    "type": "raw_sql",
    "description": "Spec 049 Issue-5: Set triggerShiftMinHoursInclusive=0 (exclusive) for CA-2025 meal and secondMeal rules (Lab Code §512: 'more than five/ten hours').",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT 1 FROM breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id WHERE p.presetKey='CA-2025' AND p.version=1 AND r.ruleType IN ('meal','secondMeal') AND r.triggerShiftMinHoursInclusive=0 LIMIT 1",
    "sql": "UPDATE breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id SET r.triggerShiftMinHoursInclusive=0 WHERE p.presetKey='CA-2025' AND p.version=1 AND r.ruleType IN ('meal','secondMeal')"
  },
  {
    "type": "raw_sql",
    "description": "Spec 049 Issue-5: Set triggerShiftMinHoursInclusive=0 (exclusive) for WA-2025 meal rule (RCW 49.12: 'more than five hours').",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT 1 FROM breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id WHERE p.presetKey='WA-2025' AND p.version=1 AND r.ruleType='meal' AND r.triggerShiftMinHoursInclusive=0 LIMIT 1",
    "sql": "UPDATE breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id SET r.triggerShiftMinHoursInclusive=0 WHERE p.presetKey='WA-2025' AND p.version=1 AND r.ruleType='meal'"
  },
  {
    "type": "raw_sql",
    "description": "Spec 049 Issue-5: Set triggerShiftMinHoursInclusive=0 (exclusive) for CO-2025 meal rule (7 CCR 1103-1: 'more than five consecutive hours').",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT 1 FROM breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id WHERE p.presetKey='CO-2025' AND p.version=1 AND r.ruleType='meal' AND r.triggerShiftMinHoursInclusive=0 LIMIT 1",
    "sql": "UPDATE breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id SET r.triggerShiftMinHoursInclusive=0 WHERE p.presetKey='CO-2025' AND p.version=1 AND r.ruleType='meal'"
  },
  {
    "type": "raw_sql",
    "description": "Spec 049 Issue-5: Set triggerShiftMinHoursInclusive=0 (exclusive) for OR-2025 meal rule (ORS 653.261: 'more than six hours').",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT 1 FROM breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id WHERE p.presetKey='OR-2025' AND p.version=1 AND r.ruleType='meal' AND r.triggerShiftMinHoursInclusive=0 LIMIT 1",
    "sql": "UPDATE breakPolicyPresetRule r INNER JOIN breakPolicyPreset p ON r.presetId=p.id SET r.triggerShiftMinHoursInclusive=0 WHERE p.presetKey='OR-2025' AND p.version=1 AND r.ruleType='meal'"
  }
]
