From 57739dcb3eb340dbdfa39e2d4646b57ef5d0c77f Mon Sep 17 00:00:00 2001 From: enlineawork Date: Tue, 8 Sep 2026 09:24:50 -0300 Subject: [PATCH] fix: make F4 lifecycle constraint rollback executable --- ...f4-align-document-lifecycle-constraints.ts | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/api-v3/src/database/migrations/1790000600000-f4-align-document-lifecycle-constraints.ts b/api-v3/src/database/migrations/1790000600000-f4-align-document-lifecycle-constraints.ts index 4800de9..1c8d62b 100644 --- a/api-v3/src/database/migrations/1790000600000-f4-align-document-lifecycle-constraints.ts +++ b/api-v3/src/database/migrations/1790000600000-f4-align-document-lifecycle-constraints.ts @@ -97,6 +97,20 @@ export class F4AlignDocumentLifecycleConstraints1790000600000 implements Migrati } public async down(queryRunner: QueryRunner): Promise { + // Primero restauramos la guarda D5. De otro modo el propio trigger F4 impediría + // traducir una fila SEALED a CLOSED durante el rollback. + await queryRunner.query(` + CREATE OR REPLACE FUNCTION dhv2_guard_closed_act_immutable() + RETURNS trigger LANGUAGE plpgsql AS $$ + BEGIN + IF OLD.status IN ('CLOSED','RECTIFIED') THEN + RAISE EXCEPTION 'El acta cerrada es inmutable'; + END IF; + RETURN NEW; + END + $$ + `); + // El contrato D5 no conoce los estados F4. Reducimos las representaciones // nuevas a sus equivalentes históricos antes de restaurar sus CHECKs. await queryRunner.query(` @@ -189,17 +203,5 @@ export class F4AlignDocumentLifecycleConstraints1790000600000 implements Migrati END $$ `); - - await queryRunner.query(` - CREATE OR REPLACE FUNCTION dhv2_guard_closed_act_immutable() - RETURNS trigger LANGUAGE plpgsql AS $$ - BEGIN - IF OLD.status IN ('CLOSED','RECTIFIED') THEN - RAISE EXCEPTION 'El acta cerrada es inmutable'; - END IF; - RETURN NEW; - END - $$ - `); } }