fix: align F4 document delivery recipient constraint

This commit is contained in:
2026-09-08 09:38:18 -03:00
parent 6f100bf9ba
commit ff7a99725e
@@ -4,9 +4,9 @@ import { MigrationInterface, QueryRunner } from 'typeorm';
* Alinea las restricciones físicas heredadas de D5 con el ciclo documental F4.
*
* F4 incorpora estados LOCKED/SEALED para Actas y WORKING/OFFICIALIZED para INF.
* También usa el código visible ACT-NNNNN-DD-MM-YY. Las migraciones históricas
* conservaban CHECKs, triggers y el formato ACTA-YYYY-NNNNNN de D5, por lo que
* el servicio podía compilar pero PostgreSQL rechazaba las transiciones nuevas.
* También usa el código visible ACT-NNNNN-DD-MM-YY y entrega copia al INSPECTOR.
* Las migraciones históricas conservaban CHECKs, triggers y contratos de D5, por lo
* que el servicio podía compilar pero PostgreSQL rechazaba las transiciones nuevas.
*/
export class F4AlignDocumentLifecycleConstraints1790000600000 implements MigrationInterface {
name = 'F4AlignDocumentLifecycleConstraints1790000600000';
@@ -76,6 +76,19 @@ export class F4AlignDocumentLifecycleConstraints1790000600000 implements Migrati
)
`);
// F4 retira Director como destinatario activo y agrega copia al inspector.
// La migración 040 ya eliminó previamente las filas DIRECTOR existentes.
await queryRunner.query(`
ALTER TABLE inspection_document_deliveries
DROP CONSTRAINT IF EXISTS chk_inspection_document_deliveries_recipient_kind
`);
await queryRunner.query(`
ALTER TABLE inspection_document_deliveries
ADD CONSTRAINT chk_inspection_document_deliveries_recipient_kind CHECK (
recipient_kind IN ('COMPANY','OFFICE','INSPECTOR')
)
`);
// Las firmas F4 pertenecen al snapshot LOCKED. El trigger D5 exigía READY.
await queryRunner.query(`
CREATE OR REPLACE FUNCTION dhv2_guard_act_signature_ready()
@@ -217,6 +230,20 @@ export class F4AlignDocumentLifecycleConstraints1790000600000 implements Migrati
)
`);
// Conservamos INSPECTOR en el CHECK de rollback para no destruir ni falsificar
// entregas F4 ya auditadas. D5 puede seguir operando con sus tres valores y el
// backup PRE-F4 sigue siendo la fuente de una restauración histórica exacta.
await queryRunner.query(`
ALTER TABLE inspection_document_deliveries
DROP CONSTRAINT IF EXISTS chk_inspection_document_deliveries_recipient_kind
`);
await queryRunner.query(`
ALTER TABLE inspection_document_deliveries
ADD CONSTRAINT chk_inspection_document_deliveries_recipient_kind CHECK (
recipient_kind IN ('COMPANY','OFFICE','DIRECTOR','INSPECTOR')
)
`);
await queryRunner.query(`
CREATE OR REPLACE FUNCTION dhv2_guard_act_signature_ready()
RETURNS trigger LANGUAGE plpgsql AS $$