Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ La nota *"se i numeri sono questi cosa devo fare per crescere?"* suggerisce un l
| **7** | Analisi & Simulazioni (§10.8) | Scenario what-if salvabile e confrontabile | ⬜ Prossima |
| **8** | Sync Consulente↔Azienda via Tailscale (§6) + status bar (§7) | Due installazioni reali che si scambiano dati | ⬜ |
| **9** | Import Excel avanzato: tolleranza a varianti di formato tra clienti/periodi (§11.1) | Import robusto su più file Excel reali diversi tra loro | ⬜ |
| **10** | Installer offline (electron-builder) per Consulente e Azienda | `.exe` funzionanti, Tailscale bundled | 🟡 **Parziale**: `.exe` installabile, portable e demo funzionanti. Mancano le due varianti separate e Tailscale bundled, che hanno senso solo dopo la Fase 8. **Decisione del cliente (2026-09-16): nessuna release fino a codice finito; alla fine una sola release con tre eseguibili — installer, portable, demo** |
| **10** | Installer offline (electron-builder) per Consulente e Azienda | `.exe` funzionanti, Tailscale bundled | 🟡 **Parziale**: `.exe` installabile, portable e demo funzionanti. Mancano le due varianti separate e Tailscale bundled, che hanno senso solo dopo la Fase 8. **Regola del cliente (2026-09-16): una release a ogni aggiornamento importante, sempre con i tre eseguibili — installer, portable e demo** (`npm run dist` e `npm run dist:demo`). La prima così è la v0.0.5, con le Fasi 5 e 6 |
| **11+** | Integrazioni Fase futura: connettore IRIS, Cassetto Fiscale, Open Banking, pianificazione fiscale, marginalità multi-dimensionale, assistente numeri | Una alla volta, dopo validazione col cliente | ⬜ |

### 13-bis. Stato alla fine della sessione 1 (Fasi 0 → 4)
Expand Down Expand Up @@ -506,6 +506,16 @@ Verificato con i numeri da manuale: 12.000 € al 6% in 12 rate mensili danno la

**Da fare in Fase 7**: Analisi & Simulazioni (§10.8), che ora ha tutti i motori sotto: conto economico, circolante, tesoreria e finanziamenti.

**Versione 0.0.5 — Fasi 5 e 6 pubblicate** con i tre eseguibili. Collaudo fatto sugli eseguibili, non sul codice:

- **Demo da zero**: `DaProdFinanza-Demo-0.0.5-portable.exe --user-data-dir=<cartella temporanea>`. Il flag di build della demo ora cede a uno `--user-data-dir` esplicito (switch standard di Chromium), così un primo avvio si prova senza toccare la demo già presente. Verificati 25 periodi, 23 scadenze, 3 istituti, 4 linee, 3 finanziamenti, DSCR, note del circolante.
- **Demo aggiornata**: una demo della 0.0.4 riceve migrazioni 004-005, tesoreria e banche al primo avvio, con i bilanci invariati.
- **Portable normale da zero**: parte dal primo avvio, nessun dato di esempio, nessuna striscia demo; un'azienda senza bilancio ha tesoreria e banche vuote ma funzionanti.

⚠️ **Nota per chi sviluppa da Claude desktop su Windows**: l'app è un pacchetto MSIX, e i processi che lancia vedono `%APPDATA%` *virtualizzata* (`%LOCALAPPDATA%\Packages\Claude_…\LocalCache\Roaming`) sovrapposta a quella vera. Una cartella "DaProdFinanza Demo" può quindi esistere due volte, con chiavi diverse, e rinominarla da lì non fa quello che sembra. Per le prove da zero si usa `--user-data-dir`, mai rinominare le cartelle dati.

Corretta anche la grammatica delle note automatiche ("Magazzino in calo…: libera liquidità").

---

## 14. Punti aperti
Expand Down
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ collegamento fra i due programmi.
| 6 | Banche e finanziamenti | ✅ Fatta |
| 7 | Analisi e simulazioni | ⬜ Prossima |
| 8-9 | Collegamento fra i due programmi | ⬜ |
| 10 | I tre eseguibili finali: installer, portable, demo | 🟡 Già provati, si pubblicano a codice finito |
| 10 | Eseguibili: installer, portable, demo | 🟡 Pubblicati a ogni aggiornamento importante; mancano le varianti Consulente/Azienda |

La roadmap completa, con il dettaglio di cosa c'è dentro ogni fase, è in
[`AGENTS.md` §13](./AGENTS.md).
Expand All @@ -201,9 +201,14 @@ consulente con **`cammo` / `1234`**, oppure come azienda con **`Pizzeria DaProd`
`1234`**. I suoi dati restano in una cartella a parte e non si mescolano mai con
quelli di un'installazione vera.

Per usarlo davvero, sempre dalla pagina **[Releases](https://github.com/cammo22/DaProdFinanza/releases)**:
`DaProdFinanza-Setup-x.y.z.exe` per installarlo, oppure la versione *portable* che si
lancia e basta. Windows a 64 bit.
Ogni versione sulla pagina **[Releases](https://github.com/cammo22/DaProdFinanza/releases)**
ha tre file, tutti per Windows a 64 bit:

| File | A cosa serve |
|---|---|
| `DaProdFinanza-Demo-x.y.z-portable.exe` | Provarlo con i dati di esempio |
| `DaProdFinanza-Setup-x.y.z.exe` | Installarlo per usarlo davvero |
| `DaProdFinanza-x.y.z-portable.exe` | Usarlo davvero senza installare niente |

Non sono ancora firmati con un certificato, quindi al primo avvio Windows mostra un
avviso: *Ulteriori informazioni → Esegui comunque*. Poi il programma chiede di creare
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "daprodfinanza",
"version": "0.0.4",
"version": "0.0.5",
"description": "Gestionale desktop di controllo di gestione per consulenti finanziari aziendali",
"main": "./out/main/index.js",
"author": "DaProdProduzioni",
Expand Down
6 changes: 5 additions & 1 deletion src/main/build-flags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ export const DEMO_BUILD: boolean = __DEMO_BUILD__
*
* Questo modulo è il primo import di `index.ts`, così la cartella è già
* spostata prima che chiunque legga `userData`.
*
* Un `--user-data-dir` esplicito vince: è lo switch standard di Chromium, e
* serve a provare un primo avvio da zero in una cartella usa e getta senza
* toccare la demo già presente.
*/
if (DEMO_BUILD) {
if (DEMO_BUILD && !app.commandLine.hasSwitch('user-data-dir')) {
app.setPath('userData', join(app.getPath('appData'), 'DaProdFinanza Demo'))
}
25 changes: 25 additions & 0 deletions src/shared/engine/treasury.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,28 @@ describe('capitale circolante', () => {
])
})
})

describe('note del circolante: grammatica', () => {
it('il verbo si accorda con la voce', () => {
const base: WorkingCapitalSnapshot = {
creditiCommerciali: 100_00,
magazzino: 100_00,
altriCrediti: 0,
debitiFornitori: 0,
altriDebitiCorrenti: 0,
capitaleCircolanteNetto: 200_00,
dso: null,
dio: null,
dpo: null,
ccc: null
}
const testi = workingCapitalNotes({
current: { ...base, creditiCommerciali: 150_00, magazzino: 50_00 },
previousYear: base
}).map((n) => n.text)
expect(testi).toEqual([
"Crediti commerciali in aumento del 50% sullo stesso periodo dell'anno scorso: assorbono più liquidità.",
"Magazzino in calo del 50% sullo stesso periodo dell'anno scorso: libera liquidità."
])
})
})
22 changes: 13 additions & 9 deletions src/shared/engine/working-capital.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,28 +163,32 @@ export function workingCapitalNotes(input: NoteInput): WorkingCapitalNote[] {
nome: string
/** Un aumento è un assorbimento di cassa (attivo) o una fonte (passivo). */
attivo: boolean
/** Per accordare il verbo della nota. */
plurale: boolean
}[] = [
{ key: 'creditiCommerciali', nome: 'Crediti commerciali', attivo: true },
{ key: 'magazzino', nome: 'Magazzino', attivo: true },
{ key: 'altriCrediti', nome: 'Altri crediti', attivo: true },
{ key: 'debitiFornitori', nome: 'Debiti verso fornitori', attivo: false },
{ key: 'altriDebitiCorrenti', nome: 'Altri debiti correnti', attivo: false }
{ key: 'creditiCommerciali', nome: 'Crediti commerciali', attivo: true, plurale: true },
{ key: 'magazzino', nome: 'Magazzino', attivo: true, plurale: false },
{ key: 'altriCrediti', nome: 'Altri crediti', attivo: true, plurale: true },
{ key: 'debitiFornitori', nome: 'Debiti verso fornitori', attivo: false, plurale: true },
{ key: 'altriDebitiCorrenti', nome: 'Altri debiti correnti', attivo: false, plurale: true }
]
for (const c of componenti) {
const pct = deltaPercent(current[c.key], previousYear[c.key])
if (pct === null || Math.abs(pct) < s.percento) continue
const su = pct > 0
const verbo = (plurale: string, singolare: string): string =>
c.plurale ? plurale : singolare
notes.push({
subject: c.key,
tone: 'neutral',
text: `${c.nome} ${su ? 'in aumento' : 'in calo'} del ${Math.round(Math.abs(pct))}% sullo stesso periodo dell'anno scorso${
c.attivo
? su
? ': assorbono più liquidità.'
: ': liberano liquidità.'
? `: ${verbo('assorbono', 'assorbe')} più liquidità.`
: `: ${verbo('liberano', 'libera')} liquidità.`
: su
? ': finanziano una parte maggiore del circolante.'
: ': finanziano una parte minore del circolante.'
? `: ${verbo('finanziano', 'finanzia')} una parte maggiore del circolante.`
: `: ${verbo('finanziano', 'finanzia')} una parte minore del circolante.`
}`
})
}
Expand Down