gestione FATTURE ELETTRONICHE servono anche da creare le tabelle per la gestione di dati della cassa previdenza io farei una TABELLA PER i campi da gesttire sono sicuramente la Natura giuridica la cassa professionale con la relativa aliquota, il regime fiscale, l'IBAN (questo ci servirà per fre i bonifici o agganciare le scritture fatte in banca) e nel caso sia una società che eroga acqua luce e gas, vorrei importare anche altri dati che verrebbero utilizzati per nel caso dell'acqua segnare i consumi e i numeri delle utenze per poi mandare o fare la ripartizione dell'acqua. e nel caso delle società elettriche e i consumi gestire i consumi e visulizzare i dati in grafici e altro. (molti dati statistici e altro saranno poi presentati all'assemblea con una nota esplicativa e sintetica, ma vorrei comunque prendere più dati possibili dalle fatture ricevute, anche i dettagli delle righe che dovranno essere poi selezionate per dividerle nelle varie spese ( a proposito delle spese potrebbero essere) dobbiamo considerare anche una tabella da collegare alla fattura elettronica per gestire le righe dei dettagli e gli altri dati presenti nella fattura. nella fattura esiste anche il protocollo SDI da gestire i codici tributi crea una tabella apposta non saranno solo questi, (esempio nel caso del pagamento del portiere e la relativa compilazione del modello F24 ce ne sono altri perciò prevediamo da subito una tabella a parte Piano di Implementazione: Modulo Fatturazione Elettronica Fase 1: Arricchire la Tabella fornitori Per prima cosa, potenziamo l'anagrafica dei fornitori con i dati fiscali e bancari che troveremo nell'XML. Questo ci permetterà di "agganciare" correttamente le fatture e pre-impostare le registrazioni. Azione: Modificare la migration dei fornitori per aggiungere i seguenti campi. Nome Campo Proposto Tipo Dati Note / Scopo (e percorso XML di riferimento) regime_fiscale VARCHAR(4) Obbligatorio. Codice regime fiscale (es. RF01, RF19). natura_giuridica VARCHAR(2) Codice natura giuridica (es. PG, PN). (se presente) iban VARCHAR(34) IBAN per pagamenti. tipo_cassa_previdenziale VARCHAR(4) Tipo cassa professionale di default (es. TC22). aliquota_cassa_previdenziale DECIMAL(5,2) Aliquota cassa di default. Fase 2: Creare le Tabelle di Supporto Fondamentali Come hai giustamente indicato, abbiamo bisogno di tabelle "satellite" per gestire i dati codificati. Nuova Tabella: codici_tributo Scopo: Gestire tutti i codici tributo per le ritenute e gli F24 (es. 1040 per lavoro autonomo, tributi per il portiere, etc.). Nome Campo Tipo Dati Note id BIGINT (PK) Chiave primaria. codice VARCHAR(10) Il codice del tributo (es. "1040", "1019"). descrizione VARCHAR(255) Descrizione chiara (es. "Ritenuta su redditi di lavoro autonomo"). attivo BOOLEAN Per abilitare/disabilitare la selezione nei form. Nuova Tabella: aliquote_iva Scopo: Centralizzare la gestione delle aliquote IVA e delle nature di esenzione. Nome Campo Tipo Dati Note id BIGINT (PK) Chiave primaria. percentuale DECIMAL(5,2) Il valore numerico dell'aliquota (es. 22.00, 10.00, 0.00). natura_esenzione VARCHAR(4) Importante. Il codice per operazioni non imponibili (es. N1, N2.2, N4). descrizione VARCHAR(255) Descrizione chiara (es. "IVA Ordinaria 22%", "Esente Art. 10"). attiva BOOLEAN Per abilitare/disabilitare la selezione nei form. Fase 3: Progettare lo Schema per le Fatture Importate (Cuore del Sistema) Questa è la parte più importante. Creiamo una struttura dedicata per non "inquinare" le altre tabelle e per mappare 1:1 il tracciato XML. Nuova Tabella: fatture_importate Scopo: Contiene i dati di testata di ogni fattura ricevuta. Nome Campo Tipo Dati Note id BIGINT (PK) Chiave primaria. fornitore_id BIGINT (FK) Collega al fornitore nel nostro sistema. stabile_id BIGINT (FK) Collega allo stabile a cui si riferisce la fattura. nome_file_originale VARCHAR(255) Il nome del file XML originale. path_file_xml VARCHAR(255) Percorso del file XML salvato nello storage. protocollo_sdi VARCHAR(50) Importante. (o simile). numero_documento VARCHAR(50) data_documento DATE importo_totale_documento DECIMAL(12,2) importo_ritenuta DECIMAL(12,2) (se presente) causale TEXT (se presente) dati_extra_utility JSON Per Acqua/Luce/Gas. Qui salviamo consumi, letture, codici POD/PDR. stato ENUM 'importata', 'da_registrare', 'registrata', 'annullata'. created_at, updated_at TIMESTAMP Timestamps standard. Nuova Tabella: fatture_importate_righe Scopo: Contiene le singole linee di dettaglio della fattura. Fondamentale per la ripartizione delle spese. Nome Campo Tipo Dati Note id BIGINT (PK) Chiave primaria. fattura_id BIGINT (FK) Collega alla testata della fattura. numero_linea INT descrizione TEXT quantita DECIMAL(10,2) prezzo_unitario DECIMAL(12,4) prezzo_totale DECIMAL(12,2) aliquota_iva_id BIGINT (FK) Collega alla nostra tabella aliquote_iva. Nuova Tabella: fatture_importate_riepilogo_iva Scopo: Contiene i dati del blocco di riepilogo IVA. Nome Campo Tipo Dati Note id BIGINT (PK) Chiave primaria. fattura_id BIGINT (FK) Collega alla testata della fattura. aliquota_iva_id BIGINT (FK) Collega alla nostra tabella aliquote_iva. imponibile_importo DECIMAL(12,2) imposta DECIMAL(12,2) Fase 4: Piano d'Azione per il Team Con questa struttura dati, ecco i passi concreti da seguire: Creare le Migration: Scrivere i file di migrazione per: Aggiungere i nuovi campi alla tabella fornitori. Creare le nuove tabelle: aliquote_iva, codici_tributo. Creare le tre tabelle per le fatture: fatture_importate, fatture_importate_righe, fatture_importate_riepilogo_iva. Creare/Aggiornare i Modelli: Aggiornare il modello Fornitore con i nuovi campi. Creare i nuovi modelli per tutte le tabelle appena definite, completi di relazioni (hasMany, belongsTo). Sviluppare il Parser XML: Creare una classe service dedicata (Services/XmlInvoiceParser.php). Questa classe avrà un metodo parse(string $xmlContent) che riceve il contenuto del file XML e restituisce un array PHP strutturato o un DTO (Data Transfer Object) con tutti i dati estratti. Utilizzare la libreria SimpleXML di PHP, che è perfetta per questo scopo. Sviluppare la Maschera di Importazione: Creare un ImportFatturaController. Creare una vista (admin.contabilita.import.create) con un form per l'upload di uno o più file XML. Il metodo store del controller ciclerà sui file caricati, li passerà al XmlInvoiceParser e userà i dati restituiti per popolare le nuove tabelle del database.