# CLAUDE.md — Dropbox/adrian/PYTHON (coordinator Adrian — istanza ufficio) **Versione:** v18 **Ultimo aggiornamento:** 2026-07-17 Questo file è il contesto coordinator per i progetti Windows ufficio. Il contesto globale (Costituzione Adrian, principi, standard, protocolli) è in `Dropbox/adrian/CLAUDE.md`. --- ## Mappa progetti | Progetto | Status | Path | |---|---|---| | **Frank** *(ex Scheduler)* | active | `Dropbox\adrian\PYTHON\Frank` | | **DbComparer** | active | `Dropbox\adrian\PYTHON\DbComparer` | | **GemmaReport** | active | `Dropbox\adrian\PYTHON\GemmaReport` | | **ImdbUpdate** | active | `Dropbox\adrian\PYTHON\ImdbUpdate` | | **DataHub_v2** | active | `I:\SOFTWARE\SCHEDULATORE\UPDATE_PYTHON\DataHub_v2` | | **ParquetToAccess** | active | `I:\SOFTWARE\SCHEDULATORE\UPDATE_PYTHON\ParquetToAccess` | | **PipelinePython** | active | `Dropbox\adrian\PYTHON\PIPELINE_PYTHON` *(copia versionata — live su `I:\SOFTWARE\SCHEDULATORE\PIPELINE_PYTHON`)* | | **MyICR_Suite** | active | `Dropbox\adrian\PYTHON\MyICR_Suite` | | **MyICR_Legacy** | legacy | `Dropbox\adrian\PYTHON\MyICR_Legacy` | | **GemmaClient** | completed | `Dropbox\adrian\PYTHON\GemmaClient` | | **MonitorOsservatorioPy** | active | `Dropbox\adrian\PYTHON\MonitorOsservatorioPy` | | **PowerBricks** | new | `Dropbox\adrian\PYTHON\MyICR_Suite\app\modules\powerbricks` | ## Relazioni tra progetti - **Frank** orchestra i job ETL (ImdbUpdate, GemmaReport, DataHub_v2, ecc.) - **DbComparer** valida output di DataHub_v2 vs tabelle Access di riferimento (tool ad-hoc, standalone) - **MyICR_Legacy/ProssimeUscite** è il blueprint riutilizzabile per Python embedded standalone --- ## Roadmap inter-progetto (backlog attivo) - **ProssimeUscite → MyICR_Suite**: integrare ProssimeUscite (MyICR_Legacy) come dashboard/modulo. Opzione A: `dash_prossime_uscite/` nativa PyQt6. Opzione B: modulo autonomo. Dipendenza: gestire pyodbc/Access nel deploy. Discutere strategia con Mauro prima di iniziare. - **MyICR_Suite istanze multiple MediaTrack**: utenti aprono più istanze → più processi Flask sulla stessa porta 5000. Fix: lock file + check porta al boot. - **MyICR_Suite NL Query (BI conversazionale)**: agente AI che risponde a domande cross-dominio in linguaggio naturale. Architettura a due fasi: Fase 1 — validazione con Claude Code diretto su SQLite mirror; Fase 2 — agente via Claude API Agent SDK. NON text-to-SQL semplice — serve ragionamento iterativo multi-step. Prerequisito Fase 1: accesso SQLite mirror in sessione dedicata. - **Linker Step 4**: match tra le due tabelle — checkbox "Escludi titoli già in Linker". `Dropbox\adrian\PYTHON\MyICR_Suite\app\modules\linker\` - **MyICR_Workspace smantellamento**: eliminare `MyICR_Workspace` dopo OK Mauro (MyICR_Suite è il successore). - **UPDATE_PYTHON_WEEKLY smantellamento**: inglobato in `PIPELINE_PYTHON` — da eliminare quando la pipeline weekly è consolidata su DS. - **PIPELINE_PYTHON parallelo completato** (2026-04-23): DB_WEEK Python vs VBA — EDIZIONI/CUSTOM_DIRITTI 100%, CUSTOM_ANAGR_ORIZ 99.76%, BOXOFFICE 99.55%, SUPERSERIE 99.84%, CUSTOM_EMESSO 97.47% (residuo TCDURLORDA ±1 min strutturale). Pipeline weekly pronta per produzione. - **PIPELINE_PYTHON sqlite_mirror** (2026-04-27): mirror SQLite dei Parquet L2 per query Access. Tabelle senza PK intera hanno colonna `_id` (ROW_NUMBER). Ricollegamento Access completato ✓. --- ## Visione architetturale MyICR Suite **Principio:** Flask come spina dorsale. HTML/JS/CSS per tutta l'interfaccia visuale. PyQt6 solo per finestre Excel-like con editing tabellare pesante. **Regole:** 1. Flask è l'unico API layer — HTML e PyQt6 parlano sempre e solo a Flask, mai direttamente tra loro 2. Il confine tecnologico è per modulo, non ideologico — valutare ogni modulo sulla sua traiettoria 3. Linker resta PyQt6 — funziona, nessun rimpianto 4. Protocollo Flask→PyQt6 da definire prima di scrivere codice | Modulo | Tecnologia | Note | |---|---|---| | MediaTrack | HTML/JS/CSS | in produzione — modello di riferimento | | Dashboard (diritti, tipologie, em_pivot) | HTML/JS/CSS | da riscrivere — oggi PyQt6 embrionale | | Navigation / Login | HTML/JS/CSS | da costruire | | Linker / GrigliaModulare | PyQt6 | resta PyQt6 — editing tabellare Excel-like | | SchedaProdotto | HTML o PyQt6 | valutare quando si costruisce | --- ## Gotcha: path di rete (I:\ vs UNC) **Script utente / deploy / bat manuali:** usare sempre `I:\SOFTWARE\...` — i path UNC (`\\mediaset.it\share\...`) sono inaffidabili su DFS per operazioni interattive. **Daemon Frank in background:** preferire path **locali** (`C:\PYTHON_LOCAL\...`) — né `I:\` né UNC sono affidabili da processo background. Confermato su omdb_batch_enrich (2026-04-02, 2026-04-10). Fix: `C:\PYTHON_LOCAL\MyICR_Suite\sync_db\mediatrack.db` invece del path di rete. **In pratica:** - `deploy.bat`, script manuali, run.bat → `I:\` - `frank_jobs\*.bat` eseguiti dal daemon → `C:\PYTHON_LOCAL\...` dove disponibile --- ## Gotcha: MyICR_Suite headless da Frank `MyICR_Suite_builder.py` lanciato headless da Frank daemon crasha con `UnicodeEncodeError`. Fix: aggiungere `sys.stdout.reconfigure(encoding='utf-8')` all'avvio dello script. --- ## Protocollo: ambienti Python ### Due tier distinti **Tier 1 — Progetti deployati su macchine client (utenti non tecnici):** - `python\` embedded standalone inclusa nel progetto - "Copia cartella e funziona" — zero setup - Progetti: **MyICR_Suite** **Tier 2 — Progetti che girano solo su macchina A (via Frank o manualmente):** - Venv condiviso — **path locale, NON su Dropbox** - Attualmente in `C:\PYTHON_OLD\_runtimes\venv` (da ricostruire in posizione stabile post-migrazione) - Un solo venv per tutti — facile aggiungere pacchetti, zero ridondanza - Progetti: **Frank**, **DataHub_v2**, **ImdbUpdate**, **GemmaReport**, **ParquetToAccess**, **DbComparer** **Path da usare nei bat (da aggiornare dopo migrazione venv):** - `\Scripts\python.exe` — script CLI - `\Scripts\pythonw.exe` — daemon/GUI (no console) --- ## Snapshot legacy `C:\PYTHON_OLD\legacy_snapshot\` — copia read-only di `I:\SOFTWARE\SCHEDULATORE\INPUT` (11 file, ~1.6 GB, aggiornati al 2026-04-06). **Intoccabile** — fonte di verità per paralleli legacy vs parquet. Non va in git. --- ## Migrazione 2026-07-17 - `C:\PYTHON` rinominato in `C:\PYTHON_OLD` — non eliminare, contiene il venv e legacy_snapshot - `Dropbox\PYTHON\` spostato in `Dropbox\adrian\PYTHON\` — nuova home su Dropbox - `~/.claude/CLAUDE.md` eliminato — la catena ora parte da `Dropbox\adrian\CLAUDE.md` - **Pendente**: ricostruire venv in posizione stabile e aggiornare i bat di Frank