netgescon-day0/docs/000-FILAMENT/12-RELAZIONI-MDB.md

186 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Relazioni MDB → NetGescon (mappa operativa)
## 1) Stabili
**Fonte:** `dbc/Stabili.mdb` → tabella `Stabili`
- **stabili** (dominio)
- chiave legacy: `stabili.codice_stabile` = `Stabili.cod_stabile`
- serve per collegare tutte le tabelle per stabile/cartella
### 📁 Regola archivi per amministratore (obbligatoria)
Gli archivi legacy **devono** stare nella cartella dellamministratore:
- Base: `storage/app/amministratori/<COD_AMM>/legacy`
- Stabili: `.../legacy/dbc/Stabili.mdb`
- Indice anni: `.../legacy/cartellestabili_e_anni.mdb`
- Per stabile: `.../legacy/<COD_STABILE>/<ANNO>/singolo_anno.mdb`
- Generale: `.../legacy/<COD_STABILE>/generale_stabile.mdb`
Questo evita contaminazioni tra amministratori (es. tabelle “fantasma” come TABADL su stabili che non la hanno).
### 📁 Archivi per stabile (documenti interni)
Oltre alla separazione per amministratore, i **documenti interni** devono vivere anche per stabile:
- `storage/app/amministratori/<COD_AMM>/stabili/<CODICE_UNIVOCO_STABILE>/...`
Qui vanno PDF, XML, allegati e documenti generati dallapp. In questo modo non si sovrappongono tra stabili diversi.
### 🔒 Legacy: lettura diretta (no copia)
Gli archivi legacy si leggono **in sola lettura** per portare dati in staging. Non si copiano in locale.
Il percorso viene risolto in base a amministratore/stabile per evitare contaminazioni.
## 2) Unità / nominativi (condomin)
**Fonte:** `singolo_anno.mdb` → tabella `condomin`
- **condomin.cod_cond** = **ID unità legacy**
- **condomin.cond_inq** o `cond_inquil` = `C` (condomino) / `I` (inquilino)
- **condomin.scala + condomin.interno** → **unità immobiliare**
- **condomin.(nome/cognome/cf/email)** → **soggetto**
**Nota rubrica ruoli:** in `rubrica_ruoli.meta.cod_cond` possono comparire formati legacy tipo `I0012` o `13-INQ`. In questi casi si normalizza il codice con sola parte numerica per il match con `condomin.cod_cond`.
**Relazioni target:**
- `unita_immobiliari` (dominio) ← condomin (scala, interno, cod_stabile)
- `soggetti` (dominio) ← condomin (dati anagrafici)
- `proprieta` (pivot) collega `soggetti``unita_immobiliari` usando `condomin.cond_inq`
## 3) Rate emesse (emes_gen / emes_det)
**Fonte:** `generale_stabile.mdb` → tabelle `emes_gen`, `emes_det`
- **emes_gen.n_emissione** = chiave emissione
- **emes_det.n_emissione** → collega emissione
- **emes_det.anno_emissione** → cartella (es. 0001=2024, 0002=2025)
- **emes_det.cod_cond** → unità legacy (condomin.cod_cond)
- **emes_det.cond_inq** → soggetto (C/I)
**Relazioni target:**
- `rate_emissioni` (staging) ← `emes_gen`
- `rate_emissioni_dettaglio` (staging) ← `emes_det`
- `rate_emesse` (dominio) ← `rate_emissioni_dettaglio`
- `unita_immobiliare_id` risolto da `condomin.cod_cond`
- `soggetto_responsabile_id` in base a `cond_inq`
- `piano_rateizzazione_id` per `n_emissione`
## 4) Incassi
**Fonte:** `singolo_anno.mdb` → tabella `incassi`
- **incassi.cod_cond** → unità legacy (condomin.cod_cond)
- **incassi.cond_inq** → soggetto (C/I)
- **incassi.n_riferimento / n_mese / anno_rif** → aggancio rate
**Relazioni target:**
- `incassi` (dominio)
- match con `rate_emesse` per riconciliazione
## 5) Tabelle millesimali
**Fonte:** `singolo_anno.mdb``tabelle`, `dett_tab`
- **tabelle.cod_tab** = tabella millesimale
- **dett_tab.cod_tab** → tabella
- **dett_tab.id_cond** → unità legacy (condomin.cod_cond)
**Relazioni target:**
- `tabelle_millesimali` (dominio)
- `dettagli_millesimali` (dominio) collegato a `unita_immobiliari`
## 6) Voci di spesa
**Fonte:** `singolo_anno.mdb``voc_spe`
- **voc_spe.cod_tab** → tabella millesimale
- **voc_spe.cod_spe** → voce spesa
**Relazioni target:**
- `voci_spesa` (dominio) collegate a `tabelle_millesimali`
- usate per ripartizioni e prima nota
## 7) Operazioni / mastrino
**Fonte:** `singolo_anno.mdb``operazioni`
- **operazioni.cod_spe** → `voc_spe`
- **operazioni.cod_tab** → `tabelle`
- **operazioni.cod_cond** → `condomin`
**Relazioni target:**
- `operazioni_contabili` (dominio)
- legame con `voci_spesa` e `tabelle_millesimali`
---
## Diagramma relazioni (mermaid)
```mermaid
flowchart LR
Stabili[(Stabili.mdb)] -->|cod_stabile| STABILI[stabili]
Condomin[(condomin)] -->|cod_stabile| STABILI
Condomin -->|scala+interno| UNITA[unita_immobiliari]
Condomin -->|anagrafica| SOGG[soggetti]
SOGG -->|pivot| PROP[proprieta]
PROP -->|unita_id| UNITA
EmesGen[(emes_gen)] -->|n_emissione| EMISSI[rate_emissioni]
EmesDet[(emes_det)] -->|n_emissione| EMDET[rate_emissioni_dettaglio]
EmesDet -->|cod_cond| Condomin
EMDET -->|unità/soggetto| RATE[rate_emesse]
EMISSI -->|piano per emissione| PIANI[piano_rateizzazione]
PIANI --> RATE
Incassi[(incassi)] -->|cod_cond| Condomin
Incassi -->|incasso| INCASSI[incassi]
INCASSI -. riconcilia .- RATE
Tabelle[(tabelle)] -->|cod_tab| TM[tabelle_millesimali]
DettTab[(dett_tab)] -->|cod_tab| TM
DettTab -->|id_cond| Condomin
TM --> DETT[dettagli_millesimali]
DETT --> UNITA
VocSpe[(voc_spe)] -->|cod_tab| TM
VocSpe --> VOCI[voci_spesa]
Operazioni[(operazioni)] -->|cod_spe| VOCI
Operazioni -->|cod_tab| TM
Operazioni --> OPER[operazioni_contabili]
```
## Verifica import (checklist)
1. **Stabili** importati da `Stabili.mdb`.
2. **condomin** importato (staging), poi **unità + soggetti + proprietà** in dominio.
3. **emes_gen / emes_det** importati in staging → `rate_emissioni*`.
4. **rate_emesse** (dominio) generate da `rate_emissioni_dettaglio` con legame a unità/soggetto.
5. **tabelle / dett_tab**`tabelle_millesimali` + dettagli.
6. **voc_spe**`voci_spesa` con link a tabella millesimale.
7. **operazioni** collegate a tabella + voce.
## Conformità import per stabile (rate/incassi)
**Obiettivo:** per ogni stabile/cartella assicurare coerenza tra staging e dominio.
### Rate emesse
- `rate_emissioni` (staging) deve avere le emissioni per `anno_emissione` atteso (es. 0001, 0002).
- `rate_emissioni_dettaglio` deve avere righe per `cod_cond` e `n_emissione`.
- `rate_emesse` (dominio) deve avere **una riga per ogni dettaglio** (o più se duplicati legittimi), con:
- `unita_immobiliare_id` risolto da `condomin.cod_cond`.
- `soggetto_responsabile_id` coerente con `cond_inq` (`C`/`I`).
- `note` con `n_emissione` e `cod_cond_src` per tracciabilità.
### Incassi
- `incassi` (dominio) deve avere `cod_cond_gescon` e `cond_inquil` valorizzati.
- La riconciliazione con `rate_emesse` deve usare:
- `cod_cond` + `n_rata_riferimento` (o `n_mese`)
- importo e data (tolleranza data/periodo).
## Controlli automatici suggeriti
- **Unità duplicate o mancanti**: verificare `condomin.cod_cond` mappati su `unita_immobiliari`.
- **Inquilini multipli**: una sola relazione `locazione` attiva per unità, altrimenti dedup.
- **Rate orfane**: `rate_emesse` senza `unita_immobiliare_id` o `soggetto_responsabile_id`.
- **Emissioni incoerenti**: `rate_emissioni` con `n_emissione` non presenti in `rate_emissioni_dettaglio`.
## Bonifica relazioni rubrica (inquilini/proprietari)
Comando utile:
- `php artisan gescon:bonifica-ruoli-legacy --stabile-id=<ID> [--apply]`
Note operative:
- Se in `rubrica_ruoli.meta.cod_cond` compaiono prefissi `I` o suffissi `-INQ`, sono **inquilini**.
- Le relazioni con ruolo incoerente vengono disattivate in bonifica.
- Dopo bonifica, una sola relazione `inquilino` attiva per unità.
## Esempio controllo (stabile 0019)
- `rate_emesse` collegate: 535
- rate con `unita_immobiliare_id` mancanti: 0
- rate con `soggetto_responsabile_id` mancanti: 0
- inquilini duplicati in rubrica: risolti tramite bonifica
Se vuoi, posso aggiungere una tabella “checklist” per ogni stabile con esito ✅/⚠️.