migration-reference · implemented
Migration 22A — internship_calendar_overrides
Exceções de uma data de calendário para um estágio específico.
Contrato
| Coluna | Tipo PostgreSQL | Nulo | Chaves/índices | Regra |
|---|---|---|---|---|
id | bigint | não | PK | Identificador da exceção. |
internship_id | bigint | não | FK, UQ com date | Estágio afetado; RESTRICT. |
date | date | não | UQ com internship_id | Uma data por registro; feriadão usa registros separados. |
is_working_day | boolean | não | — | true libera expediente; false bloqueia expediente. |
reason | text | não | — | Justificativa obrigatória. |
| created_at | timestamp(0) | não | — | Auditoria. | | updated_at | timestamp(0) | não | — | Auditoria técnica. |
Uma exceção não modifica holidays e não é um escopo territorial. O cálculo consulta primeiro os feriados aplicáveis e depois substitui o resultado somente para a data e o estágio indicados. Recessos, folgas, pontes e fechamentos específicos devem ser registrados como pausas do estágio. Toda criação, alteração ou invalidação gera Activity Log; o Model proíbe a exclusão física, preservando inclusive exceções que poderão participar de uma previsão. A autoria fica no Activity Log.
Checklist
- Criar migration com
UNIQUE (internship_id, date)eRESTRICT. - Criar Model, factory, relação, validações e Activity Log.
- Criar Policy e autorização exclusiva do Setor de Estágio.
- Recalcular a previsão após alteração autorizada.
- Testar liberação de feriado, bloqueio de dia comum e datas duplicadas no fluxo de cálculo; as regras do registro e a unicidade já têm teste Pest.