From 6d01ab229623ed2ad25b205991822e31748c7962 Mon Sep 17 00:00:00 2001 From: michele Date: Thu, 27 Aug 2026 13:29:25 +0200 Subject: [PATCH] =?UTF-8?q?fix(directives):=20enforce=20id=5Fcond=20mappin?= =?UTF-8?q?g=20between=20condomin=20and=20comproprietari,=20preserve=2050%?= =?UTF-8?q?=20compropriet=C3=A0=20and=20document=20architectural=20rules?= =?UTF-8?q?=20(task-d095b0e23b)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/AGENTS.md | 14 ++++++++++++- .../Commands/ImportCondominMirror0021.php | 2 +- docs/ui-wireframes/nominativi-stabile.md | 2 +- .../directives/ANAGRAFICHE_MAPPING_LEGACY.md | 21 +++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 skill-netgescon/directives/ANAGRAFICHE_MAPPING_LEGACY.md diff --git a/.agents/AGENTS.md b/.agents/AGENTS.md index 9b15a4c..da1d67e 100644 --- a/.agents/AGENTS.md +++ b/.agents/AGENTS.md @@ -16,12 +16,24 @@ ## Ordine di lettura obbligatorio Se uno dei file obbligatori manca o non e leggibile, l'agent deve fermarsi e restituire `BLOCCO_CONTESTO`. -## Regole rigide Catasto +## Regole rigide Catasto e Anagrafiche Stabili - E vietato creare fallback dati per riempire la maschera Catasto. - E vietato usare query locali di comodo al posto dell'archivio consolidato delle unita immobiliari. - Se manca una relazione, una sorgente dati o una conferma strutturale, l'agent deve restituire `BLOCCO_DATI`. - Ogni modifica deve proteggere il flusso: `import/prelettura -> matching -> conferma -> aggiornamento unita consolidate -> validazione`. +- **Relazioni Anagrafiche Legacy**: + - `id_cond` e il campo unico e tassativo di collegamento tra la tabella `condomin` e la tabella `comproprietari` per associare comproprietari, nudi proprietari ed usufruttuari alla corretta unita immobiliare. + - `cod_cond` e il codice contabile gestionale di ciascun anno gestione per legare rate ed incassi (`emes_det` e `incassi` in `generale_stabile.mdb`). + - `cond_inquil` (`'C'` per Condomino/Proprietario e `'I'` per Inquilino) distingue tassativamente la titolarita dei movimenti contabili per ciascuna gestione. + - Le percentuali di comproprieta e diritti reali (`perc_diritto_reale`, es. 50% / 50%) devono essere tassativamente rispettate e conservate nelle movimentazioni temporali di ciascun anno gestione. + +## Regole rigide Stabili e Fatture Elettroniche (FE) + +- L'anagrafica degli Stabili viene alimentata e sincronizzata direttamente dall'archivio consolidato `Stabili.mdb` popolando tassativamente il `codice_fiscale` dello Stabile. +- Le Fatture Elettroniche (XML/P7M/ZIP) scansionate nelle cartelle di lavoro e di archivio vengono assegnate ed associate agli Stabili con certezza assoluta ed esclusiva tramite il matching del `CessionarioCommittente` con il `codice_fiscale` dello Stabile. +- È vietata qualsiasi assegnazione arbitraria di Fatture Elettroniche priva di riscontro sul Codice Fiscale / Partita IVA dell'ente condominiale. +- È vietato lo svuotamento o la cancellazione automatica dei dati degli stabili consolidati (la pipeline di importazione richiede l'opzione esplicita `--reset-temp`). ## Regole macchina diff --git a/app/Console/Commands/ImportCondominMirror0021.php b/app/Console/Commands/ImportCondominMirror0021.php index 59d2c50..1bc4223 100644 --- a/app/Console/Commands/ImportCondominMirror0021.php +++ b/app/Console/Commands/ImportCondominMirror0021.php @@ -189,7 +189,7 @@ public function handle(): int $unitInfo = ($cIdCond && isset($unitMapByIdCond[$cIdCond])) ? $unitMapByIdCond[$cIdCond] - : (($cCodCond && isset($unitMapByCodCond[$cCodCond])) ? $unitMapByCodCond[$cCodCond] : null); + : null; $rawScala = $unitInfo['scala'] ?? (isset($c['ex_scala']) ? (string)$c['ex_scala'] : ''); $rawInterno = $unitInfo['interno'] ?? (isset($c['ex_int']) ? (string)$c['ex_int'] : ''); diff --git a/docs/ui-wireframes/nominativi-stabile.md b/docs/ui-wireframes/nominativi-stabile.md index 3fbbaef..01be402 100644 --- a/docs/ui-wireframes/nominativi-stabile.md +++ b/docs/ui-wireframes/nominativi-stabile.md @@ -25,7 +25,7 @@ # ASCII Wireframe - Nominativi e Anagrafica Unica per Stabile | | NOMINATIVO CANONICO | CF / P.IVA | RUOLO & QUOTA | UNITA IMMOBILIARE | PERIODO / GESTIONE | AZIONI | | | +--------------------------+------------------+-------------------+-------------------+--------------------+--------+ | | | FRANCIONI CLAUDIA / | FRNCLD49P51H501B | Comproprietà 50% | Scala B - Int. 4 | Dal 01/01/2000 | [Apri] | | -| | BARONE MICHELE | BRNMHL69M11H501K | (Piena proprieta) | (ID 313) | (Gestione 0914) | [Edit] | | +| | BARONE MICHELE | BRNMHL69M11H501K | Comproprietà 50% | (ID 321) | (Gestione 0914) | [Edit] | | | | [Email: cecilia.tordini@gmail.com] | | | | | | | +--------------------------+------------------+-------------------+-------------------+--------------------+--------+ | | | SAVELLI FABIO | SVLFBA58H27H501P | Comproprietà 50% | Scala A - Int. 25 | Dal 01/01/2000 | [Apri] | | diff --git a/skill-netgescon/directives/ANAGRAFICHE_MAPPING_LEGACY.md b/skill-netgescon/directives/ANAGRAFICHE_MAPPING_LEGACY.md new file mode 100644 index 0000000..5580f6b --- /dev/null +++ b/skill-netgescon/directives/ANAGRAFICHE_MAPPING_LEGACY.md @@ -0,0 +1,21 @@ +# Direttiva Architetturale: Mapping Anagrafico e Contabile Legacy Gescon + +## 1. Collegamento tra `condomin` e `comproprietari` +- **Campo primario**: `id_cond` +- **Regola tassativa**: La tabella `comproprietari` deve essere collegata alla tabella `condomin` **esclusivamente** tramite il campo `id_cond`. +- **Esempio Stabile 0016 (Interno B/4)**: + - `condomin`: `id_cond = 47`, `cod_cond = 50`, `scala = B`, `int = 4`, `nom_cond = Barone Michele`, `perc_diritto_reale = 50` + - `comproprietari`: `id_cond = 47`, `nom_cond = Francioni Claudia`, `email = cecilia.tordini@gmail.com`, `perc_diritto_reale = 50` + - Risultato unificato: Int. B/4 -> **Barone Michele (50% Comproprietà)** e **Francioni Claudia / Cecilia Tordini (50% Comproprietà)**. + - Divieto: È vietata qualsiasi associazione tra `comproprietari` e `condomin` basata sul campo `cod_cond`, in quanto `cod_cond` è il progressivo contabile della singola gestione e può identificare un'altra unità in quell'anno (es. `cod_cond = 47` appartiene all'interno E - Giovagnoni Marina). + +## 2. Collegamento Contabile (`incassi`, `rate`, `emes_det`) +- **Campo contabile per anno gestione**: `cod_cond` +- **Distinzione ruolo contabile**: `cond_inquil` + - `'C'`: Condomino / Proprietario + - `'I'`: Inquilino / Locatario +- **Funzione**: Il campo `cod_cond` accoppiato con `cond_inquil` lega in maniera univoca ciascuna riga di addebito o incasso (`incassi`, `rate`, `emes_det` in `generale_stabile.mdb`) all'anagrafica del condomino o dell'inquilino per quella specifica gestione. + +## 3. Gestione Percentuali e Movimentazioni Temporali +- Le quote e percentuali di possesso (`perc_diritto_reale`, es. 50% / 50%) devono essere mantenute con precisione senza forzare la Piena Proprietà (100%) in presenza di comproprietari o contitolari. +- Ciascun avvicendamento storico va conservato nelle movimentazioni temporali per l'anno gestione di competenza.