From 46cb5e0eb9a5fc8191dabded3cb2073a0f01f2c3 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Wed, 9 Sep 2026 10:40:57 -0300 Subject: [PATCH] fix(f6): allow atomic field classification handoff --- .../1790091000000-f6-solid-inventory-model.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/api-v3/src/database/migrations/1790091000000-f6-solid-inventory-model.ts b/api-v3/src/database/migrations/1790091000000-f6-solid-inventory-model.ts index 0a63dad..8b2154d 100644 --- a/api-v3/src/database/migrations/1790091000000-f6-solid-inventory-model.ts +++ b/api-v3/src/database/migrations/1790091000000-f6-solid-inventory-model.ts @@ -121,6 +121,10 @@ export class F6SolidInventoryModel1790091000000 implements MigrationInterface { // Enforce classification level and Subinstallation compatibility on every // physical Inventory write, not just through the current WEB/API. + // A FIELD_SURVEY+DRAFT row may exist momentarily without family because the + // field-discovery transaction creates the provisional record before the F6 + // structure service assigns the family selected by the inspector. Such a row + // remains unusable for findings until classification is present. await queryRunner.query(` CREATE OR REPLACE FUNCTION enforce_f6_asset_family_contract() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -137,6 +141,9 @@ export class F6SolidInventoryModel1790091000000 implements MigrationInterface { IF child_type='instalacion' THEN IF NEW.inventory_family_id IS NULL THEN + IF NEW.data_origin='FIELD_SURVEY' AND NEW.information_status='DRAFT' THEN + RETURN NEW; + END IF; RAISE EXCEPTION USING ERRCODE='23514',MESSAGE='La Instalación requiere clasificación técnica'; END IF; SELECT level::text INTO family_level FROM inventory_families WHERE id=NEW.inventory_family_id AND is_active=true; @@ -147,8 +154,14 @@ export class F6SolidInventoryModel1790091000000 implements MigrationInterface { END IF; IF child_type='subinstalacion' THEN - IF NEW.inventory_family_id IS NULL OR NEW.parent_id IS NULL THEN - RAISE EXCEPTION USING ERRCODE='23514',MESSAGE='La Subinstalación requiere Instalación padre y clasificación técnica'; + IF NEW.parent_id IS NULL THEN + RAISE EXCEPTION USING ERRCODE='23514',MESSAGE='La Subinstalación requiere una Instalación padre'; + END IF; + IF NEW.inventory_family_id IS NULL THEN + IF NEW.data_origin='FIELD_SURVEY' AND NEW.information_status='DRAFT' THEN + RETURN NEW; + END IF; + RAISE EXCEPTION USING ERRCODE='23514',MESSAGE='La Subinstalación requiere clasificación técnica'; END IF; SELECT level::text INTO family_level FROM inventory_families WHERE id=NEW.inventory_family_id AND is_active=true; SELECT inventory_family_id INTO parent_family FROM assets WHERE id=NEW.parent_id;