🚗
Le avventure di Gianluigi
caricamento...
🏢 BackOffice
5:00
📅 Riepilogo giornata
caricamento...
💬 Messaggi —
← seleziona una prenotazione
🔧 Manutenzioni
——
caricamento...
Report manutenzione
🌙 Menate notturne
Messaggi ospiti 19:00–07:00i dati verranno caricati automaticamente
🔕 No-show
Prenotazioni confermate senza check-ini dati verranno caricati automaticamente
🛂 Check-in Auto
Verifica documenti AI + pipeline auto check-in📋 PrimoPlanner
caricamento...
🆘 Segnalazioni
🕒 Timbrature
🚐 Gestione flotta
📇 Rubriche
🏢 Appartamenti
Schede tecniche importate da SharePoint · collegamento ai nomi KB🔍 Duplicati
Stesso ospite · date sovrapposte · appartamenti diversii dati verranno caricati automaticamente
⭐ Controllo Qualità
Recensioni e criticitài dati verranno caricati automaticamente
💬 Chat
Messaggi ospiti IN + CONF-oggi · polling 30s · suggerimento AI on-demandcaricamento…
🧹 Pulizie
Giri pulizie — pool operatrici e generazione automaticai dati verranno caricati automaticamente
📊 Metriche
Pricing e performance per appartamento📦 LHost
Oggetti dimenticati · tracciamento casii dati verranno caricati automaticamente
🛒 Logistica
Prodotti · Magazzino setcaricamento...
🧾 Fatture richieste
Richieste fattura · per data di check-outcaricamento...
← seleziona un giorno
💶 Pagamenti proprietari
Rubrica IBAN + generazione CSV Revolut da distinte KB🔗 Schede
Gestione link brandati · link.primopiano.milano.it🤖 Risponditore IA
Simulatore · nessun invio, solo test · sessioni salvate in PB🌡 Termostati
Dashboard temperature Tuyai dati verranno caricati automaticamente
⚙️ Impostazioni
Configurazione e monitoraggioAccesso KB web admin
Cookie sessione KB
Serve alle sync di scraping: recensioni, blocchi proprietario e foto dei ticket. Quando scade queste si fermano. Per rinfrescarlo: login su primopiano.krossbooking.com/admin → F12 → tab Network → clicca una richiesta /admin/... → Request Headers → copia tutto il valore di Cookie: → incollalo qui sotto.
Appartamenti cessati
Legge da KB la colonna “Attiva fino al” di ogni camera. Un appartamento con data nel passato è cessato; dopo 30 giorni dalla data sparisce dagli elenchi di PA (i dati restano in PocketBase).
stato: —
Eventi & notifiche
Destinatari
caricamento...
Eventi
caricamento...
Utenti autorizzati
Utenti M365 (@primopiano.milano.it) entrano automaticamente. La whitelist serve solo per gli accessi Google.
caricamento...
Prompt AI
Prompt inviati a Claude (Haiku/Sonnet/Opus). Clicca su una riga per espandere, modifica modello/parametri/testo, prova il risultato con il bottone "esegui test", salva.
caricamento...
Analisi casi reali — risponditore AI
Confronta il prompt
responder_simulate col comportamento reale dello staff sui messaggi ospiti Booking di una data specifica. Filtra solo i thread dove lo staff ha effettivamente risposto. Le risposte taggate ai_edited erano partite come bozze AI e poi modificate (più informative). Le bozze AI inviate as-is (similarity ≥ 0.9) vengono incluse come esempi confermati. Strumento di sola analisi: non applica modifiche. Le analisi vengono salvate per data e visualizzabili nel calendario.
Email di rifiuto check-in automatico
Email inviate all'ospite quando uno dei 4 gate della pipeline di check-in automatico fallisce. Editabili per lingua. {FOOTER} e {DISCLAIMER} sono interpolati automaticamente, gli altri placeholder vengono riempiti dalla pipeline.
caricamento...
Changelog
v14 — 17/04/2026
LHost casi: tracciamento end-to-end oggetti dimenticati con macchina a stati (aperto → logistica → ufficio → conferma → pronto → lhost → spedito → consegnato)
LHost casi: timeline append-only per ogni transizione (chi, quando, nota, foto)
LHost casi: modale creazione caso con lookup automatico da prenotazioni PB
LHost casi: drawer dettaglio con info ospite, oggetto, foto, azioni contestuali, cronologia
LHost casi: sync automatico con portale lhost — match per cod_reservation in reference/packaging
LHost casi: photo upload e proxy (le foto passano via PB, servite dal backend)
LHost casi: dupicate check — un solo caso attivo per prenotazione
LHost pagina: 3 tab (Casi attivi, Storico, Spedizioni lhost)
LHost spedizioni: badge "→ caso PA" sulle spedizioni matchate a un caso interno
BackOffice: bottone "📦 caso lhost" nel pannello messaggi per aprire caso direttamente dal contesto chat
Notifiche SMS: cron ogni 5 min (18:30–23:00 CET) per check-in online completati dal Guest Portal
Notifiche SMS: parsing mail "Guest Portal - Inserimento dati" dalla sottocartella "Registrazioni GP" via Graph API
Notifiche SMS: invio Twilio a lista destinatari configurabile
Impostazioni: editor destinatari SMS con aggiungi/rimuovi/test
Impostazioni: rimossa griglia sorgenti dati (REV, MNT, M365, CAL), mantenuto solo upload KPI PriceLabs
Controllo Qualità: ricerca libera appartamenti (sostituisce dropdown)
Menate notturne: messaggi raggruppati per thread/prenotazione, dismiss per thread intero
BackOffice: badge conteggio prenotazioni sul bottone "📥 prenotazioni oggi", auto-refresh 15min
No-show scan: fix "recordKbApiCall is not defined"
Login: autenticazione M365 (MSAL redirect) e Google (Identity Services popup)
Login: whitelist utenti autorizzati gestibile da Impostazioni
Login: password mantenuta come fallback
Login: identità utente disponibile in timeline lhost e azioni
Login: logout da Impostazioni
Sent backfill: loop interno nella background function (14 min cap), una sola invocazione processa tutto il backlog
Mail private: estrazione ota_id da subject + body, tutti i candidati a 10 cifre validati contro prenotazioni PB (zero falsi positivi)
Risponditore IA: firma automatica con nome operatore (da login M365) + dati aziendali PrimoPiano
Risponditore IA: substituteVars applicato anche al system prompt (fix {{operator_name}})
AI Draft cron: generazione automatica bozze reply in Outlook ogni 5 min, filtro AI (ignore/draft), reply threaded via Graph API
AI Draft: bozza include messaggio originale quotato sotto (createReply con comment), nota interna EN per lingue straniere, [[TRADUZIONE AUTOMATICA]] nel testo
AI Draft: raggruppamento per thread — messaggi multipli dallo stesso ospite generano un solo draft combinato
Home: pagina di accoglienza con filastrocca AI su Gianluigi, meteo Milano e traffico Tangenziale Est (una al giorno, rigenerabile)
BackOffice: sorting per colonna (click su intestazione), freccia indicatore, persistente durante la sessione
AI Draft: messaggi processati restano non letti in Outlook + categoria "IA" (rosso) / "IA - ignorate" (arancione)
BackOffice: pannello "Blocchi proprietario" con lista appartamento, arrivo e partenza, raggruppati per mese
Date: formato DD/MM/AAAA ovunque (backoffice, noshow, CQ, lhost, blocchi)
Pulizie: fix normalizzazione stato — ora controlla anche campo "completed" da KB (fix pulizie bloccate su "da fare")
Duplicati: funzione "Martello" — invio automatico mail escalation (cordiale ogni 3gg → fermo ogni giorno → perentorio ultimo giorno)
CQ: critiche e senza risposta raggruppate per appartamento con header rating/trend, sorting sui gruppi
Alert ritardo pulizie: cron ogni 10 min (10-16 CET), rosso (non iniziata) + ambra (iniziata non finita), mail + SMS, dedup giornaliero
v13.5 — 15/04/2026
Ritardi check-in: bottone rosso pulsante/giallo/grigio, pannello laterale con filtri, dismiss, timer 15min
Ritardi: fix timezone CET per calcoli orario, soglia 1h prima e 2h dopo CI
Pulizie PREVIOUSLY_DONE: pill verde "Pulito il DD/MM" cliccabile per operatore
Pulizie: sync last_cleaned da KB (ultimi 7 giorni, 1 call/giorno), progress bar esclude PREVIOUSLY_DONE
No-show: pagina dedicata, penale come dismiss con fade-out, link KB formato v2, conteggio gestiti
Menate notturne: pagina dedicata con sintesi AI, poesia, categorie, dismiss, forza scansione
Night scan: integrazione Booking.com da booking_mail_events (oltre ad Airbnb da messages_cache)
Night scan: fallback matching per thread con id_reservation=0 via OTA code e guest name
Night scan: fix leggibilita poesia e sintesi (da viola su nero a var(--text2)/var(--text3))
Review sync: nuova pipeline import recensioni da KB admin (XLS download, cookie auth, zero API v5)
Review sync: cron giornaliero 6:00 CET + trigger manuale, upsert su PB collection recensioni
Controllo Qualita: nuova pagina sidebar con dashboard recensioni, tab critiche/senza risposta, filtri per appartamento e canale
Controllo Qualita: summary cards (media, critiche, senza risposta), sub-rating per recensione, parsing positivo/negativo
Changelog: recupero completo storico da v1.x a v11.11.2 (143 voci)
v13.4.5 — 15/04/2026
Architettura modulare: index.html shell + js/core.js + js/backoffice.js + js/manutenzioni.js + js/duplicati.js + js/planner.js + js/noshow.js + js/menate.js
BackOffice: migrazione completa da overlay a pagina dedicata
Riepilogo giornata: tabella arrivi con pulizie, filtri, progress bar, orario CI da raw_data
Pulizie PREVIOUSLY_DONE: pill "Pulito il DD/MM" cliccabile per operatore, sync last_cleaned 1x/giorno
Messaggi: auto-mail pills, bridge cod KB → OTA code, traduzione Haiku, invio, chat
Ritardi check-in: alert rosso/giallo con timezone CET, soglia 1h prima/2h dopo CI, dismiss, refresh 15min
Prenotazioni oggi: overlay laterale
Duplicati: pagina dedicata con filtri, email preview, contact log, fix apostrofo
PrimoPlanner: pagina dedicata — board kanban, 3 tab, filtri, dettaglio laterale
No-show: pagina dedicata, penale come dismiss, link KB v2
Menate notturne: pagina dedicata, scan Airbnb + Booking mail events, AI categorization, dismiss
Night scan: matching thread Booking con fallback OTA code + guest name
v13 — 13/04/2026
Ristrutturazione completa: da monolite single-file a architettura multi-pagina con sidebar
Sidebar collassabile con 6 pagine funzionali + Impostazioni
Manutenzioni: prima pagina funzionante con dati reali da PB
Badge notifiche, navigazione tastiera, supporto mobile
v11.11.2 — 11/04/2026
Booking mail sync: aggiunta modalità rebuild dei booking_mail_threads a partire da booking_mail_events
Menate notturne: finestra resa persistente, non si chiude più da sola e resta aperta anche durante i refresh
Night scan manuale: refresh della finestra menate senza toggle involontario del pannello
v11.11.1 — 11/04/2026
Booking mail threads: parser property_name migliorato su HTML completo (non più solo bodyPreview)
Booking mail sync: per email HTML usa il body completo ripulito, non l’anteprima corta di Graph
Duplicate Booking events: se il thread esiste ma è incompleto, ora lo arricchisce invece di lasciarlo com’è
v11.10.1 — 11/04/2026
Hotfix di rientro: frontend ripristinato dopo la build 11.10 rotta
Rollback conservativo alla base stabile della 11.9, senza toccare booking cleanup aggressivo né pannello manutenzione
Build pensata solo per rientrare nel pannello e tornare operativi
v11.9 — 10/04/2026
Booking mail sync reso idempotente: una sola riga thread per prenotazione Booking in messages_cache
Dedupe forte su eventi mail e messaggi, niente incremento to_read quando la mail è già stata processata
Pulizia automatica dei doppioni Booking in messages_cache (merge messaggi + rimozione record extra)
Lock runtime sul cron booking-mail-sync e metriche separate: created / updated / unchanged / duplicate_events
v11.7 — 10/04/2026
Booking mail ingest via Microsoft Graph sulla shared mailbox prenotazioni@primopiano.milano.it (niente Power Automate)
Nuova scheduled function booking-mail-sync ogni 2 minuti + trigger manuale booking-mail-sync-now
Parser Booking esteso a notifiche italiane e inglesi
Sync mail Booking senza impatto sul backoffice: polling Inbox, parse, upsert su messages_cache
Cursor leggero Graph salvato in kb_cache (booking_mail_graph_cursor)
v11.6 — 10/04/2026
Nuova function mail-booking-ingest: ingestione messaggi Booking via email/Power Automate in messages_cache, senza chiamare KB per aggiornare il thread
Thread Booking creati anche se la prenotazione non è ancora in prenotazioni: usa thread sintetico e pending_reservation_sync fino al collegamento
Relink automatico dei thread Booking pendenti quando la prenotazione compare in PB
Night scan legge messages_cache ordinata per last_update, evitando record più vecchi quando esistono più thread per la stessa prenotazione
v11.5 — 10/04/2026
Pulizie backoffice riallineate a id_room_type: join canonico come manutenzioni, nome stanza solo come fallback umano
Colonna pulizia: badge sempre leggibile, stato Pulito visibile e assegnatario mostrato inline
Popover pulizia aperto anche per task da fare/assegnati
Task monitor: stati resi espliciti (ok, in esecuzione, parziale, in ritardo, errore, disattivato)
Badge live su Menate notturne e No-show letti da PocketBase con refresh periodico
Pannello menate: auto-close dopo alcuni secondi, sospeso mentre il mouse resta sopra il pannello
v11.4 — 10/04/2026
Task monitor riscritto: titoli operativi, ambito, cadenza e flusso dati leggibili
Task monitor: separati Operatori KB e Blocchi calendario; tolte etichette confuse tipo "da collection Marco"
Task monitor: footer con consumo KB API su minuto/ora/giorno
KB API usage logger aggiunto nelle principali funzioni KB per avere un contatore operativo reale
Messaggi: monitor esplicito sul perimetro oggi + domani, coerente con BackOffice e Night Watch
v11.3 — 10/04/2026
Messaggi auto-sync ristretto a oggi + domani: niente piu fetch globale di tutti i thread
Messaggi: batch per id_reservation eleggibile con offset persistente
Changelog home aggiornato alla logica operativa oggi+domani
v11.2 — 10/04/2026
Messaggi: sync automatico limitato alle prenotazioni da oggi in poi (presenti + future)
Messaggi: il passato esce dal backlog automatico e resta solo on-demand dal BackOffice
BackOffice: click thread usa prima messages_cache PB, fallback KB solo se mancano i dettagli
BackOffice: i thread caricati on-demand vengono salvati subito in PocketBase
Trigger manuale kb-sync-now alleggerito: accoda la background function e risponde subito (meno 502)
Sync messaggi: scope operativo esplicito today-forward, coerente con Night Watch e lavoro giornaliero
v11 — 09/04/2026
Stanze da collection appartamenti di Marco — 0 call KB per rooms
Prenotazioni da collection prenotazioni di Marco — 0 call KB per reservations
Eliminata collection prenotazioni_PA e function morte (cod-backfill, kb-import-check, kb-sync-diagnose, setup-messages-cache)
Circuit breaker su 429: tutte le call KB si fermano per 30 min, auto-recovery
Call KB sequenziali con 7s delay — rispetta limite 10/min condiviso con Marco
Force manuale bypassa circuit breaker
Task monitor: nomi descrittivi, fonti dati corrette (KB, PB, Graph), force con log raw persistente + copia
Risoluzione nomi ticket e pulizie via phys_to_type (id_room → id_room_type → appartamenti)
Cleaning sync: nomi stanza risolti via appartamenti, match corretto con prenotazioni
Pulizie backoffice: match per id_room_type, fallback nome case-insensitive
Finestra pulizie 7:30-20:30 lun-sab — zero call KB fuori orario
Sync messaggi ospiti: cache PB, 5 thread/ciclo, priorita recenti, log canale
Messaggi backoffice: lettura da messages_cache PB (0 call KB), fallback KB
Badge messaggi non letti: sparisce quando apri la chat (mark_read)
Traduzione messaggi ospiti: toggle traduci/originale via Claude Haiku
No-show scan: cron 00:30 CET, identifica CONF non IN, CANCEL automatico, salva in noshow_log, email report
Pannello no-show nel backoffice con link diretto a KB per segnare no-show manuale
Poesie AI all-clear generate da Claude Haiku (non piu hardcoded)
Fix date backoffice: usa CET invece di UTC
Fix conteggio arrivi: "di cui X cambi" invece di somma separata
Fix filtro prenotazioni: include status IN oltre a CONF
Fix link ticket KB: URL corretto admin/manutenzioni/view/id/XXXX
Conteggio appartamenti si aggiorna con i filtri applicati
Reservation raw action: supporta ricerca per status e cod_reservation_status_all
Reservation set_status action: cambia status prenotazione via KB API
Planner: fetch dettagli on-demand per task non sincronizzati
Netlify build: comando cleanup per rimuovere function cache stale
Night-scan migrato da KB a PB: legge messaggi da messages_cache, 0 call KB, no circuit breaker
v10.14 — 08/04/2026
Fix critico: kb-sync non sovrascrive rooms con array vuoto su rate limit 429
Sync tiered: cleaning ogni 10min, tickets+prenotazioni ogni ora, rooms+users+blocks alle 4:00
Backoffice: arrivi/partenze/pulizie da PB invece di KB — 0 call KB nel polling
Ridotto consumo API KB da ~70+ call/ora a ~14 call/ora
Fix triple execution: dedup su tutti i cron (kb-sync, cancellation-watch, night-scan, planner-backup)
Planner: fetch dettagli on-demand quando si apre un task non ancora sincronizzato
Task monitor: icona WiFi nell'header con stato task, pannello dettagliato, esecuzione forzata
Rimosso: debug e sync/forza dall'header (sostituiti da task monitor)
v10.13 — 08/04/2026
Debug: action debug_mapping per diagnostica mapping stanze KB
v10.12 — 08/04/2026
Fix invio mail report: server-side via Azure client credentials (senza login M365)
Fix nomi manutenzioni: aggiunto rooms/get-rooms per mapping ID fisico→nome corretto
Fix priorità nomi ticket: roomById[id_room] ha precedenza su name_room_type stale
v10.10 — 08/04/2026
Fix critico: kb-sync ora risolve nomi stanza nei ticket usando roomById dal passo 1 (prima arrivavano tutti vuoti)
Frontend fallback: se PB rooms non carica, ricostruisce _kbRoomById dai ticket stessi
Debug panel: test live PB endpoints (rooms + tickets) e bottone "force sync" in foreground con output diretto
v10.9 — 08/04/2026
Link "debug" accanto a changelog: mostra diagnostica KB (ticket count, nomi, mapping check)
Fix cache: header no-cache su index.html per forzare reload dopo deploy
v10.8 — 08/04/2026
Fix conteggio manutenzioni KB: filtro allineato a krossbooking.js (escludi solo OK/KO/chiusi, non whitelist)
v10.7 — 08/04/2026
Rimosso countdown sync 15 min e barra progressiva dal header
Rimossi pulsanti sync duplicati dal box CAL e header
Nuovo indicatore statico "sync HH:MM" nel header con ↺ manuale
Il CRON server-side gestisce il sync automatico, il browser legge solo dalla cache PB
v10.6 — 07/04/2026
Nuovo kb-full-import-background: import completo da KB senza filtro status
Importa prenotazioni ultimi 6 mesi (CONF + ARRIVED + tutti gli status)
Dopo import riesegue automaticamente night-scan
v10.5 — 07/04/2026
Fix orario ultima scansione: ora salva UTC reale (prima doppio offset timezone)
Debug info nel pannello menate: totale record PB e data filtro usata
v10.4 — 07/04/2026
Night scan: logica estratta in night-scan-core.js condiviso
Aggiunto night-scan-now-background.js per trigger manuale (15 min timeout)
Pulsante "forza scansione" nel pannello menate notturne
v10.3 — 07/04/2026
Menate notturne: nuova scheduled function night-scan (ogni ora, 19-08 lun-sab, tutto il giorno dom)
Risultati salvati in PB (night_scan_cache) — pannello si apre istantaneo
Checkbox dismiss per spuntare segnalazioni gestite
Mostra ultima scansione e conteggio appartamenti monitorati
v10.2 — 07/04/2026
Fix filtri PB: formato data compatibile con storage ISO (T-separator), include arrivi di oggi per menate notturne
v10.1 — 07/04/2026
Fix menate notturne e prenotazioni: filtri PocketBase con apici singoli (doppi causavano 0 risultati)
v10.0 — 07/04/2026
Fix critico backoffice: ripristinato exports.handler mancante (causava 502 su tutte le azioni)
Ripristinate funzioni fetchMessages, sendMessage, kbPostWithRetry
Aggiornato DEPLOY_DATE
v9.55 — 07/04/2026
Messaggi thread: paginazione con limit/offset (50 per pagina, cap 500) per caricare tutti i messaggi
v9.13 — 07/04/2026
Fix parsing messaggi KB: get-thread restituisce oggetto con chiavi numeriche {"0":{...}} non array
Tutti i messaggi del thread ora caricati correttamente
Rimossi tutti i log di debug dal backoffice
v9.12 — 07/04/2026
Debug messaggi mancanti: log thread count, total_count e struttura get-thread
v9.11 — 07/04/2026
Fix direzione messaggi chat: usa user_role KB (owner→out, guest→in)
Sender messaggi: usa from_first_name come campo primario
Rimossi log di debug dal backoffice
v9.10 — 07/04/2026
Chat: messaggi oltre 15 righe collassati con "mostra tutto / mostra meno"
Backoffice: log debug campi raw direzione messaggi KB (temporaneo)
v9.9 — 07/04/2026
Fix "a is not defined" nel pannello Prenotazioni ricevute oggi
Messaggi chat: testo giustificato e font ridotto a 11px
Direction messaggi: detection più robusta (host/staff/hotel/property/manager)
v9.8 — 07/04/2026
Vista Manutenzioni: bottone rinominato e stile ghost omogeneo, rimane Manutenzioni dopo analisi
Nascosti: Gruppo, KPI, Insight, Urgenti, Andamento, summary strip, report buttons (codice intatto)
Sync bar: sempre visibile, bottone sync inside on-hover, countdown 15 min dentro la barra
Filtri sotto bottoni su riga separata
Fix Planner: variabile breakdown fuori da if(m365Status)
Fix changelog: rimossa duplicazione versioni
v9.2 — 07/04/2026
Box slim: pallino pulsante verde/rosso per stato, dettagli solo in hover tooltip
KPI e REV: click apre file picker come prima
MNT, M365, CAL: compatti con info complete nel tooltip al passaggio del mouse
v9.1 — 06/04/2026
Analizza: attende il caricamento di _kbRoomById se non ancora disponibile, mostra "attendi..." sul bottone
Fix manutenzioni a zero: manMap risolve nome stanza via _kbRoomById quando Camera/Appartamento è vuoto
v9.0 — 06/04/2026
Fix manutenzioni a zero in Analizza: manMap risolve nome stanza via _kbRoomById(id_room) quando Camera/Appartamento è vuoto
v8.99 — 05/04/2026
Fix buildListingData: logica fallback con if sequenziali — passa alla fonte successiva se quella corrente produce 0 nomi
Ripristinato deploy-age inline nel header (era sparito)
v8.98 — 05/04/2026
Fix Analizza: kbAvailability come fallback master list quando kbRooms=0 e tickets senza nome stanza
Fix layout: deploy-age spostato su riga separata
v8.97 — 05/04/2026
Fix Analizza 0 listing: canonicalName ticket usa name_room_type (campo PB) quando rooms cache è vuota
Layout: deploy-age spostato su riga separata sotto il titolo
v8.96 — 05/04/2026
Fix buildListingData: fallback rooms usa name_room_type (campo PB) oltre a Camera/Appartamento — risolve 0 listing quando kbRooms=0
v8.95 — 05/04/2026
Fix barra sync: se timestamp > 15min fa riparte da now (evita "sync..." fisso)
Fix barra sync: al completamento del sync attivo riparte da Date.now() (non da 15min fa)
Fix bottone re-sync completo: sempre visibile nel box CAL
v8.94 — 05/04/2026
Barra sync opzione B: sempre visibile, si svuota 100%→0% tra sync (prossimo: MM:SS dentro), si riempie 0%→100% durante sync attivo
Fix page load: rimossa chiamata syncBarShow vuota che mostrava barra vuota con countdown fuori
krossbooking/availability: totalPrenotazioni nel box CAL (count totale prenotazioni_PA)
kb-sync-core: re-sync completo ogni 12h per recuperare record mai importati da sync incrementale
v8.93 — 05/04/2026
kb-sync-core: forza re-sync completo ogni 12h (le prenotazioni non aggiornate di recente ma mai importate ora vengono recuperate)
CAL box: bottone "↺ re-sync completo" che cancella il timestamp e forza un re-import totale da KB
krossbooking: aggiunta action reset_sync_ts per cancellare il timestamp da PocketBase
v8.92 — 05/04/2026
CAL box: mostra totale record prenotazioni_PA (es. "267 apt · 0 occ · 0 propr. · 1214 res.") — indica se il DB è popolato
Sync bar: countdown 15 min con barra verde che avanza e timer MM:SS all'interno della barra
Sync flow: trigger immediato della background function, poi countdown 15 min, reload dati al completamento
krossbooking/availability: ripristinato filtro cod_reservation_status="CONF" (rimosso erroneamente in v8.91)
v8.91 — 05/04/2026
krossbooking/availability: rimosso filtro cod_reservation_status="CONF" — KB v5 non ritorna quel campo (null in PB → 0 match → CAL sempre 0 occ/0 propr)
buildListingData: fix crash silenzioso quando files.rev è null (Analizza non rendeva nulla senza file recensioni)
v8.90 — 04/04/2026
kb-sync-core: upsert prenotazioni_PA parallelizzato (concurrency=10) — 2261 record in ~90s invece di ~15min
kb-sync-core: fix timeout background function che bloccava il sync a 1200 record
v8.89 — 04/04/2026
Aggiunta function kb-sync-diagnose: testa tutto il pipeline KB→prenotazioni_PA e restituisce report JSON dettagliato
kb-sync-core: auto-reset timestamp se prenotazioni_PA vuota
v8.88 — 04/04/2026
kb-sync-core: auto-reset sync timestamp se prenotazioni_PA è vuota (evita loop incrementale con 0 record)
v8.87 — 04/04/2026
kb-sync-core: fix critico — KB v5 restituisce arrival/departure (non check_in_date/check_out_date che sono solo parametri filtro)
kb-sync-core: id_reservation con fallback a cod_reservation/reservation_id/id
kb-sync-core: log diagnostico primo record KB (campi + valori arrivo/partenza)
kb-sync-core: contatore skipped con log dettagliato sui primi 3 record skippati
v8.86 — 04/04/2026
Box MNT: rimosso bottone ↺ sync KB visibile su successo (sync solo da header)
kb-sync-core: timestamp sync non salvato se 0 upsert (evita loop incrementale su collection vuota)
kb-sync-core: logging errori HTTP dettagliato su prenotazioni_PA (GET/POST/PATCH)
kb-sync-core: filter id_reservation adattivo (numerico o stringa)
v8.85 — 04/04/2026
kb-sync-core: logging dettagliato errori HTTP su prenotazioni_PA (GET/POST/PATCH)
kb-sync-core: filter id_reservation adattivo — numerico se KB lo restituisce come number
kb-sync-core: timestamp sync non salvato se 0 record inseriti (evita loop sync incrementale su collection vuota)
v8.84 — 04/04/2026
Sync bar: spostata inline accanto al link changelog, visibile solo durante il progress (~80px = ~3cm)
Fix prenotazioni_PA: filtro PB con virgolette su id_reservation (era senza, causava 0 match)
Fix prenotazioni_PA: rimosso check strict su name_room_type che skippava record validi senza stanza
v8.83 — 04/04/2026
Sync bar in header: bottone ↺ sync ora, countdown prossimo sync (15min), progress bar con fasi animate
runFullSync(): 3 fasi — sync manutenzioni → sync prenotazioni → sync planner → reload availability
CAL box: label Disponibilità, stato da PocketBase, testo sync necessario se dati vuoti
Availability endpoint: lettura da prenotazioni_PA + kb_cache[blocks] — zero chiamate KB API live
Fix PB auth availability: aggiunto endpoint /api/collections/users/auth-with-password
kb-sync-core: sync incrementale prenotazioni su prenotazioni_PA con last_update_from
pocketbase.js: aggiunto action=kb_blocks e kb_reservations
v8.72 — 04/04/2026
iCal disabilitato — la colonna CAL usa solo KB availability
Blocchi PROPRIETA: date_to trattato come data inclusiva (+1 giorno)
Retry chiusura ticket: 3 tentativi con backoff per gestire 429 rate limit KB
v8.60 — 04/04/2026
Fix PB 2MB limit: ticket in formato compatto (12 campi, prob max 150 chars)
Fix ticket riaperti: status ha priorità su campo closed
Fix PB auth e error logging
v8.48 — 03/04/2026
Blocchi PROPRIETA: diagnostica activeToday — log ogni blocco attivo con date
roomById costruito con String() coercion per evitare mismatch tipo chiave
v8.70 — 04/04/2026
Dettagli ticket: condizione nessun dettaglio esclude campi name/room/closed/status/id
v8.69 — 04/04/2026
Availability: try-catch esplicito con log errore esatto
rooms/get-rooms aggiunto a roomById in availability per risoluzione nomi blocchi
v8.68 — 04/04/2026
kb-photos: login usa solo loginCookies (non combinati con pageCookies) per evitare cookie duplicati
v8.67 — 04/04/2026
kb-photos: login POST a /login/v2 con hotel_id=primopiano — fix URL login
kb-photos: accept status 200 come successo login + verifica sessione su /admin/manutenzioni
v8.66 — 04/04/2026
kb-photos: fix login KB web — POST a /login/v2 con hotel_id nel form
v8.65 — 04/04/2026
kb-sync: guard anti-sovrascrittura — se KB torna 0 ticket non aggiorna PB
kb-sync: kbPost usa r.text()+JSON.parse per robustezza su response grandi
Ticket filter: status ha priorità su closed (KB non resetta closed al reopen)
v8.64 — 04/04/2026
kb-sync-core: kbPost refactored con r.text()+JSON.parse come krossbooking.js
Log dettagliato tickets: ok, status, isArray, len per diagnostica
v8.63 — 04/04/2026
kb-sync-now-background: background function 15min per evitare timeout
syncKbNow: polling 20s dopo trigger background
v8.62 — 04/04/2026
kb-sync: rimosso limit:5000 (KB ignora il parametro) — usa {} senza limit
Guard: se KB torna 0 ticket non sovrascrive PB cache
v8.61 — 04/04/2026
Debug kb_tickets: log rawType/rawIsArray/dataLen nella risposta pocketbase.js
pocketbase.js: fix record.data string — parse se stringa prima del filter
v8.60 — 04/04/2026
kb-sync: admin auth tenta /api/admins/auth-with-password per write su kb_cache
pocketbase.js: rimosso filtro server-side ticket — filtering lato frontend
v8.59 — 04/04/2026
Fix limite 2MB PocketBase: ticket compattati a 12 campi con prob troncato a 150 chars
Log stima dimensione JSON prima del PATCH
v8.58 — 04/04/2026
Fix synced_at: formato ISO con .000Z per compatibilità PocketBase
pbUpsert: log testo errore PB (max 200 chars) invece di solo status code
v8.57 — 04/04/2026
pocketbase.js: filtro ticket lato server (solo NEW/WAIT/INPROGRESS/CHECKLIST)
kb-sync: paginazione ticket con pageSize=500
v8.53 — 04/04/2026
Fix DEPLOY_DATE: aggiornata a ogni build con data UTC esatta
Rooms caricati da PB prima del mapping ticket in checkKbApi
v8.52 — 04/04/2026
checkKbApi carica rooms da PB prima di abilitare Analizza — fix lista vuota
PrimoPlanner: delta task/bucket rispetto al sync precedente nel header
v8.51 — 04/04/2026
Fix chiusura ticket: aggiunto closed="t" e date_closed nella chiamata KB
v8.50 — 04/04/2026
Logging completo risposta raw endpoint foto ticket per diagnostica
Endpoint utenti KB: users/get-users-list
CRON kb-sync ogni 15 minuti
Fix buildListingData: usa files.man come fallback se _kbRoomsList vuoto
v8.49 — 04/04/2026
Fix filter encoding PocketBase: virgolette doppie nella query kb_cache
Admin auth fallback per kb_cache in pocketbase.js
Sync operatori KB: users/get-users-list → kb_cache type=users
Nomi operatori nel pannello dettagli ticket (risolve codici GARC12 etc)
v8.48 — 04/04/2026
Fix filter encoding PocketBase kb_cache: usa virgolette doppie nella query
Admin auth fallback per kb_cache in pocketbase.js
Fix buildListingData: usa nomi da files.man come lista master se _kbRoomsList non disponibile
CRON kb-sync ogni 15 minuti invece di ogni ora
v8.47 — 04/04/2026
Fix ID status-man in checkKbApi (era man-status)
Bottone sync KB in HTML diretto invece di appendChild dinamico
Changelog aggiornato dalla v8.33 alla v8.46
v8.46 — 04/04/2026
Fix ID elemento zona MNT: zone-man e retry-man invece di man-zone e man-retry
v8.45 — 04/04/2026
Bottone sync KB sempre visibile anche con cache vuota (primo avvio)
v8.44 — 04/04/2026
Architettura KB→PocketBase: nuovo CRON kb-sync.js ogni ora sincronizza rooms e tickets
Nuova function kb-sync-now.js per sync manuale via bottone in PA
checkKbApi legge da PocketBase kb_cache invece di KB live
fetchKbAvailability carica rooms anche da PB cache per consistenza nomi
Bottone sync KB ora nella box MNT
v8.43 — 04/04/2026
Primo deploy kb-sync.js (CRON)
PocketBase action kb_rooms e kb_tickets in pocketbase.js
v8.42 — 04/04/2026
Fix mittente cancellation-watch: prenotazioni@ con nome Primopiano Analyzer
Fix mittente guest-email: allineato a Primopiano Analyzer
Fix deduplicateIssues: preserva id_kb nel gruppo per mostrare bottone dettagli
Fix filterDuplicates: dopo invio mail mantiene filtro attivo invece di mostrare tutti
Fix openDuplicates: usa filterDuplicates al caricamento invece di renderDuplicates diretto
v8.41 — 04/04/2026
Fix invio mail duplicati: rimosso MSAL, usa app credentials Azure server-side
Duplicati: rimosso filtro temporale, aggiunto filtro tutti/contattati/da contattare
Daily report: mittente cambiato da simone@ a prenotazioni@ con nome Primopiano Analyzer
v8.40 — 04/04/2026
Architettura KB come master: buildListingData usa rooms/get-rooms come lista primaria
PriceLabs diventa add-on opzionale: analisi disponibile anche senza CSV
checkReady: si attiva solo con files.man (non richiede piu PL)
Matching manutenzioni: manMap e manData keyed by lowercase per evitare mismatch capitalizzazione
v8.39 — 04/04/2026
rooms/get-rooms come fonte unica per result in availability: blocchi PROPRIETA ora corretti
roomsList passato nella risposta availability e salvato come _kbRoomsList
Bottone reset filtri nella filter-bar
v8.38 — 04/04/2026
Fix ticket KB: closed="t" escluso dal filtro — causa principale dei ticket fantasma
room_name nativo KB usato direttamente senza mapping
Link #ID ticket KB nel report manutenzione per verifica diretta
v8.37 — 04/04/2026
Fix manutenzioni: uso SOLO room_name nativo KB senza fallback su mapping id_room
Rimosso blocco roomById dalla maintenance action (non necessario)
v8.36 — 04/04/2026
Fix syntax error changelog (sed -i aveva eliminato header v8.34)
rooms/get-rooms aggiunto anche ad availability per blocks/PROPRIETA
try-catch esplicito sulla maintenance action per esporre errori runtime
v8.35 — 04/04/2026
Fix filtro ticket KB: closed="t" identifica ticket chiusi anche con cod_status=NEW
room_name nativo gia presente nel ticket KB — mapping semplificato
Dettagli ticket: mostra cod_user_open e cod_user_assigned
v8.34 — 04/04/2026
Header razionalizzato: KPI e Recensioni restano su file, gli altri box non accettano piu file Excel
Indicatore di stato connessione: pallino verde = connesso, pallino rosso = non connesso
Fix chiudi KB: retry automatico (2 tentativi), rimozione ticket da memoria alla chiusura
Filtro segnalazioni ora multiplo: KB + Planner / solo KB / solo Planner
Report manutenzione: briefing non piu auto-generato, parte solo su richiesta
Fix triple mail digest: idempotency migrata da Netlify Blobs a PocketBase
Colonna Segnalazioni: mostra KB:N · PL:N con colori verde/arancione/rosso
v8.33 — 03/04/2026
Manutenzioni KB via API: report manutenzione carica ticket live da Krossbooking
Bottone chiudi su ogni segnalazione KB nel report
Endpoint: maintenance, maintenance_close, maintenance_update
daily-report-test.js: endpoint per invio manuale report duplicati
v8.32 — 03/04/2026
PrimoPlanner: vista board Kanban read-only da PocketBase — backup indipendente da Planner
Board con colonne per bucket, card con priorita/assegnatario/checklist/scadenza/commenti
Pannello dettaglio laterale: notes, checklist, allegati SharePoint, commenti con autore e data
Tab Cestino per task eliminati da Planner ma conservati nel backup
v8.31 — 03/04/2026
planner-backup.js: sync struttura Planner su PocketBase (bucket + task + dettagli + commenti)
planner-backup-cron.js: sync automatico ogni ora 8-20 lun-sab, paginato per rispettare timeout
Endpoint: sync (base), sync-details (note/checklist/threadId), sync-comments (commenti), status, discover
Soft-delete: task/bucket rimossi da Planner conservati nel backup con data eliminazione
Fix daily-report: idempotency check Netlify Blobs reso resiliente (try/catch)
v8.30 — 03/04/2026
Fix commenti Planner: conversationThreadId letto da /planner/tasks/{id} (la lista /plans/{id}/tasks non lo include)
Nuova Netlify function planner-comments.js: lettura commenti via client credentials flow (server-side, no MSAL)
fetchCommentsBatch: risolve threadId + batch fetch commenti durante sync iniziale (5 in parallelo)
Fix daily-report: idempotency check Netlify Blobs reso resiliente (try/catch, il report parte anche se il blob fallisce)
v8.29 — 02/04/2026
apt_history: migrato da PocketBase a Krossbooking API (storico completo, tutti gli appartamenti)
krossbooking.js: auth/get-token + unwrap data KB v5 + apt_history con match su rooms[0].name_room_type
v8.28 — 02/04/2026
krossbooking.js: riscritta con struttura POST corretta (endpoint /v5/reservations/get-list)
Supporto filtri check_in/check_out, with_rooms, paginazione automatica
apt_history: storico reale da KB invece di PocketBase
v8.27 — 02/04/2026
Nuova function krossbooking.js: proxy API KB v5 (prenotazioni, appartamenti, storico)
Endpoint ?action=test per scoprire struttura dati KB disponibile
v8.26 — 02/04/2026
apt_history: match progressivo — rimuove numero finale (Edolo 46 → Edolo) poi ultima parola come fallback
Report proprietario: modalita avviamento solo se < 4 mesi online (data primo ospite + soglia 3 rec Booking)
v8.25 — 02/04/2026
Fix tasso recensione assurdo: sanity check reviews <= past_stays, altrimenti segnala mismatch nome
Fix match nome appartamento PocketBase: eliminati falsi positivi su stringhe corte
v8.24 — 02/04/2026
Fix: online da 0 mesi → da pochissimo / da circa N mesi
Parte discorsiva: Claude deve citare data precisa primo ospite e spiegare soglia 3 recensioni Booking
Bottoni rinominati: report generale / report proprietario
v8.23 — 02/04/2026
apt_history: separati soggiorni passati (performance storica) da future (pipeline)
Prompt Claude: due sezioni distinte — storico soggiorni + pipeline futura con CONF
Tasso recensione calcolato solo su soggiorni passati
v8.22 — 02/04/2026
Fix crash analisi: rev.dates is not iterable per apt senza recensioni (fallback object mancava dates)
v8.21 — 02/04/2026
Report proprietà: primo soggiorno da PocketBase (tutte le prenotazioni, non solo quelle con recensione)
Aggiunto action apt_history a pocketbase.js: soggiorni totali, per canale, ultimi 6/12 mesi
Tasso recensione calcolato: N recensioni su M soggiorni totali
Match nome appartamento case-insensitive tra nomi PriceLabs e PocketBase
v8.20 — 02/04/2026
Fix colonna canale: ora legge Canale (nome reale nel file XLS Krossbooking)
Fix data primo ospite: include colonna Arrival (data soggiorno reale, più precisa della data recensione)
Aggiunta Arrival e Canale al mapping del file recensioni
v8.19 — 02/04/2026
Fix parsing date recensioni: tenta multipli nomi colonna (Data, Date, Review date, etc.)
Aggiunge ultima data recensione e ultime 3 date al prompt
Istruzione esplicita a Claude: DEVE citare data primo ospite, mesi online, soglia 3 rec Booking
v8.18 — 02/04/2026
Report proprietà: nuovo flusso — area per incollare la mail del proprietario prima della generazione
Risposta in due parti: discorsiva (risponde alla mail) + tecnica (Entrando più in dettaglio...)
Contesto: data primo ospite/recensione, mesi online, soglia Booking.com (< 3 recensioni = rating non visibile)
Tracking date recensioni e conteggio Booking.com nel processFiles
v8.17 — 02/04/2026
cancellation-watch: snapshot solo prenotazioni future/in corso (escluse quelle passate)
Schedule: ogni ora dalle 8 alle 18, lun-sab (no domenica)
v8.16 — 02/04/2026
cancellation-watch: riscritta con nomi campi corretti (label, name_room_type, cod_reservation)
Rilevamento cancellazioni via snapshot comparison (le cancellazioni = record eliminati da PocketBase)
Prima esecuzione: salva snapshot baseline — le successive rilevano le sparizioni
v8.15 — 02/04/2026
cancellation-watch: auth admin PocketBase, errori visibili, endpoint ?debug=1 per diagnostica
v8.14 — 02/04/2026
Nuova function cancellation-watch: alert email automatico quando un ospite duplicato cancella una prenotazione
Schedulata ogni 2 ore — alert inviato una sola volta per prenotazione (log su PocketBase)
Testabile via /.netlify/functions/cancellation-watch?test=1
v8.13 — 02/04/2026
Fix import contact-log: scrittura diretta senza find (bypassa filtro PocketBase)
v8.12 — 02/04/2026
Fix contact-log: filtro PocketBase con virgolette singole (fix 400 su find/update)
v8.11 — 02/04/2026
contact-log: auth admin PocketBase (bypassa regole API), errori visibili in GET, endpoint ?action=debug
v8.10 — 02/04/2026
contact-log migrato definitivamente su PocketBase — nessuna dipendenza da Netlify Blobs
Aggiunto endpoint ?action=import per ripristino bulk dati contact log
v8.9 — 02/04/2026
contact-log: ritorno a Netlify Blobs con siteID esplicito (fix perdita dati tra deploy)
Aggiunto endpoint ?action=import per ripristino manuale del log contatti
Aggiunto endpoint ?action=export per backup del log contatti
v8.8 — 02/04/2026
Fix definitivo flag mail duplicate: contact log migrato da Netlify Blobs a PocketBase — i dati non si perdono più tra deploy
Endpoint /.netlify/functions/contact-log?action=setup per creare la collection PocketBase (da chiamare una volta)
v8.7 — 02/04/2026
Fix invio report giornaliero duplicato: check idempotenza su Netlify Blobs (evita invii multipli se Netlify triggera la function più volte)
v8.6 — 02/04/2026
Report manutenzione: segnalazioni KB mantenute come lista con tutti i dettagli; sotto, briefing discorsivo fuso (KB + Planner + commenti) generato da Claude
Commenti Planner sempre ricaricati freschi alla generazione del report (fix cache vuota)
Aggiunto scope Tasks.ReadWrite.All per accesso corretto alla beta API commenti
Link Planner per ogni task con indicatore ●in corso / ○da fare
v8.5 — 02/04/2026
Planner: commenti dei task inclusi nel report manutenzione (Graph beta API)
Report manutenzione: sezione Planner per bucket con stato ●in corso / ○da fare, note narrative, checklist, commenti con autore e data
Status M365: breakdown task per bucket + conteggio in corso
TTL cache 10 min, resync forzato se mancano bucket; fix graphGetBeta duplicata
v8.4 — 02/04/2026
Fix badge ✉×N: aggiornamento immediato in memoria dopo invio, nessuna race condition con Netlify Blobs
Fix doppio invio: bottone reset a ogni apertura anteprima
Versione header letta automaticamente da changelog (no più hardcoded)
Fix struttura zip deploy: file alla root senza cartella padre
v8.3 — 02/04/2026
Multi-email duplicati: mail inviata a tutti gli indirizzi presenti nelle prenotazioni sovrapposte
Fix badge ✉×N: aggiornamento dopo invio senza riaprire il pannello
Fix timestamp "aggiornato X fa" nell'header
v8.2 — 01/04/2026
Logo PrimoPiano in header e login screen
Contrasto testi migliorato (--text2, --text3)
Allineamento verticale header corretto
v8.1 — 01/04/2026
Fix logica urgenti: urgente = rimborsabile (rischio buco), non non-rimborsabile
Filtro duplicati aggiornato: ⚠ rimborsabile (rischio buco)
Rimossa modalità test dalla mail ospite
Rimossa function daily-report-test
v8.0 — 01/04/2026 12:00
Log contatti ospite su Netlify Blobs — traccia quante volte ogni ospite è stato contattato dal PA
Badge ✉ ×N nel pannello duplicati per ogni ospite già contattato
Endpoint test report giornaliero: /.netlify/functions/daily-report?test=1
Report giornaliero: rimosso filtro — inviato sempre con quadro completo
v7.9 — 31/03/2026 20:00
Mail ospite multilingua (IT/EN/FR/DE/ES/PL/RO/UK/RU) con template e firma
Bottone ✉ contatta ospite per ogni gruppo di duplicati
Lingua rilevata automaticamente dal campo lang in PocketBase
Nota traduzione automatica per lingue non italiane
Report giornaliero schedulato ore 9:00 (Netlify Scheduled Functions)
Report inviato solo se ci sono duplicati urgenti non rimborsabili
v7.7 — 31/03/2026 18:00
Duplicati: raggruppamento per ospite (non più coppie)
Badge "N prenotazioni" quando >2 prenotazioni per ospite
Filtro per listino: non rimborsabile / rimborsabile
Badge verde/rosso sul listino di ogni prenotazione
Canale OTA colorato (Airbnb rosso, Booking blu)
Changelog ora dinamico da array JS — non più HTML statico
v7.6 — 31/03/2026 16:00
Integrazione PocketBase — function pocketbase.js
Bottone 🔍 duplicati: cerca prenotazioni sovrapposte per stesso ospite su appartamenti diversi
Filtro per periodo (passato / futuro / 30gg / 90gg) e per nome ospite
Changelog dinamico — generato da array JS, non più HTML statico
v7.5 — 31/03/2026 11:30
Filtri riorganizzati in dropdown: gruppo, disponibilità, andamento
Urgenti e 🔧 3+ restano bottoni standalone combinabili
Andamento recensioni mutualmente esclusivo (↑ / = / ↓)
Badge nei box upload: variazione rispetto al caricamento precedente
Invio mail via Graph API Microsoft 365 (no Netlify function)
Scope Mail.Send aggiunto a MSAL
v7.4 — 31/03/2026 10:30
Fix invio mail: da Netlify SMTP (bloccato TCP 587) a Graph API me/sendMail
Rimosso nodemailer, zero dipendenze esterne nelle functions
v7.3 — 31/03/2026 10:00
Filtro "libero 7gg+" basato su calendario iCal (non su occ_30)
Fix filtri additivi combinabili: gruppo + urgenti + calendario
! tooltip nella colonna gruppo per urgenza con dettaglio criticità
Urgenza: solo da manutenzioni KB e Planner (non da KPI)
v7.2 — 31/03/2026 09:30
Nuovi filtri additivi: ⭐↑ ⭐↓ miglioramento/peggioramento rating
Filtro 🔧 3+ manutenzioni aperte
Filtro libero 7gg+ consecutivi da iCal
v7.1 — 31/03/2026 09:00
Filtri combinabili: gruppo mutuamente esclusivo, Urgenti+Calendario additivi
! tooltip nella colonna gruppo per urgenza
Urgenza solo da manutenzioni KB + Planner
v7.0 — 30/03/2026 17:00
Checkbox multiselect colonna sinistra tabella
Report manutenzione multi-appartamento con fusione duplicati
Anzianità segnalazione: punto verde/arancio/rosso per età
Task Planner nel report con link diretto al task
Changelog corretto e completo
v6.7 — 30/03/2026 16:00
Ricerca appartamenti in tempo reale
Sorting: nome A→Z / Z→A, giorni liberi ↑↓
Filtro Liberi ≤3gg (era ≤7gg)
Fix regex normalizzazione nomi iCal (\b e \s corrotti)
v6.6 — 30/03/2026 15:45
Fix matching iCal: mapping statica per casi irrisolvibili
VE-Lido→Lido, Grandi→Grandi B, Ressi A→Ressi 16
Token overlap 50% per BellaMI 1-6, Porta Romana 113, Ariberto 24
v6.5 — 30/03/2026 15:30
Matching iCal migliorato: exact → prefix → token overlap
Rimozione parentesi e aggettivi (standard/grande/piccola) dalla normalizzazione
v6.4 — 30/03/2026 15:15
Easter egg: report proprietà Bardelli con toni entusiastici
v6.3 — 30/03/2026 15:00
Bottone "report proprietà" — testo discorsivo pronto da inviare al proprietario
"report interno" rinominato · bottone "copia testo" nel popup
v6.0–v6.2 — 30/03/2026 13:45–14:30
Rating normalizzato /10 (Airbnb /5×2, Booking /10)
Frecce trend 3 mesi: ↑ verde / ↓ rosso / = giallo
File KPI/REV/MNT condivisi su Netlify Blobs
Indicatore "aggiornato X giorni fa" basato su data deploy
v5.7–v5.9 — 30/03/2026 12:30–13:30
Box [CAL] upload URL iCal da Krossbooking
Colonna Calendario: pillola verde/giallo/rosso con giorni liberi
Proxy Netlify per fetch iCal lato server (no CORS) · cache 4h
Versione in rosso, "changelog" lampeggiante
Fix matching nomi iCal con apostrofo (Sant' Arnaldo)
v5.0–v5.6 — 30/03/2026 11:00–12:00
Riscrittura completa da zero — zero duplicati
Colonna Segnalazioni Planner con task, checklist, assegnatari
Urgenza incrociata KB + Planner · sync incrementale
Fix backtick spurio · fix nextOccupied.toLocaleDateString
v5.0 — 27/03/2026
Prima riscrittura pulita
Login SHA-256, 5 box upload con persistenza localStorage
Analisi portfolio istantanea (classificazione locale, no API calls)
Integrazione Planner M365 con login redirect
v2.x–v4.x — 25–26/03/2026
Deploy Netlify con chiave API server-side
Login Microsoft 365 con redirect.html dedicato
Fix login gate, password hash, redirect URI Azure AD
v1.x — 24/03/2026
Prima versione: analisi portfolio PriceLabs
Classificazione 4 gruppi (Low MPI, Liquido, Saturazione, Avviamento)