netgescon-day0/docs/05-backup-unificazione/files-scattered-production/miki08-anagrafica-unica.txt

236 lines
9.5 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

ora cominciamo a fare sul serio ci sono delle cose da ritoccare menù e altri collegamenti che non funzionano ma finiamo la parte degli archivi e poi procedo con il debug specifico
questa è un parte essenziale degli archivi dove tutte le anagrafiche finiscono questa è la parte dove andiamo a gestire tutti i nominativi che andremo a gestire e che poi saranno tutti collegati con le loro funzioni o con la loro appartenenza nella struttura generale di Netgescon procediamo a creare anche questa struttura e poi andiamo con le grosse modifiche a gestire la contabilità del sin golo stabile e dell'amministratore
ti ricordo le credenziali per accedere a MySQL onde evitare di farti diventare matto con giri strani per trovare i dati che ti servono.
USER: netgescon_user
PW: NetGescon2024!
## 📚 **SISTEMA ANAGRAFICA UNICA NETGESCON**
### 🎯 **Concetto Chiave: Rubrica Centralizzata**
Hai progettato un sistema innovativo con:
- **👤 Una persona = Un record anagrafico**
- **🔑 Codice univoco 8 caratteri alfanumerici** per identificazione
- **🏢 Rubrica dello studio unificata** per tutti i condomini
- **🔗 Relazioni multiple** per collegare persone a unità immobiliari
## 🏗️ **Struttura Database Completa**
### 📊 **Tabella Principale: `persone`**
```sql
CREATE TABLE persone (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
codice_interno VARCHAR(8) UNIQUE NOT NULL, -- 🔑 CODICE UNIVOCO 8 CARATTERI
tipologia ENUM('fisica','giuridica','ditta_individuale') NOT NULL,
-- 📋 DATI ANAGRAFICI BASE
cognome VARCHAR(100) NOT NULL,
nome VARCHAR(100) NOT NULL,
codice_fiscale VARCHAR(16) UNIQUE, -- Univoco ma nullable per stranieri
partita_iva VARCHAR(11),
data_nascita DATE,
luogo_nascita_comune_id INT,
-- 📍 RESIDENZA
residenza_via VARCHAR(255),
residenza_comune_id INT,
-- 📞 CONTATTI GERARCHICI
telefono_principale VARCHAR(20) UNIQUE, -- 🔑 UNIVOCO per identificazione utilizza il cellulare per il telefono fisso potrebbe essere un centralino
telefono_secondario VARCHAR(20),
email_principale VARCHAR(255), -- prevedi la possibilità di agganciare più email allo stesso soggetto una preferenziale ma avere la possibilità di più email a disposizione
email_pec VARCHAR(255), -- anche di questa ma di solito potebbero essere poche
whatsapp VARCHAR(20),
-- ⚙️ PREFERENZE COMUNICAZIONE
modalita_comunicazione_preferita ENUM('email','sms','whatsapp','telefono','posta'),
lingua_preferita VARCHAR(10) DEFAULT 'it',
-- 🔒 PRIVACY E CONSENSI
consenso_privacy BOOLEAN DEFAULT FALSE,
consenso_marketing BOOLEAN DEFAULT FALSE,
data_consenso_privacy TIMESTAMP,
-- 🏢 DATI SOCIETÀ (se giuridica)
ragione_sociale VARCHAR(255),
forma_giuridica VARCHAR(50),
codice fiscale e Partita IVA
-- 📅 AUDIT
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 🔗 **Tabella Relazioni: `persone_unita_relazioni`**
```sql
CREATE TABLE persone_unita_relazioni (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
persona_id BIGINT NOT NULL,
unita_id BIGINT NOT NULL,
-- 👥 TIPI DI RELAZIONE -- questi li metterei come una tabella a parte non voglio per forza vincolare con solo poche opzioni ma magari metterle nella gestione del superAdmin che gestige tutte le tabelle che devono fornire dei dati ma che non possono essere modificate dall'amministratore del condominio (vedi comuni, tabelle fiscali, dati per categorie catastali, dati per ritenute d'accotno ecc....
tipo_relazione ENUM(
'proprietario',
'comproprietario',
'inquilino',
'usufruttuario',
'delegato_assemblea',
'referente',
'amministratore_sostegno'
),
quota_relazione DECIMAL(5,2), -- % di proprietà
data_inizio DATE NOT NULL,
data_fine DATE, -- NULL = relazione attiva
attivo BOOLEAN DEFAULT TRUE,
-- 📢 PREFERENZE COMUNICAZIONE PER QUESTA UNITÀ
riceve_comunicazioni BOOLEAN DEFAULT TRUE,
riceve_convocazioni BOOLEAN DEFAULT TRUE,
vota_assemblea BOOLEAN DEFAULT TRUE
);
```
## 🔑 **Sistema Codici Univoci 8 Caratteri**
### **Generazione Automatica con Trigger**
```sql
DELIMITER $$
CREATE TRIGGER generate_codice_univoco_persone
BEFORE INSERT ON persone
FOR EACH ROW
BEGIN
DECLARE codice_temp VARCHAR(8);
DECLARE codice_exists INT DEFAULT 1;
IF NEW.codice_interno IS NULL OR NEW.codice_interno = '' THEN
WHILE codice_exists > 0 DO
SET codice_temp = CONCAT(
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1),
SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + (RAND() * 36)), 1)
);
SELECT COUNT(*) INTO codice_exists
FROM persone
WHERE codice_interno = codice_temp;
END WHILE;
SET NEW.codice_interno = codice_temp;
END IF;
END$$
DELIMITER ;
```
## 🚫 **Sistema Anti-Duplicazione**
### **Controlli Automatici**
```php
// Funzione controllo duplicati
function verificaDuplicati($datiPersona) {
$duplicati = [];
// 1⃣ CONTROLLO CODICE FISCALE (Critico)
if ($existing = Persona::where('codice_fiscale', $datiPersona['codice_fiscale'])->first()) {
$duplicati[] = [
'tipo' => 'CRITICO',
'campo' => 'Codice Fiscale',
'persona_esistente' => $existing,
'azione' => 'BLOCCA_O_MERGE'
];
}
// 2⃣ CONTROLLO TELEFONO PRINCIPALE (Critico) ho indicato un telefono genreico ma l'unico telefono che identifica la persona ormai è il suo cellulare
if ($existing = Persona::where('telefono_principale', $datiPersona['telefono'])->first()) {
$duplicati[] = [
'tipo' => 'CRITICO',
'campo' => 'Telefono Principale',
'persona_esistente' => $existing,
'azione' => 'BLOCCA_O_MERGE'
];
}
// 3⃣ CONTROLLO EMAIL (Warning) -- anche questo ne abbiamo uno di riferimento ma potremmo avere anche l'indirizzo generico della società tipo info perciò va bene controllare ma non possiamo essere troppo fiscali
if ($existing = Persona::where('email_principale', $datiPersona['email'])->first()) { $duplicati[] = [
'tipo' => 'WARNING',
'campo' => 'Email Principale',
'persona_esistente' => $existing,
'azione' => 'AVVISA'
];
}
// 4⃣ CONTROLLO OMONIMIA (Warning)
if ($existing = Persona::where('cognome', $datiPersona['cognome'])
->where('nome', $datiPersona['nome'])
->where('data_nascita', $datiPersona['data_nascita'])
->first()) {
$duplicati[] = [
'tipo' => 'WARNING',
'campo' => 'Omonimia Completa',
'persona_esistente' => $existing,
'azione' => 'VERIFICA_MANUALE'
];
}
return $duplicati;
}
📚 IMPLEMENTAZIONE ANAGRAFICA UNICA NETGESCON
Consulta il manuale completo in:
/home/michele/netgescon/docs/02-architettura-laravel/03-anagrafica-condomini/ANALISI-ANAGRAFICA.md
SISTEMA PROGETTATO:
1. 👤 RUBRICA CENTRALIZZATA:
- Una persona = Un record anagrafico
- Codice univoco 8 caratteri alfanumerici automatico
- Controlli anti-duplicazione su CF e telefono
- Relazioni multiple con unità immobiliari
2. 🏗️ STRUTTURA DATABASE:
- Tabella `persone` (anagrafica principale)
- Tabella `persone_unita_relazioni` (collegamenti)
- Tabella `rappresentanti_legali` (per società)
- Tabella `conferme_identita` (validazioni)
3. 🔑 IDENTIFICATORI UNIVOCI:
- codice_interno (8 caratteri alfanumerici)
- codice_fiscale (univoco, nullable per stranieri)
- telefono_principale (univoco per identificazione)
4. 🚫 ANTI-DUPLICAZIONE:
- Controlli automatici su CF, telefono, email
- Sistema merge persone duplicate
- Audit completo modifiche anagrafiche
5. 🔗 COLLEGAMENTO UNIVERSALE:
- Stesso anagrafico collegabile a N unità
- Ruoli diversi per unità diverse
- Preferenze comunicazione per relazione
OBIETTIVO: Creare rubrica centralizzata studio che elimina duplicazioni e collega persone a tutte le maschere del sistema.
IMPLEMENTA seguendo esattamente lo schema nel manuale!
```
## 📋 **Vantaggi del Sistema**
1. **🎯 Zero Duplicazioni**: Una persona esiste una sola volta
2. **🔍 Ricerca Universale**: Trova persona in qualsiasi schermata e posso vedere in quale struttura è presente e spostarmi agevolmente tra le varie schermate
3. **📞 Comunicazioni Centralizzate**: Contatti aggiornati ovunque
4. **👥 Relazioni Multiple**: Una persona può essere proprietaria + delegata + referente
5. **🏢 Rubrica Studio**: Database unico per tutto lo studio
6. **🔑 Identificazione Rapida**: Codice 8 caratteri per accesso veloce