# API_ENDPOINTS.md - NetGesCon Laravel
**Creato**: 8 Luglio 2025  
**Ultimo aggiornamento**: 8 Luglio 2025  
**Versione**: 1.0

## 🎯 **SCOPO DEL DOCUMENTO**
Documentazione completa degli endpoint API REST, struttura request/response, autenticazione e permessi per facilitare lo sviluppo frontend e integrazioni esterne.

---

## 🔐 **AUTENTICAZIONE E SICUREZZA**

### **Sistema Autenticazione**:
- **Laravel Sanctum**: Token-based authentication
- **Multi-Database**: Route automatiche per database amministratore
- **Permissions**: Controllo granulare basato su ruoli

### **Headers Richiesti**:
```http
Authorization: Bearer {sanctum_token}
Content-Type: application/json
Accept: application/json
X-Database-Context: {codice_amministratore}  # Per multi-database
```

### **Struttura Response Standard**:
```json
{
    "success": true,
    "data": { /* payload */ },
    "message": "Operazione completata con successo",
    "errors": {},
    "meta": {
        "current_page": 1,
        "total": 100,
        "per_page": 15
    }
}
```

---

## 🏢 **GESTIONE AMMINISTRATORI**

### **GET /api/amministratori** - Lista amministratori
```http
GET /api/amministratori?page=1&per_page=15&search=rossi&active=true

Response 200:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "codice_amministratore": "ADM8K3L9",
            "nome_completo": "Mario Rossi",
            "nome_amministratore": "Mario",
            "cognome_amministratore": "Rossi",
            "codice_fiscale": "RSSMRA80A01H501Z",
            "email": "mario.rossi@example.com",
            "telefono": "+39 339 1234567",
            "database_attivo": "netgescon_ADM8K3L9",
            "stato_sincronizzazione": "distribuito",
            "stabili_count": 5,
            "created_at": "2025-01-15T10:30:00Z",
            "updated_at": "2025-07-08T14:20:00Z"
        }
    ],
    "meta": { /* pagination */ }
}
```

### **POST /api/amministratori** - Crea amministratore
```http
POST /api/amministratori

Request:
{
    "nome_amministratore": "Mario",
    "cognome_amministratore": "Rossi",
    "codice_fiscale": "RSSMRA80A01H501Z",
    "partita_iva": "12345678901",
    "email": "mario.rossi@example.com",
    "telefono": "+39 339 1234567",
    "indirizzo": "Via Roma 123, 00100 Roma RM"
}

Response 201:
{
    "success": true,
    "data": {
        "id": 1,
        "codice_amministratore": "ADM8K3L9",  # Auto-generato
        "database_attivo": "netgescon_ADM8K3L9",  # Auto-creato
        /* altri campi */
    },
    "message": "Amministratore creato con successo"
}
```

### **GET /api/amministratori/{id}** - Dettaglio amministratore
### **PUT /api/amministratori/{id}** - Aggiorna amministratore
### **DELETE /api/amministratori/{id}** - Elimina amministratore (soft delete)

---

## 🏠 **GESTIONE STABILI**

### **GET /api/stabili** - Lista stabili
```http
GET /api/stabili?amministratore_id=1&citta=Roma&con_ascensore=true

Response 200:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "codice_stabile": "STB5H7K1",
            "denominazione": "Condominio Villa Verde",
            "indirizzo_completo": "Via dei Pini 45, 00100 Roma (RM)",
            "indirizzo": "Via dei Pini 45",
            "cap": "00100",
            "citta": "Roma",
            "provincia": "RM",
            "codice_fiscale_stabile": "CVVERD123456789",
            "amministratore": {
                "id": 1,
                "nome_completo": "Mario Rossi",
                "codice_amministratore": "ADM8K3L9"
            },
            "configurazione": {
                "numero_rate_anno": 4,
                "mese_inizio_esercizio": 1,
                "ascensore": true,
                "posti_auto_totali": 15,
                "codice_destinatario_sdi": "XYZ1234",
                "pec_stabile": "villa.verde@pec.it"
            },
            "statistiche": {
                "unita_totali": 20,
                "unita_occupate": 18,
                "unita_libere": 2,
                "unita_in_affitto": 5
            },
            "created_at": "2025-01-15T10:30:00Z"
        }
    ]
}
```

### **POST /api/stabili** - Crea stabile
```http
POST /api/stabili

Request:
{
    "amministratore_id": 1,
    "denominazione": "Condominio Villa Verde",
    "indirizzo": "Via dei Pini 45",
    "cap": "00100",
    "citta": "Roma",
    "provincia": "RM",
    "codice_fiscale_stabile": "CVVERD123456789",
    "configurazione": {
        "ascensore": true,
        "numero_rate_anno": 4,
        "posti_auto_coperti": 10,
        "posti_auto_scoperti": 5,
        "codice_destinatario_sdi": "XYZ1234",
        "pec_stabile": "villa.verde@pec.it"
    }
}

Response 201:
{
    "success": true,
    "data": {
        "id": 1,
        "codice_stabile": "STB5H7K1",  # Auto-generato
        /* campi completi */
    },
    "message": "Stabile creato con successo"
}
```

---

## 🏘️ **GESTIONE UNITÀ IMMOBILIARI**

### **GET /api/unita-immobiliari** - Lista unità
```http
GET /api/unita-immobiliari?stabile_id=1&tipo_utilizzo=abitazione&stato=libera

Response 200:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "denominazione_completa": "Interno 1 - Piano 1°",
            "denominazione": "Interno 1",
            "piano": "1°",
            "stabile": {
                "id": 1,
                "denominazione": "Condominio Villa Verde",
                "codice_stabile": "STB5H7K1"
            },
            "catasto": {
                "numero_vani": 4.5,
                "superficie_catastale": 85.50,
                "categoria_catastale": "A/2",
                "classe_catastale": "3",
                "rendita_catastale": 450.00
            },
            "millesimi": {
                "proprieta": 45.5,
                "scale": 50.0,
                "ascensore": 45.5,
                "riscaldamento": 48.0,
                "totale": 189.0
            },
            "tipo_utilizzo": {
                "id": 1,
                "denominazione": "Abitazione",
                "codice": "ABIT"
            },
            "stato_occupazione": "occupata",
            "proprietari": [
                {
                    "id": 1,
                    "nome_completo": "Giovanni Bianchi",
                    "codice_anagrafica": "ANAP4UQ2",
                    "percentuale_proprieta": 100.00,
                    "tipo_diritto": "proprieta"
                }
            ],
            "contratto_attivo": null,
            "created_at": "2025-01-15T10:30:00Z"
        }
    ]
}
```

### **POST /api/unita-immobiliari** - Crea unità
```http
POST /api/unita-immobiliari

Request:
{
    "stabile_id": 1,
    "denominazione": "Interno 1",
    "piano": "1°",
    "tipo_utilizzo_id": 1,
    "catasto": {
        "numero_vani": 4.5,
        "superficie_catastale": 85.50,
        "categoria_catastale": "A/2",
        "classe_catastale": "3",
        "rendita_catastale": 450.00
    },
    "millesimi": {
        "proprieta": 45.5,
        "scale": 50.0,
        "ascensore": 45.5,
        "riscaldamento": 48.0,
        "acqua_calda": 45.5,
        "pulizie": 50.0
    },
    "stato_occupazione": "libera"
}

Response 201:
{
    "success": true,
    "data": { /* unità creata con tutti i campi */ },
    "message": "Unità immobiliare creata con successo"
}
```

---

## 👥 **GESTIONE ANAGRAFICA**

### **GET /api/anagrafica** - Lista anagrafica
```http
GET /api/anagrafica?search=rossi&tipo=persona_fisica&amministratore_id=1&ruolo=proprietario

Response 200:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "codice_anagrafica": "ANAP4UQ2",
            "tipo_soggetto": "persona_fisica",
            "nome_completo": "Giovanni Bianchi",
            "nome": "Giovanni",
            "cognome": "Bianchi",
            "codice_fiscale": "BNCGNN75C15H501K",
            "indirizzo_completo": "Via Verdi 10, 20100 Milano (MI)",
            "contatti": [
                {
                    "tipo_contatto": "email",
                    "valore": "giovanni.bianchi@email.com",
                    "principale": true,
                    "usa_per_comunicazioni": true
                },
                {
                    "tipo_contatto": "cellulare",
                    "valore": "+39 348 1234567",
                    "etichetta": "Mobile",
                    "usa_per_emergenze": true
                }
            ],
            "ruoli": {
                "proprietario": true,
                "inquilino": false,
                "fornitore": false
            },
            "statistiche": {
                "unita_possedute": 2,
                "percentuale_totale_proprieta": 150.00,
                "contratti_locazione_attivi": 0
            },
            "attivo": true,
            "created_at": "2025-01-15T10:30:00Z"
        }
    ]
}
```

### **POST /api/anagrafica** - Crea anagrafica
```http
POST /api/anagrafica

Request:
{
    "amministratore_id": 1,
    "tipo_soggetto": "persona_fisica",
    "nome": "Giovanni",
    "cognome": "Bianchi",
    "codice_fiscale": "BNCGNN75C15H501K",
    "data_nascita": "1975-03-15",
    "luogo_nascita": "Milano",
    "sesso": "M",
    "indirizzo_residenza": "Via Verdi 10",
    "cap_residenza": "20100",
    "citta_residenza": "Milano",
    "provincia_residenza": "MI",
    "contatti": [
        {
            "tipo_contatto": "email",
            "valore": "giovanni.bianchi@email.com",
            "principale": true,
            "usa_per_comunicazioni": true
        },
        {
            "tipo_contatto": "cellulare",
            "valore": "+39 348 1234567",
            "etichetta": "Mobile",
            "usa_per_emergenze": true
        }
    ],
    "privacy_consenso": true
}

Response 201:
{
    "success": true,
    "data": {
        "id": 1,
        "codice_anagrafica": "ANAP4UQ2",  # Auto-generato
        /* dati completi anagrafica + contatti */
    },
    "message": "Anagrafica creata con successo"
}
```

---

## 🏠 **GESTIONE DIRITTI REALI**

### **GET /api/diritti-reali** - Lista diritti
```http
GET /api/diritti-reali?unita_id=1&anagrafica_id=1&tipo_diritto=proprieta&attivi=true

Response 200:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "unita_immobiliare": {
                "id": 1,
                "denominazione_completa": "Interno 1 - Piano 1°",
                "stabile": {
                    "denominazione": "Condominio Villa Verde"
                }
            },
            "anagrafica": {
                "id": 1,
                "nome_completo": "Giovanni Bianchi",
                "codice_anagrafica": "ANAP4UQ2"
            },
            "tipo_diritto": "proprieta",
            "quota_formattata": "1000/1000",
            "percentuale_formattata": "100.00%",
            "quota_numeratore": 1000,
            "quota_denominatore": 1000,
            "percentuale_proprieta": 100.00,
            "dati_legali": {
                "data_acquisizione": "2020-05-15",
                "atto_notarile": "Dott. Mario Verdi - Rep. 1234/2020",
                "data_trascrizione": "2020-05-20",
                "numero_trascrizione": "12345/2020"
            },
            "validita": {
                "data_inizio": "2020-05-15",
                "data_fine": null,
                "attivo": true
            },
            "created_at": "2020-05-15T10:30:00Z"
        }
    ]
}
```

### **POST /api/diritti-reali** - Crea diritto
```http
POST /api/diritti-reali

Request:
{
    "unita_immobiliare_id": 1,
    "anagrafica_id": 1,
    "tipo_diritto": "proprieta",
    "percentuale_proprieta": 100.00,  # Auto-calcola quota
    "data_acquisizione": "2020-05-15",
    "atto_notarile": "Dott. Mario Verdi - Rep. 1234/2020",
    "data_trascrizione": "2020-05-20",
    "numero_trascrizione": "12345/2020",
    "data_inizio_validita": "2020-05-15"
}

Response 201:
{
    "success": true,
    "data": { /* diritto creato completo */ },
    "message": "Diritto reale registrato con successo"
}
```

---

## 📄 **GESTIONE CONTRATTI LOCAZIONE**

### **GET /api/contratti-locazione** - Lista contratti
```http
GET /api/contratti-locazione?unita_id=1&stato=attivo&in_scadenza=60

Response 200:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "numero_contratto": "LOC/2024/001",
            "unita_immobiliare": {
                "id": 1,
                "denominazione_completa": "Interno 1 - Piano 1°"
            },
            "locatore": {
                "id": 1,
                "nome_completo": "Giovanni Bianchi",
                "codice_anagrafica": "ANAP4UQ2"
            },
            "conduttore": {
                "id": 2,
                "nome_completo": "Maria Verdi",
                "codice_anagrafica": "ANAMV123"
            },
            "durata": {
                "data_stipula": "2024-01-15",
                "data_inizio": "2024-02-01",
                "data_fine": "2028-01-31",
                "durata_formattata": "48 mesi",
                "stato_scadenza": "attivo"
            },
            "economici": {
                "canone_mensile": 850.00,
                "spese_condominiali": 120.00,
                "canone_totale": 970.00,
                "deposito_cauzionale": 1700.00
            },
            "tipo_contratto": "libero",
            "stato_contratto": "attivo",
            "ripartizione_spese": {
                "spese_a_carico_inquilino": true,
                "riscaldamento_a_carico": true,
                "acqua_a_carico": true
            },
            "created_at": "2024-01-15T10:30:00Z"
        }
    ]
}
```

### **POST /api/contratti-locazione** - Crea contratto
```http
POST /api/contratti-locazione

Request:
{
    "unita_immobiliare_id": 1,
    "locatore_id": 1,
    "conduttore_id": 2,
    "numero_contratto": "LOC/2024/001",
    "data_stipula": "2024-01-15",
    "data_inizio": "2024-02-01",
    "data_fine": "2028-01-31",
    "tipo_contratto": "libero",
    "canone_mensile": 850.00,
    "deposito_cauzionale": 1700.00,
    "spese_condominiali": 120.00,
    "configurazione_spese": {
        "spese_a_carico_inquilino": true,
        "riscaldamento_a_carico": true,
        "acqua_a_carico": true
    }
}

Response 201:
{
    "success": true,
    "data": { /* contratto creato completo */ },
    "message": "Contratto di locazione registrato con successo"
}
```

---

## 💰 **GESTIONE CONTABILE**

### **GET /api/movimenti-contabili** - Lista movimenti
```http
GET /api/movimenti-contabili?stabile_id=1&tipo=entrata&dal=2024-01-01&al=2024-12-31&stato=registrato

Response 200:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "codice_movimento": "MOV7K3L9",
            "data_movimento": "2024-03-15",
            "tipo_movimento": "entrata",
            "causale": "Versamento rate condominiali - Marzo 2024",
            "importo": 2450.00,
            "importo_formattato": "€ 2.450,00",
            "stabile": {
                "id": 1,
                "denominazione": "Condominio Villa Verde"
            },
            "fornitore_cliente": {
                "id": 1,
                "nome_completo": "Giovanni Bianchi",
                "codice_anagrafica": "ANAP4UQ2"
            },
            "categoria": {
                "id": 1,
                "denominazione": "Rate condominiali",
                "codice": "RATE"
            },
            "stato": {
                "stato_movimento": "registrato",
                "prima_nota": false,
                "data_conferma": "2024-03-16",
                "utente_conferma": "Mario Rossi"
            },
            "pagamento": {
                "metodo_pagamento": "bonifico",
                "numero_conto": "IT60X0542811101000000123456",
                "numero_documento": "BONIF/2024/0234"
            },
            "allegati_count": 1,
            "created_at": "2024-03-15T10:30:00Z"
        }
    ],
    "summary": {
        "totale_entrate": 45600.00,
        "totale_uscite": 23400.00,
        "saldo": 22200.00
    }
}
```

### **POST /api/movimenti-contabili** - Crea movimento
```http
POST /api/movimenti-contabili

Request:
{
    "stabile_id": 1,
    "data_movimento": "2024-03-15",
    "tipo_movimento": "entrata",
    "causale": "Versamento rate condominiali - Marzo 2024",
    "importo": 2450.00,
    "categoria_id": 1,
    "fornitore_cliente_id": 1,
    "metodo_pagamento": "bonifico",
    "numero_documento": "BONIF/2024/0234",
    "numero_conto": "IT60X0542811101000000123456",
    "prima_nota": true
}

Response 201:
{
    "success": true,
    "data": {
        "id": 1,
        "codice_movimento": "MOV7K3L9",  # Auto-generato
        /* movimento completo */
    },
    "message": "Movimento contabile registrato con successo"
}
```

---

## 📊 **ENDPOINT STATISTICHE E REPORT**

### **GET /api/dashboard/statistiche** - Dashboard generale
```http
GET /api/dashboard/statistiche?amministratore_id=1&anno=2024

Response 200:
{
    "success": true,
    "data": {
        "amministratore": {
            "stabili_totali": 5,
            "unita_totali": 120,
            "proprietari_totali": 85,
            "inquilini_totali": 35
        },
        "contabile": {
            "entrate_anno": 145600.00,
            "uscite_anno": 98400.00,
            "saldo_anno": 47200.00,
            "prima_nota_da_confermare": 12
        },
        "locazioni": {
            "contratti_attivi": 35,
            "contratti_in_scadenza_60gg": 3,
            "canoni_totali_mensili": 28500.00
        },
        "trend_mensili": [
            {
                "mese": "2024-01",
                "entrate": 12400.00,
                "uscite": 8200.00,
                "saldo": 4200.00
            }
            /* altri mesi */
        ]
    }
}
```

### **GET /api/report/primo-nota** - Report prima nota
### **GET /api/report/situazione-patrimoniale** - Situazione patrimoniale
### **GET /api/report/scadenze-contratti** - Contratti in scadenza

---

## 🛡️ **GESTIONE ERRORI**

### **Errori Standard**:
```json
// 400 - Bad Request
{
    "success": false,
    "message": "Dati di input non validi",
    "errors": {
        "codice_fiscale": ["Il codice fiscale non è valido"],
        "email": ["Il campo email è obbligatorio"]
    }
}

// 401 - Unauthorized
{
    "success": false,
    "message": "Token di autenticazione non valido o scaduto"
}

// 403 - Forbidden
{
    "success": false,
    "message": "Non hai i permessi per accedere a questa risorsa"
}

// 404 - Not Found
{
    "success": false,
    "message": "Risorsa non trovata"
}

// 422 - Unprocessable Entity
{
    "success": false,
    "message": "Errore di validazione",
    "errors": {
        "percentuale_proprieta": ["La somma delle percentuali non può superare 100%"]
    }
}

// 500 - Internal Server Error
{
    "success": false,
    "message": "Errore interno del server",
    "debug": "Database connection failed" // Solo in development
}
```

---

## 🎯 **RIFERIMENTI INCROCIATI**

- **DATABASE_SCHEMA.md**: ↗️ Schema tabelle e relazioni per struttura response
- **DATA_ARCHITECTURE.md**: ↗️ Modelli Eloquent e relazioni per payload
- **PROGRESS_LOG.md**: ↗️ Stato implementazione endpoint e test eseguiti
- **UI_COMPONENTS.md**: *(DA CREARE)* ↗️ Binding API con componenti frontend
- **DEVELOPMENT_IDEAS.md**: *(DA CREARE)* ↗️ Endpoint avanzati e ottimizzazioni future

---

*Documento creato: 8 Luglio 2025 - Guida completa API REST NetGesCon*
