36 KiB
Executable File
36 KiB
Executable File
Bug risolti e validazioni
Obiettivo
Questa sezione tiene separato il materiale di fix dal manuale generale. Qui annotiamo:
- bug corretti
- fix applicato
- stato della verifica
- eventuali controlli ancora da fare su staging
Registro sintetico
Import GESCON: fallback storico su id_cond quando il legacy sposta cod_cond
- Problema: in archivi come
0026il vecchio amministratore ha riallineato i nominativi nel legacy spostandocod_condtra una gestione e la successiva, mentreid_conde rimasto stabile. Questo rompeva import di unita, cronologia nominativi, rate e incassi perche il dominio usava ancoracod_condcome chiave forte. - Causa tecnica:
ImportGesconFullPipelinepreferivacod_condper valorizzareunita_immobiliari.legacy_cond_id, ricostruiva la storiacondominfiltrandocod_conde risolveva le unita di rate/incassi dal solocod_condsenza ancora stabile suid_cond. - Fix applicato:
app/Console/Commands/ImportGesconFullPipeline.phpora ancora il dominio suid_cond/legacy_id_cond, usacod_condcome fallback annuale e, per la cronologiacondomin, prova primaid_conde poi il nominativo (nom_cond/proprietario_denominazione) se il codice annuale non basta. La UI diImportazione archivie stata anche orientata sul flussoultima aperta -> ritroso. - Stato: [P] validato su codice, helper privato e smoke test reale
0026/0001:extractStableLegacyCondId()preferisceid_condrispetto acod_conde l'import reale sul tenantstabile_id=32completa correttamente il ciclo. La verifica specifica dello shift cross-year dicod_condresta pendente finche lo staging non espone piu annualita dello stesso stabile.
Import GESCON 0026: rerun non idempotente su rate_emesse e dati_bancari
- Problema: rilanciando
gescon:import-fullsu0026 / anno 0001 / stabile_id=32il numero righe restava stabile ma la somma dirate_emesseraddoppiava (11300.27 -> 22600.54) edati_bancaricresceva a ogni rerun (3 -> 4 -> 5) pur trattandosi dello stesso contoCCB. - Causa tecnica: nel ramo update di
stepRate()gli importi venivano ricalcolati comeexisting + importo, quindi ogni reimport aggiungeva di nuovo lo stesso addebito; instepBanche()il lookup dell'esistente usava$ibane$numerooriginali invece dei valori realmente risolti (resolvedIbane fallbackcod_cassa), mancando il match e inserendo duplicati. - Fix applicato:
app/Console/Commands/ImportGesconFullPipeline.phpora rende idempotente l'update dirate_emesseazzerando il baseline del record al primo touch del run e aggregando solo gli eventuali duplicati della stessa esecuzione;stepBanche()usa i valori risolti per il match e consolida gli esatti duplicati gia presenti sullo stesso conto. - Stato: [U] validato end-to-end su
0026 / anno 0001 / stabile_id=32con tre esecuzioni consecutive del comando. Contatori finali:rate_emesse=81,rate_emesse_sum_addebitato=11300.27,dati_bancari=1,incassi=0.
Staging GESCON operazioni: scope stabile assente e reload non idempotente
- Problema: la tab Filament
admin-filament/gescon/ordinariefiltraoperazioniper stabile solo se nello staging esistecod_stabile. Nel database di sessione la tabellagescon_import.operazioniera stata creata senza quella colonna, quindi il tab Operazioni poteva mischiare scritture di stabili diversi. Al primo tentativo di riallineamento i reload slice-aware fallivano inoltre con duplicate key sulle righe gia presenti. - Causa tecnica:
LoadGesconMdbToStagingvalorizzavacod_stabileelegacy_yearsolo se le colonne esistevano gia, ma non faceva evoluzione schema sulle tabelle storiche create in precedenza. In piu il caricamento dioperazioniusava soloinsert, quindi un reload sullo stessoid_operazcollassava sulla PK legacy invece di aggiornare la riga esistente. - Fix applicato:
app/Console/Commands/LoadGesconMdbToStaging.phpora aggiunge in best-effort le colonne di slice mancanti (cod_stabile,legacy_year) alla tabella di staging selezionata e, peroperazioni, rende il reload idempotente conupdateOrInsertsuid_operaz. - Stato: [U] validato in sessione. Reload riusciti su
0016/0914,0016/0913,0016/0912con staging finale annotato0016|0914|61,0016|0913|168,0016|0912|250. Per0026/0001operazioniresta0, coerente con il contenuto del file annuale in questa sessione.
Ordinarie legacy e import banca Fucino su 0016
- Problema:
admin-filament/gescon/ordinarieandava inUndefined variable $querynel mapping delle righe Operazioni. In parallelo la sezione legacyincassisu0016continuava a vedere righe duplicate perche convivevano slice annuali corrette (legacy_year=0912/0913/0914) e righe storiche orfane conlegacy_year=null. Sul lato banca, i file reali Banca del Fucino arrivavano in.xlse la UI esponeva ancora il formato come soloXLSX. - Causa tecnica: in
Ordinarie.phpera rimasta una chiamata a$query->where(...)dentro unamap()dove il builder non esiste. Perincassimancava una regola di preferenza per gli slice annuali annotati, quindi i record orfani di staging continuavano a inquinare UI e import dominio. La UI movimenti banca accettava di fatto Excel legacy via parser, ma non lo dichiarava esplicitamente nei form. - Fix applicato: rimosso il riferimento fuori scope in
app/Filament/Pages/Gescon/Ordinarie.php;applyIncassiFilters()eImportGesconFullPipeline::stepIncassi()ora ignorano le righelegacy_year=nullquando per lo stesso stabile esistono gia slice annotate. Nello staginggescon_import.incassie stato anche eseguito un cleanup mirato che ha eliminato1753righe orfane nulle duplicate di slice gia ricaricate. La UI banca inCasseBancheMovimentieDatiBancariDettagliodichiara ora anche.xlse il formatoExcel XLS/XLSX. - Stato: [U] validato in sessione.
getOperazioniProperty()torna a costruire unLengthAwarePaginator;operazioniduplicate esatte su0016/0026=0;incassiduplicate esatte su0016/0026=0dopo il cleanup dei null orphan. Importati su0016 / stabile_id=17 / conto_id=14 / legacy_cod_cassa=CCB1935movimenti banca da file Fucino, con range2022-02-03 -> 2026-06-03;891righe sono state scartate come duplicati attesi fra estratti sovrapposti.
Consultazione legacy-aligned: gestioni visibili vs gestioni conteggiabili
- Problema: sia l'estratto conto soggetto sia la scheda unità filtravano i dati con la logica del solo
anno attivo, mentre per il controllo legacy serve una distinzione piu precisa: anni correnti da conteggiare, ultima gestione chiusa ancora visibile per confronto, storico piu vecchio nascosto salvo filtro. - Causa tecnica: la UI usava
AnnoGestioneContextcome unico discriminante temporale;gestioni_contabilinon veniva usata per decidere se un esercizio fosse solo consultabile oppure ancora conteggiabile nel dovuto corrente. - Fix applicato: e stato introdotto
app/Support/GestioneVisibility.php. Regola attuale: anni visibili = tutte le gestioni aperte/attive + l'ultima gestione chiusa; anni conteggiabili = solo gestioni aperte/attive.EstrattoContoSoggetto,UnitaImmobiliarePageeGestioniArchiviousano ora questa policy per nascondere lo storico piu vecchio e togliere dal dovuto gli esercizi chiusi mantenuti solo per controllo. - Stato: [U] validato in sessione. Per
stabile_id=17(0016) la policy finale evisible_years=[2025,2024,2023],countable_years=[2025,2024],closed_visible_years=[2023]. Verifica tecnica su scheda unità:unita_id=660scende a24rate e12incassi visibili,unita_id=662a48rate e62incassi visibili, con range anni2023 -> 2025.
Super Admin ACL: HUB rapido a matrice per programmi
- Problema: la gestione ACL programmi era disponibile solo nella scheda dettaglio allow/deny, poco adatta a variazioni rapide per gruppi principali.
- Causa tecnica: mancava una vista a matrice ruolo-programma che permettesse di abilitare o disabilitare velocemente la visibilita per ruolo.
- Fix applicato:
app/Filament/Pages/SuperAdmin/ProgrammiAcl.phperesources/views/filament/pages/super-admin/programmi-acl.blade.phpora espongono un HUB con matrice programmi x ruoli, checkbox rapidi e reset al default catalogo; la scheda esistente e stata mantenuta come tab separata. E stata aggiunta anche una seconda tab che mostra il baseline attuale R/W per gruppi/menu, in attesa di un backend dedicato agli override granulari. - Stato: [U] validato localmente: nessun errore editor sulla page Filament e sulla blade.
Palazzine stabile: mappa visiva per scala, piano e adiacenze
- Problema: la vista
admin-filament/condomini/stabile?tab=palazzineera disallineata e poco utile per gestire incidenti tecnici come perdite d acqua, dove serve capire subito chi sta accanto, sopra e sotto una unità. - Causa tecnica: la pagina mostrava solo card riassuntive per palazzina, senza ordinamento operativo delle unita e senza una lettura per scala/piano/interno.
- Fix applicato:
app/Http/Controllers/Admin/PalazzineController.phpora ordina le unita per scala, piano e interno;resources/views/admin/palazzine/index.blade.phpespone una mappa per scala e per piano con card unita che mostrano adiacenze orizzontali e riferimenti verticali (accanto,sopra,sotto). - Stato: [U] validato localmente: nessun errore editor su controller e blade.
Unita immobiliare 0016: estratto vuoto con incassi presenti e relazioni correnti discordanti
- Problema: sulle unità
0016-B-4(unita_id=660,legacy_cond_id=49) e0016-B-5(unita_id=662,legacy_cond_id=50) la scheda unità mostravaPersone collegateincoerenti e l estrattorate & incassivuoto, pur avendo incassi importati per i codici legacy49/50. - Causa tecnica: per
0016non esistono righe inrate_emesse(0sustabile_id=17), mentre sono presenti3789righe nella tabella legacygescon_import.rate; la pagina unità leggeva solorate_emessee costruiva gli incassi partendo dalle note delle rate emesse. In piu, quandoproprietaerubrica_ruoli/persone_unita_relazioninon concordavano, la sezione persone privilegiava i diritti proprietari storici. - Fix applicato:
app/Filament/Pages/UnitaImmobiliarePage.phpora usa un fallback legacy sugescon_import.rateeincassiquando una unità non harate_emesse; perPersone collegatepreferisce la storia legata alla unità (unita_immobiliare_nominativi) e integra icomproprietarilegacy correnti della stessalegacy_cond_idquando la materializzazione storica manca o è incompleta. La testata della scheda non mostra piu come etichetta un nominativo storico scaduto, ma ripiega sul codice unità. - Stato: [U] validato via hydration diretta pagina.
unita_id=660torna con48righe estratto e38incassi e come proprietario correnteLe Foche Ermanno-Bianchin M.;unita_id=662torna con96righe estratto e78incassi e mostraBarone Michelepiu i comproprietari legacy correntiNardi Camillo e FlaviaeNardi Flavia.
Unita immobiliare 0016: payload legacy completo, CF corretti, selettore corrente e bonifica incassi
- Problema: dopo l allineamento di
0016, la ricerca nominativi apriva la unità giusta ma il selettore restava su etichette storiche (MASTRANGELI...), i CF in pagina continuavano a derivare da rubrica stantia, i blocchicond_* / catasto_* / pertinenze_* / diritti_* / inquilin_*non arrivavano fino alla UI e l estratto compatto mostrava ancora righe duplicate o a zero. - Causa tecnica:
unita_immobiliare_nominativi.legacy_payloadsalvava solo un sottoinsieme dei campi legacy;gescon:materialize-persone-relazioniprivilegiava CF/contatti gia presenti in rubrica;gescon:sync-rubrica-ruolinon correggeva i record esistenti;refreshUnitaOptions()leggevaproprieta; nella contabilitàincassisustabile_id=17erano rimaste936righe duplicate extra e207righe a importo zero. - Fix applicato:
ImportGesconFullPipelineora salva nei payload i prefissicond_*,catasto_*,pertinenze_*,diritti_*,inquilin_*e usacondomin.inquilin_contratto_dal/inquilin_cod_fisc;GesconMaterializePersoneRelazioniCommandusalegacy_payloadcome sorgente autorevole per CF/contatti e puo correggere CF/P.IVA stantii se univoci;GesconSyncRubricaRuoliaggiorna la rubrica daPersona;UnitaImmobiliarePageusa il nominativo attivo diunita_immobiliare_nominativinel selettore e mostra in cronologia anche CF, contratto e catasto;resources/views/filament/pages/unita-immobiliare.blade.phpcompatta l estratto in una riga principale per rata/conguaglio condovuto,pagatoe data pagamento. Sul DBincassidi0016e stata eseguita una bonifica stretta che ha eliminato tutti i duplicati esatti e tutte le righe a zero senza associazioni utili. - Stato: [U] validato localmente sul DB.
incassipercondominio_id=17:duplicate_extra_rows = 0,zero_total = 0,remaining_total = 2102. La UI e pronta a usare i payload completi non appena termina il rebuild--solo=unita -> --solo=relazioni -> gescon:sync-rubrica-ruoliin corso sulla sessione.
Unita immobiliare 0016: estratto compatto cross-year da rate_emissioni_dettaglio con split C/I
- Problema: l estratto compatto della scheda unità continuava a leggere solo
gescon_import.rateo lerate_emessedominio, perdendo la distinzioneC/I, il periodo reale di gestione (2024/25,2025/26) e i riferimenti avviso richiesti dal legacy; in piulegacy_cond_idsu alcune unità (B-4) era ormai storico e non bastava piu per recuperare tutte le righe corrette della stessa unità. - Causa tecnica:
UnitaImmobiliarePagerisolveva icod_condcorrenti dagescon_import.condomin, ma quando questi esistevano smetteva di considerare illegacy_cond_idsalvato sull unità; su0016-B-4questo faceva perdere proprio il ramo autoritativocod_cond=47dirate_emissioni_dettaglio. La Blade inoltre mostrava il riferimento proprietario dal set relazioni/comproprietari invece che dal recordcondomincorrente. - Fix applicato: la pagina mantiene tutti i candidati
cod_condma, per l estratto compatto darate_emissioni_dettaglio, preferisce illegacy_cond_idsalvato quando esistono righe reali sulla stessa unità/stabile; su0016-B-4questo ancora il rendering acod_cond=47. La scheda unità continua a usarerate_emissioni_dettagliocome sorgente prioritaria, separa i movimentiC/Iin Blade, raggruppa peranno_gestionee per il campoCondomino di riferimentoesponecondomin.nom_condinvece del primo non-comproprietario trovato nelle relazioni. - Stato: [U] validato via reflection sulla pagina per
unita_id=658. Congestione=2024/25il campione autoritativo restituito ora e52 -> 177,00,196 -> 177,00,268 -> 177,00,626 -> 177,00,697 -> 177,00,697 -> Conguaglio es.precedente -0,61,766 -> 177,00, tuttitipo=C;getLegacyCondominoRiferimentoNome()restituisceBarone Michele.
Import rate 0016: popolamento gestioni_annuali da generale_stabile.mdb
- Problema: per
0016la staginggescon_import.gestioni_annualiera vuota, quindi la UI non aveva una fonte stabile per i periodiordinaria_dal/ordinaria_ale il reloadraterestava calendar-year biased. - Causa tecnica: il pipeline
gescon:import-full --solo=ratenon popolavagestioni_annualidalgenerale_stabile.mdbprima di materializzare piani/rate dominio. - Fix applicato:
ImportGesconFullPipelineora sincronizzagestioni_annualidalla tabellaannidigenerale_stabile.mdball avvio dello steprate, salvando almenocartella,anno_ordinario,ordinaria_dal,ordinaria_al,riscaldamento_dal,riscaldamento_ale payload raw. Nelle note dellerate_emessevengono inoltre persistitianno_gestione,numero_ricevuta,legacy_year,cond_inqeavviso_code. - Stato: [P] validato sul DB con
gestioni_annuali_0016 = 6erate_emesse_0016 = 2517dopophp artisan gescon:import-full --stabile=0016 --solo=rate. La UI compatta usa gia la sorgente staging corretta; il dominio storico importato prima del fix avviso mantiene ancora alcuniavviso_codeprecedenti finche non si esegue un reload pulito dedicato delle solerate_emesseesistenti.
Gestioni contabili 0016: tab stabile allineato ai periodi cross-year reali
- Problema: il tab
gestionidello stabile continuava a mostrare esercizi dominio con periodi01/01-31/12, anche quandogenerale_stabile.mdb -> annidefiniva esercizi reali2024/25,2025/26con dateordinarie_dal/al. - Causa tecnica:
ImportGestioniFromLegacye la sync automatica del tab stabile creavano o selezionavanogestioni_contabiliusando soloanno_gestionenumerico, senza preferire la riga legacy canonica e senza applicare i periodi digestioni_annuali. - Fix applicato:
ImportGestioniFromLegacy,ImportGesconFullPipelineeGestioniStabileTableora derivano label e date dagestioni_annuali/anni, preferiscono la riga canonica con label cross-year (Ordinaria 2024/25) e nel tab stabile filtrano la sola gestione canonica pertenant + stabile + anno + tipo. - Stato: [U] validato su
0016conphp artisan gescon:import-gestioni --stabile=0016; selezione canonica verificata via query applicativa:2024 | ordinaria | Ordinaria 2024/25 | 2024-10-01 | 2025-09-30,2025 | ordinaria | Ordinaria 2025/26 | 2025-10-01 | 2026-09-30.
Estratto conto soggetto: esposizione vecchia numerazione legacy
- Problema: nelle
rate_emesserielaborate o lavorate manualmente l estratto conto soggetto mostrava il progressivo dominio ma non il riferimento legacy completo richiesto dall operatività (Gestione 2024/25 · ricevuta n.138). - Causa tecnica:
EstrattoContoSoggettoleggeva dalle note solon_emissione, ignorando metadati gia presenti comeanno_gestione,numero_ricevutaeavviso_code. - Fix applicato: la pagina ora estrae dai metadati note
anno_gestione,numero_ricevutaeavviso_codee rende sotto la descrizione un riferimento esplicito tipoGestione 2024/25 · ricevuta n.138, con fallback suavviso legacyse la ricevuta manca. - Stato: [U] validato via reflection sull helper
buildLegacyReferenceLabel()con outputGestione 2024/25 · ricevuta n.138.
Estratto conto soggetto 0016-B-4: nominativo in testata preso dal soggetto storico e non dalla unità corrente
- Problema: l URL
admin-filament/contabilita/estratto-conto/7680?vista=unita&unita_id=658mostrava in testataLeardini Alessandraanche se l unità0016-B-4ha come riferimento correnteBarone Michele. - Causa tecnica:
EstrattoContoSoggettousava sempre ilrecordroute (soggetti.id=7680) per nome e CF header. PerB-4quel record e storico:unita_immobiliari.id=658ha ancoralegacy_cond_id=47, che coincide consoggetti.old_id=47(Leardini Alessandra). Le relazioni correnti dell unità sono inveceMichele Baroneproprietario eClaudia Francionicomproprietaria. - Fix applicato: in
vista=unitala pagina non si limita piu all header ma, se l unità ha un dataset legacy autoritativo inrate_emissioni_dettaglio, costruisce direttamente righe, gruppi, riferimento proprietario e collegamenti soggetto da quel ramo. La testata espone quindiBarone Michele, CFBRNMHL69M11H501K,recordCondominoId=7682, mentre le righe2024/25usanonumero_ricevutacome riferimento primario (52,196,268,626,697,766) e conservano l avviso comeavviso_legacy(202410,202412, ...). - Stato: [U] validato via hydration diretta del ramo legacy su
unita_id=658:header = Barone Michele / BRNMHL69M11H501K,Gestione 2024/25 · ricevuta n.52,dovuto = 177,00,recordCondominoId = 7682,incassi_count = 56.
Scheda unità 0016-B-4: Condomino di riferimento da condomin
- Problema: nella scheda unità il blocco riepilogo poteva mostrare un nominativo derivato dal primo proprietario attivo non
comproprietario, mentre per0016-B-4il riferimento richiesto doveva essere il dato corrente digescon_import.condomin. - Causa tecnica: la Blade costruiva
Condomino di riferimentosolo darelazioniPerTipo['proprietari'], che e un insieme misto di diritti, relazioni attive, archivio unità e comproprietari legacy. - Fix applicato:
UnitaImmobiliarePageespone oragetLegacyCondominoRiferimentoNome()egetLegacyCondominoRiferimentoCodiceFiscale(). La Blade usa quindicondomin.nom_condecondomin.cond_cod_fiscprima delle relazioni, mentre il picker unità corrente forza la stessa anagrafica legacy autorevole. - Stato: [U] validato su
unita_id=658con outputBarone Michele, CFBRNMHL69M11H501K, picker0016-B-4 — Barone Michele.
Estratto 0016-B-4: i numeri 2024/25 correnti non coincidono col campione legacy operativo
- Problema: il campione operativo fornito dall utente per
GESTIONE ORDINARIA - Es.2024/25 - (Sc. B / Int. 4)usa importi/ricevute come52 -> 177,00,196 -> 177,00,268 -> 177,00, pagamenti valorizzati (16 gen 25,23 dic 25) e conguaglio finale-3,51. L estratto dominio corrente non riflette questi valori. - Evidenza tecnica: per
rate_emessedominio suunita_immobiliare_id=658nel periodo2024-10-01 -> 2025-09-30risultano ancora righe spezzate come55 -> 5,00,56 -> 157,00,199 -> 5,00,200 -> 157,00,629 -> 5,00,630 -> 157,00, conimporto_pagato = 0,00sul soggetto storico7680. La staging autoritativarate_emissioni_dettaglio, se interrogata sul ramo correttocod_cond=47,raggruppamento=99,anno_emissione=0913, coincide invece col campione operativo lato righe emesse:52,196,268,626,697,766a177,00e697 -> Conguaglio es.precedente -0,61. - Stato: [P] controllato e ristretto: il mismatch residuo e sul dominio
rate_emessee sulle viste che leggono ancora quel ramo, mentre la scheda unità legacy di0016-B-4ora usa il dataset staging autoritativo corretto.
Incassi 0016-B-4: bonifico legacy 1.285,70 non ancora importato nel ramo applicativo
- Problema: il bonifico legacy descritto dall operatività (
protocollo=1663,num_incasso=350,data_pag=14/01/25,id_condomino=47,sc_int=B/4,nome_condomino=Barone Michele,importo=1.285,70) deve diventare il punto di aggancio per la riconciliazione con il movimento banca Fucino del16/01/2025, ma oggi non e ancora disponibile nella UI applicativa. - Evidenza tecnica: nella staging attuale non esiste ancora la tabella
gescon_import.in_da_ec, quindi il protocollo legacy non e interrogabile in app; inoltre nella tabella applicativaincassi(condominio_id=17) non risultano ancora righe conimporto_pagato_euro/importo_pagato = 1285,70. - Stato: [P] controllato in sessione. Il ramo
incassivisibile oggi per0016-B-4e parziale (56righe sull estratto legacy unità) ma non contiene ancora il pagamento cardine1.285,70; il prossimo passo tecnico obbligato e importare/materializzarein_da_eco un suo equivalente staging prima della riconciliazione banca.
HUB incassi 0016: staging in_da_ec, snapshot read-only e API interna per mini AI
- Problema: l HUB
admin-filament/contabilita/incassimostrava solo il ramo dominioincassi, quindi non c era un punto unico per vedere i movimenti legacy da estratto conto e passare un payload in sola lettura alla macchina interna.202/ mini AI. - Causa tecnica: mancavano sia la tabella di staging
gescon_import.in_da_ecsia una materializzazione read-only nel dominio; inoltre la page Filament non esponeva ancora un payload aggregato o un endpoint autenticato dedicato. - Fix applicato:
LoadGesconMdbToStagingora supportain_da_eccon alias MDB (Inc_da_ec) e crea la tabella di staging se assente;ImportGesconFullPipelineprecaricain_da_ecdagenerale_stabile.mdbe materializza le righe inincassi_estratto_contocon hash idempotente,gestione_id,pattern_scala/internoemetadati_gescon.IncassiArchivioespone una nuova sezione HUB read-only con payload JSON cumulativo e candidatiincassi/movimenti_bancari, mentreGET api/v1/incassi/hubfornisce lo stesso snapshot viaauth:sanctum. - Stato: [U] validato localmente a livello runtime e sintassi.
php artisan route:list --path=api/v1/incassi/hubregistra la rotta;IncassiHubReadService::forStabile(17, 2)risponde correttamente consource = gescon_import.in_da_ecerecords_count = 0finche lo staging non viene popolato dal MDB reale.
Mini AI .202: chiamata read-only su incassi reali da singolo_anno.mdb
- Problema: per iniziare a lavorare su dati reali serve chiamare la macchina
.202senza ancora automatizzare la riconciliazione, usando come primo dataset gli incassi gia importati dasingolo_anno.mdb.incassie i movimenti Fucino incontabilita_movimenti_banca. - Causa tecnica: il primo payload HUB ripiegava solo su
in_da_ec, oggi non popolata; inoltre il matching candidati guardava la vecchia tabellamovimenti_bancariinvece della tabella operativa usata dall import Fucino. Il primo click sul pulsante poteva inoltre fallire conQueryExceptionper payload troppo grande salvato inai_requests.request_text(TEXT, circa 64 KB). - Fix applicato: aggiunto
MiniAiReconciliationClient, comandophp artisan netgescon:mini-ai-incassi, configurazioneservices.mini_aie pulsanteInvia a mini AInell HUB incassi.IncassiHubReadServiceora usa come fallbacknetgescon.incassie cerca candidati incontabilita_movimenti_banca; ogni chiamata salva richiesta e risposta inai_requestscon contestoincassi-hub-mini-ai. La migration2026_06_07_130000_expand_ai_requests_text_columns.phpportarequest_texteresponse_textaLONGTEXT. - Stato: [U] validato localmente con dry-run su
0016: payloadtask=reconcile_incassi_movimenti_bancari,source=netgescon.incassi,records_count=2, incasso realeinc:11172e candidati movimento dacontabilita_movimenti_banca. Il percorso backend del pulsante salva ora una richiesta da290163caratteri inai_requestssenza QueryException. Collaudo reale verso.202riuscito conai_request_id=2,status=answered, risposta JSON valida e due suggerimentireviewsalvati.
Mini AI .202: riconoscimento alias presso/email e caso Caschetto B-18
- Problema: il bonifico di
1.968,23del30/04/2026arriva in banca comeCURATOLA ANTONIO, senza scala/interno nella causale principale e senza nominativoCaschetto Lucia; il legame reale e solo nel legacy (presso = c/o Avv. Curatola, emailcuratola.antonio@...) della unità0016-B-18. - Causa tecnica: il resolver del payload mini AI cercava solo nominativo diretto o scala/interno; non normalizzava alias distribuiti su
pressoed email, quindi non riusciva ad attribuire il movimento aCaschetto Lucia. - Fix applicato:
IncassiHubReadServiceora estrae il nominativo banca daA VOSTRO FAVORE ... Data Regolamentoe risolve il legacy cercando token normalizzati sunom_cond,proprietario_denominazione,presso,e_mail_condomino, senza cambiare il nominativo principale dell'unità. Aggiunto anchegescon:qa-rubrica-vuotie pulsanteAggiorna vuoti da legacynella scheda rubrica, che compila solo dati mancanti se il match legacy e sicuro. - Stato: [U] validato su movimento banca
15803: dry-run producelegacy_key=mov:15803,nominativo=Caschetto Lucia,scala=B,interno=18,candidate_rates=12, somma1.968,23. Collaudo.202riuscito conai_request_id=5,confidence=0.98,allocations[]valorizzato con le 12 rate candidate.
QA smoke unità: perimetro esplicito obbligatorio
- Problema:
scripts/smoke_unita.phppoteva scegliere automaticamente il primo stabile disponibile su filesystem o staging, producendo verifiche riuscite sul perimetro sbagliato in ambienti multi-stabile/multi-admin. - Causa tecnica: in assenza di argomenti lo script faceva auto-discovery del
legacy_codedal primo archivio trovato o dal primocod_stabilepresente in staging. - Fix applicato: lo script ora richiede esplicitamente
legacy_codee fallisce con usage chiaro se non viene passato; la verifica continua a funzionare se il codice stabile e l anno sono espliciti. - Stato: [U] validato localmente: senza argomenti restituisce usage; con
php scripts/smoke_unita.php 0016 2021 1esegue lo smoke sul solo stabile0016.
Unita immobiliare / estratto soggetto 0026: conguaglio iniziale duplicato rispetto a rate emesse
- Problema: nella scheda unità e nell estratto soggetto di
D'EVOLI Luisa(unita_id=1012, tenant pulitostabile_id=32) il conguaglio126,06compariva due volte: una comeBilancio iniziale / esercizi precedentidaCONG.Oe una comerate_emesse(Conguaglio es.precedente2025), portando il totale a700,12invece di574,06. - Causa tecnica: le pagine sommano i
CONG.*didettaglio_importi_tabellasenza escludere i casi gia materializzati inrate_emesseper la stessa unità, ruolo legacy eanno_emissione. - Fix applicato: in
app/Filament/Pages/UnitaImmobiliarePage.phpeapp/Filament/Pages/Contabilita/EstrattoContoSoggetto.phpi conguagli iniziali vengono soppressi quando esiste gia unarata emessadi conguaglio con stessa unità, ruoloC/I,anno_emissionelegacy e importo. - Stato: [U] validato via hydration diretta pagina/estratto;
unita_id=1012torna a574,06, il gruppoBilancio inizialesparisce e restano solo le tre rate emesse224,00 + 224,00 + 126,06.
Unita immobiliare 0026-A-2A: inquilino mischiato ai proprietari e ruolo rate errato
- Problema: nella scheda unità dei fratelli Zazzara (
unita_id=1023)Pagliarini Andreafiniva nella stessa colonna dei proprietari e veniva letto come ruolo rateC, anche se nel dominio e nell import legacy e l inquilino della unità. - Causa tecnica: la pagina nuova considerava qualunque record in
proprietacome proprietario, includendo anchetipo_diritto = locazione; inoltre la sezionePersone collegatedipendeva quasi solo darubrica_ruoli, che in questo caso non copriva l inquilino pur avendo il dato corretto inpersone_unita_relazioni. - Fix applicato:
UnitaImmobiliarePageora limita il bucket proprietari ai soli diritti reali (proprieta,comproprieta,usufrutto, ecc.), escludelocazionedall owner lookup delle rate e usapersone_unita_relazionicome fallback per popolareinquilinimantenendoruolo_ratepersistito (I). - Stato: [U] validato via hydration diretta pagina;
Fratelli Zazzararesta unico proprietario/condomino con saldo-1780,92,Pagliarini Andreacompare ininquiliniconruolo_rate = Ie le rate risultano separate (507,75lato inquilino).
Supporto > Modifiche in memory exhaustion su log grandi
- Problema: la pagina
admin-filament/supporto/aggiornamento-nodopoteva andare inAllowed memory size exhaustedduranteloadRuntimeErrors()quandostorage/logs/laravel.logdiventava molto grande. Sul nodo staging il caso reale era unlaravel.logda circa278 MB. - Causa tecnica:
appendFromNdjson()eappendFromLaravelLog()usavanofile(...), quindi caricavano l intero file in RAM anche se poi la UI mostrava solo gli ultimi eventi utili. - Fix applicato: in
app/Filament/Pages/Supporto/Modifiche.phpi lettori sono stati sostituiti con una lettura tail limitata per linee e byte (readTailLines()), mantenendo il comportamento della UI ma senza allocare l intero log. - Stato: [U] riprodotto e corretto sul nodo locale
/var/www/netgescon; validazione eseguita via reflection suloadRuntimeErrors()conlaravel.loggrande, picco memoria rimasto intorno a89 MBe39righe BUG caricate correttamente. - Prevenzione: non usare aumento del
memory_limitcome rimedio principale; mantenere logrotate attivo e preferire sempre parsing incrementale o tail bounded per i file operativi letti dalla UI.
Supporto > Modifiche con ProgramAclService assente su nodo staging
- Problema: la pagina
admin-filament/supporto/aggiornamento-nodopoteva andare inBindingResolutionExceptionconTarget class [App\Services\ProgramAclService] does not existdurantecanAccess(). - Causa tecnica: sul nodo staging il checkout deployato non conteneva
app/Services/ProgramAclService.php; la pagina supporto dipendeva in modo rigido da quel service anche per un semplice controllo accessi. - Fix applicato:
Modifiche::canAccess()usaProgramAclServicesolo se la classe esiste e si risolve correttamente; se manca, fa fallback ai ruoli amministrativi (super-admin,admin,amministratore) e non blocca la pagina tecnica. - Stato: [U] validato su
/var/www/netgesconcon service realmente assente;App\Filament\Pages\Supporto\Modifiche::canAccess()non genera piu eccezioni e ritorna correttamentetrueper un utente amministrativo. - Prevenzione: nelle pagine di supporto e deploy evitare dipendenze rigide da moduli opzionali o non ancora allineati sul nodo; il pannello di recupero deve sempre avere un percorso di fallback minimale.
Refresh nodo bloccato da permessi deploy su resources/views/errors
- Problema: il launcher aggiornamento nodo restava a
behind 1, la503compariva solo per un attimo e la UI del launcher restava visibile con polling e pulsanti, costringendo a refresh manuali. - Causa tecnica:
netgescon:git-syncfalliva nel passaggiorsyncverso/var/www/netgesconconPermission deniedsuresources/views/errors/.503.blade.php; il repository sorgente arrivava al commit remoto ma il checkout applicativo non riceveva i file nuovi. - Fix applicato: permessi riallineati su
/var/www/netgescon/resources/views/errorse503.blade.phpal gruppowww-data; il launcher ora forza anche una navigazione piena alla stessa URL quando parte il refresh con maintenance, cosi il browser mostra la503completa invece di restare nella UI Livewire. - Stato: [U] validato su staging locale;
git-sync-last.jsontornacompleted, commit deploy e remoto risultano allineati (cadb9a5nel caso reale) e il nodo torna aahead 0 / behind 0. - Prevenzione: le directory che devono ricevere file nuovi via deploy web devono restare group-writable per il gruppo del processo PHP/web (
www-dataqui); quando una directory viene creata manualmente sul nodo, impostare subito gruppo coerente e bit setgid.
Ripristino bootstrap pannello admin
- Problema:
AdminFilamentPanelProvider.phpera stato corrotto da una modifica incompleta e impediva il bootstrap corretto. - Fix applicato: ripristino struttura PHP e riallineamento del provider.
- Stato: [U] risolto localmente, bootstrap Laravel nuovamente valido.
Token CTI Panasonic e lettura configurazione piu robusta
- Problema: il flusso staging poteva fallire per risoluzione non coerente del token CTI.
- Fix applicato:
PanasonicCstaControllerriallineato aconfig/cti.phpcon risoluzione piu robusta. - Stato: [P] implementato e verificato in locale; su staging resta da completare la validazione end-to-end del canale reale.
Mismatch stabile/anno in Ordinarie
- Problema: la pagina
gescon/ordinariepoteva mostrare dati non coerenti con stabile e anno scelti nella topbar. - Fix applicato: default anno dal contesto condiviso e centralizzazione risoluzione codice legacy stabile.
- Stato: [P] implementato e validato a livello codice; da verificare sul caso reale staging con dati utente specifici.
Filtri acqua e servizi non coerenti con la gestione attiva
- Problema: in
condomini/servizi-utenzee archivio letture la selezione anno/stabile non era sempre rispettata in tutte le query. - Fix applicato: applicazione del filtro anno attivo e del contesto stabile ai blocchi acqua principali.
- Stato: [P] implementato e testato sintatticamente; serve verifica funzionale con dati annuali reali su staging.
Tracciato tecnico SMDR e CSTA mescolato
- Problema: una sola vista tecnica rendeva meno chiaro distinguere fallback SMDR da eventi CTI/CSTA ricchi.
- Fix applicato: nuovi tab distinti in
strumenti/post-it-gestionee vista click-to-call dedicata. - Stato: [U] implementato; da usare come base per test operativi PBX e future integrazioni provider-agnostic.
Validazioni eseguite nell ultimo ciclo
php artisan listeseguito con esito positivo dopo gli ultimi fix applicativi- controlli sintattici PHP sulle classi modificate senza errori
- diagnostica editor senza errori sui file toccati
Supporto > Modifiche: validato il nuovo parsing tail-bounded dei log su nodo conlaravel.logda278 MB, senza esaurimento memoria
Validazioni ancora aperte
- verificare su staging la nuova tab
CTI / CSTA e Click-to-Call - verificare il caso reale di mismatch stabile/anno con dati staging
- usare il filtro annuale acqua per l estrazione effettiva delle fatture e confermare il perimetro dati
Regola di aggiornamento
Ogni bug corretto va aggiornato qui in quattro righe:
- problema osservato
- fix applicato
- stato verifica locale
- stato verifica staging o nodi remoti