[
  {
    "type": "alter_table",
    "description": "Add qualifyingPositionId column to workbook_task_completions for position audit tracking",
    "database": "{{store}}",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND COLUMN_NAME = 'qualifyingPositionId'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD COLUMN `qualifyingPositionId` int(10) unsigned DEFAULT NULL COMMENT 'Position that qualified the completer from schedulePositions'"
  },
  {
    "type": "alter_table",
    "description": "Add outOfPositionLevel column to workbook_task_completions for OoP severity tracking",
    "database": "{{store}}",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND COLUMN_NAME = 'outOfPositionLevel'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD COLUMN `outOfPositionLevel` tinyint(1) unsigned DEFAULT NULL COMMENT 'NULL=not applicable, 0=clean, 1=wrong person, 2=wrong position'"
  },
  {
    "type": "alter_table",
    "description": "Add outOfPositionReason column to workbook_task_completions for OoP reason text",
    "database": "{{store}}",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND COLUMN_NAME = 'outOfPositionReason'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD COLUMN `outOfPositionReason` text DEFAULT NULL COMMENT 'Free-text reason when outOfPositionLevel > 0'"
  },
  {
    "type": "alter_table",
    "description": "Add assignedToUserId column to workbook_task_completions for assignment snapshot",
    "database": "{{store}}",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND COLUMN_NAME = 'assignedToUserId'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD COLUMN `assignedToUserId` int(11) DEFAULT NULL COMMENT 'Snapshot of who the task was assigned to at completion time'"
  },
  {
    "type": "alter_table",
    "description": "Add assignedToPositionIds column to workbook_task_completions for position assignment snapshot",
    "database": "{{store}}",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND COLUMN_NAME = 'assignedToPositionIds'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD COLUMN `assignedToPositionIds` varchar(255) DEFAULT NULL COMMENT 'Snapshot of comma-separated positionIds assigned at completion time'"
  },
  {
    "type": "alter_table",
    "description": "Add shiftId column to workbook_task_completions for shift-linked completion tracking",
    "database": "{{store}}",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND COLUMN_NAME = 'shiftId'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD COLUMN `shiftId` int(10) unsigned DEFAULT NULL COMMENT 'FK to scheduleShifts.shiftId when assigned via shift dialog'"
  },
  {
    "type": "alter_table",
    "description": "Add index on outOfPositionLevel and date for OoP report queries",
    "database": "{{store}}",
    "check_query": "SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND INDEX_NAME = 'idx_outOfPosition'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD INDEX `idx_outOfPosition` (`outOfPositionLevel`, `date`)"
  },
  {
    "type": "alter_table",
    "description": "Add index on shiftId for shift-linked completion lookups",
    "database": "{{store}}",
    "check_query": "SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'workbook_task_completions' AND INDEX_NAME = 'idx_shiftId'",
    "sql": "ALTER TABLE `workbook_task_completions` ADD INDEX `idx_shiftId` (`shiftId`)"
  }
]
