Injection di formule nei CSV (export di produzione e export dal browser) #22

Closed
opened 2026-09-21 20:14:47 +00:00 by Adriano · 3 comments
Owner

GRAVITÀ: media
FILE: src/backend/services/production_export_service.py:110-136 ; src/backend/api/routers/measurements.py:337-350 ; src/frontend/flask_app/static/js/csv-export.js:210-224
COSA: lot_number, serial_number, subtask.description scritti così come arrivano; il file è pensato per Excel (BOM). escapeCsvValue quota solo ;, \n, ".
INPUT: lot_number='=HYPERLINK("http://x","y")'.
VERIFICATO: script pytest → riga CSV 1,ST-PROD,A,1,"=HYPERLINK(""http://x"",""y"")",....

ORIGINE: revisione fable del 21/09/2026 su ramo V3.0.0, commit 8cc5e82. Documento completo: _output/2026-09-21-TieMeasureFlow-revisione.md su Wasabi.

GRAVITÀ: media FILE: src/backend/services/production_export_service.py:110-136 ; src/backend/api/routers/measurements.py:337-350 ; src/frontend/flask_app/static/js/csv-export.js:210-224 COSA: `lot_number`, `serial_number`, `subtask.description` scritti così come arrivano; il file è pensato per Excel (BOM). `escapeCsvValue` quota solo `;`, `\n`, `"`. INPUT: `lot_number='=HYPERLINK("http://x","y")'`. VERIFICATO: script pytest → riga CSV `1,ST-PROD,A,1,"=HYPERLINK(""http://x"",""y"")",...`. ORIGINE: revisione fable del 21/09/2026 su ramo `V3.0.0`, commit 8cc5e82. Documento completo: `_output/2026-09-21-TieMeasureFlow-revisione.md` su Wasabi.
Adriano added the bug label 2026-09-21 20:14:47 +00:00
Adriano added the assegnata:jeeg label 2026-09-21 20:22:58 +00:00
Author
Owner

⚡ jeeg — preso in carico 2026-09-21T20:22:59Z
ramo: lavoro/jeeg · capacità: docker, gpu, systemd

⚡ jeeg — **preso in carico** 2026-09-21T20:22:59Z ramo: `lavoro/jeeg` · capacità: docker, gpu, systemd
Author
Owner

ANALISI (passo 1) — ramo lavoro/jeeg, worktree ~/lavoro/TieMeasureFlow su jeeg, lotto A3+B2

MODIFICHE backend (A3): funzione unica neutralise_csv_cell(s) (in src/backend/services/production_export_service.py, importata da src/backend/api/routers/measurements.py): se la stringa, tolti gli spazi iniziali, comincia con =, +, -, @, TAB o CR → anteponi '. Applicala a TUTTI i campi testuali (lotto, seriale, descrizioni, nomi, codici), non ai numeri.
MODIFICHE frontend (B2): src/frontend/flask_app/static/js/csv-export.js escapeCsvValue — stessa regola, e quota anche i valori con \r.
TEST: lotto =HYPERLINK(...) → cella '=HYPERLINK(...); valore numerico negativo −1.25 nella colonna valore resta numero.

ANALISI (passo 1) — ramo `lavoro/jeeg`, worktree `~/lavoro/TieMeasureFlow` su jeeg, lotto A3+B2 MODIFICHE backend (A3): funzione unica `neutralise_csv_cell(s)` (in src/backend/services/production_export_service.py, importata da src/backend/api/routers/measurements.py): se la stringa, tolti gli spazi iniziali, comincia con `=`, `+`, `-`, `@`, TAB o CR → anteponi `'`. Applicala a TUTTI i campi testuali (lotto, seriale, descrizioni, nomi, codici), non ai numeri. MODIFICHE frontend (B2): src/frontend/flask_app/static/js/csv-export.js `escapeCsvValue` — stessa regola, e quota anche i valori con `\r`. TEST: lotto `=HYPERLINK(...)` → cella `'=HYPERLINK(...)`; valore numerico negativo −1.25 nella colonna valore resta numero.
Author
Owner

Soluzione

ESITO: fatto
COSA: neutralise_csv_cell (backend, export di produzione ed export misure) e escapeCsvValue (csv-export.js): le celle di testo che iniziano con = + - @ TAB CR ricevono un apice; i numeri negativi restano numeri.
COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): c0583da; 0dce229
PROVA: uv run --extra server --extra client --extra dev pytest -q → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).

**Soluzione** ESITO: fatto COSA: `neutralise_csv_cell` (backend, export di produzione ed export misure) e `escapeCsvValue` (csv-export.js): le celle di testo che iniziano con = + - @ TAB CR ricevono un apice; i numeri negativi restano numeri. COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): c0583da; 0dce229 PROVA: `uv run --extra server --extra client --extra dev pytest -q` → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).
Adriano removed the assegnata:jeeg label 2026-09-21 21:56:27 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#22