Changelog 2.11.7 (achizitie import: dialog Adauga factura, culori per document, valuta/curs per document editabile); docs: flux editare VFP mutat in COMUN/docs, curatenie drafturi/patch-uri

- changelog 2.11.7: nota porneste goala + dialog "Adauga factura", coloane
  reordonate/avansate vizibile, Valuta+Curs per document editabile in grila,
  buton "Urmator" + indicator de pas.
- docs: flux-editare-vfp-text.md redus la parametrii ROAGEST (fluxul comun in
  COMUN/docs); README/CLAUDE.md actualizate; sterse draft_M*/diff_*.patch si
  propuneri_ergonomie_import.md (implementat; M5 - totaluri per document - mutat
  in todo.txt, restul in istoricul git).
- todo.txt: punct nou M5; scos punctul obsolet cu persistenta bifei "Coloane
  avansate" (bifa a fost eliminata).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 13:13:39 +03:00
parent 2b9ac9132f
commit 0a464c99c6
8 changed files with 123 additions and 62 deletions

View File

@@ -45,7 +45,7 @@ For `.vcx`/`.scx`, code edits no longer require the VFP IDE — the flow is now:
3. Review the diff on the text file like any other source change.
4. Write back with `txt2vcx.ps1` (`D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1 -TextFile <path\to\file.vc2> -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest'`) — it regenerates and recompiles the binary in a staging folder, fidelity-checks it against the edited text, then copies it into the project only if that check passes.
`.mnx`/`.frx` stay **read-only** in this flow (menus still need GENMENU in the IDE; reports are too fragile to round-trip) — edit those in the VFP IDE as before. Targets under `COMUN\` need `-AllowComun` plus explicit approval, since a change there affects every ROA app. See `D:\ROA\UTIL\foxbin2prg\CLAUDE.md` for full details and `docs/flux-editare-vfp-text.md` for the ROAGEST-specific notes.
`.mnx`/`.frx` stay **read-only** in this flow (menus still need GENMENU in the IDE; reports are too fragile to round-trip) — edit those in the VFP IDE as before. Targets under `COMUN\` need `-AllowComun` plus explicit approval, since a change there affects every ROA app. See `D:\ROA\UTIL\foxbin2prg\CLAUDE.md` for full details, `COMUN\docs\flux-editare-vfp-text.md` for the shared per-round workflow (baseline backups, review patches, fidelity check), and `docs/flux-editare-vfp-text.md` for the ROAGEST-specific parameters.
## The COMUN shared framework

View File

@@ -1,4 +1,16 @@
<!--
15/07/2026
ROAGEST - 2.11.7
:nou:
Marfa > Achizitie import. Nota contabila porneste goala, iar facturile (principala, transport/taxe, DVI) se adauga prin formularul "Adauga factura": conturile si explicatia TVA propuse din sablon, curs propus, memorie DVI, validari; randurile raman editabile in grila.
Randurile notei sunt colorate pe documente (coloana "Doc"), coloanele au fost reordonate, iar cele rar folosite sunt afisate la sfarsitul grilei.
Valuta si cursul se inregistreaza per document: o factura in alta valuta decat cea principala ajunge in registrul jurnal cu valuta si cursul ei. Coloane noi "Valuta" si "Curs" in grila, editabile, cu oferta de recalculare a sumelor in lei la schimbarea cursului.
:modificare:
Marfa > Achizitie import. Butonul "Termin" al notei a devenit "Urmator" (fluxul continua cu articolele si verificarea); indicator de pas "1.Nota > 2.Articole > 3.Verificare".
-->
<!--
09/07/2026
ROAGEST - 2.11.6

View File

@@ -2,20 +2,16 @@
## Modificare cod VFP binar (.vcx/.scx) — flux write-back pe text
Din 07.2026 Claude aplică singur modificările pe `.vcx`/`.scx` prin fluxul text→bin
(`txt2vcx.ps1`, detalii în CLAUDE.md rădăcină și `docs/flux-editare-vfp-text.md`):
Din 07.2026 Claude aplică singur modificările pe `.vcx`/`.scx` prin fluxul text→bin.
Pașii per rundă (refresh cache, baseline `.pre_runda<N>.bak`, editare byte-safe CP1252,
patch de review, write-back cu fidelity-check) + capcanele: **`COMUN\docs\flux-editare-vfp-text.md`**;
parametrii ROAGEST: `docs/flux-editare-vfp-text.md`.
1. Claude investighează pe cache-ul text (`D:\ROA\_vfp_textcache\roagest`), propune modificarea
și **așteaptă acordul lui Marius pe abordare** înainte să editeze.
2. Refresh cache (`vcx2txt.ps1`), editare `.vc2`/`.sc2` **byte-safe** (PowerShell, encoding 1252,
conținut nou doar ASCII — nu Edit tool pe .vc2), apoi write-back cu `txt2vcx.ps1`
(fidelity-check obligatoriu; țintele din `COMUN\` cer `-AllowComun` + aprobare explicită,
și VFP IDE / roagest.exe complet închise — procesele reziduale țin lock pe binar).
3. Diff lizibil pentru review: text vechi regenerat din HEAD git (`vcx2txt.ps1 -Source`)
vs. cache-ul editat, `git diff --no-index` → fișier `.patch`. **Commit doar după ce Marius
confirmă pe diff și testează în IDE.** Editările de volum se deleagă la subagenți Sonnet
în background; sesiunea principală orchestrează și verifică.
4. După implementare: changelog, ștergerea fișierului de propunere/patch-ului, iar insight-urile
1. Claude investighează pe cache-ul text, propune modificarea și **așteaptă acordul lui Marius
pe abordare** înainte să editeze.
2. **Commit doar după ce Marius confirmă pe diff și testează în IDE.** Editările de volum se
deleagă la subagenți Sonnet în background; sesiunea principală orchestrează și verifică.
3. După implementare: changelog, ștergerea fișierului de propunere/patch-ului, iar insight-urile
durabile se mută în notițe `docs/flux-*.md` / `docs/pachet-*.md`.
Excepții rămase pe VFP IDE: `.mnx` (GENMENU) și `.frx` (fragile la round-trip) — pentru ele

View File

@@ -6,8 +6,8 @@ Notite concise despre structura interna a proiectului (fluxuri, pachete, tabele)
- [CLAUDE.md](CLAUDE.md) — modul de lucru Claude ↔ Marius (propuneri de cod pentru VFP IDE, acces Oracle direct).
- [flux-achizitie-import.md](flux-achizitie-import.md) — lantul achizitie import: gestiuni.vcx → achizitie_import → import_nota → import_nir → PACK_CONTAFIN; capcane (ptva bruta vs proc_tva, import_nota_original mort, 4427/401).
- [flux-editare-vfp-text.md](flux-editare-vfp-text.md) — editare directa pe cache-ul text (.vc2/.sc2) cu write-back prin txt2vcx.ps1, in loc de VFP IDE; limite (.mnx/.frx read-only, COMUN cu aprobare, staleness dupa sesiuni IDE).
- [propuneri_achizitie_import.md](propuneri_achizitie_import.md) — *temporar*: modificarile propuse (cu cod) pentru sesizarea achizitie import; se sterge dupa implementare.
- [flux-editare-vfp-text.md](flux-editare-vfp-text.md) — parametri ROAGEST pentru editarea pe cache text; fluxul comun (pasi per runda, capcane) e in `COMUN\docs\flux-editare-vfp-text.md`.
- [testare-vfp-mcp.md](testare-vfp-mcp.md) — testare vizuala automata: lansare `vfp9.exe DO roagest.prg` (fara rebuild) + interactiune prin `windows-mcp`; capcana focus furat de terminal.
- `local/` — notite neversionate (credentiale Oracle etc., in .gitignore).
Vezi si `COMUN\docs\oracle_export.md` (export surse PL/SQL, PACK_CONTAFIN.pck).

View File

@@ -53,3 +53,48 @@ Lanțul complet (descoperit la sesizarea „achiziție import", 07.2026):
de TVA se face prin SEEK în cursorul `cJtvaCol4427`.
Căutarea generică: `cauta_alfa()` (`COMUN\programe\cauta_alfa.prg`) → forma `cauta_alfa_form_plus`.
## Structura reală a șablonului `vnote_contabile` (verificat 11.07.2026)
Cursorul `introdc` NU pornește cu „2 linii" — se încarcă cu **toate** perechile-șablon din
`vnote_contabile` pentru `id_set`. Numărul de linii pe baza de dev (`MARIUSM_AUTO`):
**208 = 10 linii, 209 = 10, 220 = 10, 221 = 6**. Cele 10 linii ale setului de import (208) =
**5 perechi pre-alocate (bază+TVA) = 5 sloturi de document**:
| Pereche (ordine) | SCD/SCC bază | SCD/SCC TVA | Ce e |
|---|---|---|---|
| 1 (1-2) | 3028/401 | 4426/4427 | marfă CE 21% + TVA |
| 2 (3-4) | 3028/401 | 4426/4427 | slot repetat (gol) |
| 3 (5-6) | 3028/401 | 4426/4427 | slot repetat (gol) |
| 4 (7-8) | 3028/446 | 4426/446 | vamă/DVI (pe dev) |
| 5 (9-10) | 3028/446 | 4426/446 | slot repetat (gol) |
Model CONT2000: în loc să adaugi rânduri, ai **sloturi goale pre-alocate** pe care le completezi.
Factura principală = perechea 1 (2 linii); restul sunt sloturi pentru facturi suplimentare (3 marfă)
+ DVI (2). Un „document" = o pereche cu date.
**Corecție importantă (Marius, verificat pe bază reală de producție):** conturile 446 din setul 208
de pe dev **NU sunt reprezentative**. În realitate și DVI-ul vamă folosește **4426 = 401** (nu 446).
`vnote_contabile` e **configurabil per firmă**, deci șablonul variază — nu hardcoda conturile, ci
clonează perechea-șablon reală a setului. Practic: **un singur pattern de conturi** (bază 3028/401 +
TVA 4426/4427 sau 4426/401) acoperă și marfă, și DVI (DVI diferă doar prin partener/unde e plătit
TVA, nu prin conturi).
## DECIZIE 11.07.2026 — pivot la „Direcția A" (rescriere flux introducere)
Marius a decis să se **abandoneze modelul cu 10 sloturi pre-alocate**. Noul model (de implementat
într-o sesiune viitoare, e scop **M2**, mai mare decât runda 1 M1/M3/M6):
1. **`achizitie_import`**: `introdc` pornește **gol** (0 rânduri de document); se păstrează perechea-
șablon (bază+TVA, cu conturile reale din `vnote_contabile` ale setului) ca **sursă de clonare**.
Nu se mai încarcă cele 10 sloturi.
2. **Buton „Adaugă factură" + dialog (M2)**: clonează perechea-șablon, o completează cu datele
facturii, o adaugă în `introdc`. Se folosește **și pentru factura principală**, și pentru DVI
(radio-ul furnizor/DVI/fără schimbă doar partenerul/unde e plătit TVA, nu conturile).
3. **M1 (culori)**: rămâne cum e — fiecare factură adăugată = o pereche = un document = o culoare
(F1, F2, …), incremental, cheie `serie+nr+id_fdoc`. Codul M1 deja aplicat merge neschimbat pe
acest model.
Avertismente: atinge `COMUN` (blast radius: 22 `.pjx` referă `ointroduceri`) și **schimbă
comportamentul pentru toți userii de import** (nu mai văd sloturi pre-completate) — testare atentă,
dare în funcțiune deliberată.

View File

@@ -1,47 +1,13 @@
# Flux editare directă pe text pentru `.vcx`/`.scx`
# Editare .vcx/.scx pe text — parametri ROAGEST
Pe lângă căutare (`vcx2txt.ps1`), cache-ul text din `D:\ROA\_vfp_textcache\roagest\` poate fi acum
și **sursă de editare** pentru `.vcx`/`.scx`, scriind înapoi în binar cu `txt2vcx.ps1` — fără trecere
prin VFP IDE. Detalii complete (guard-uri, ordinea pașilor, teste) în
`D:\ROA\UTIL\foxbin2prg\CLAUDE.md`; aici doar partea relevantă pentru ROAGEST.
Fluxul comun (pasi, capcane): `COMUN\docs\flux-editare-vfp-text.md`. Specific ROAGEST:
## Pașii
1. Refresh cache (obligatoriu dacă a rulat vreo sesiune de IDE de la ultimul refresh — altfel
verificarea de staleness din `txt2vcx.ps1` refuză scrierea):
```powershell
& 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Project 'D:\ROA\ROAGEST\roagest.pjx' -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest' -Types vcx,scx,frx,mnx
```
2. Editează `.vc2`/`.sc2` direct în `D:\ROA\_vfp_textcache\roagest\`. Formatul e
**position-sensitive** (nu reformata/reflow liniile) și proprietățile sunt **alfabetizate** (o
proprietate nouă se inserează la locul ei alfabetic, nu la sfârșit).
3. Revizuiește diff-ul pe fișierul text ca pe orice altă modificare de cod.
4. Scrie înapoi în proiect:
```powershell
& 'D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1' -TextFile 'D:\ROA\_vfp_textcache\roagest\Clase\oavize.vc2' -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest'
```
Regenerează și compilează binarul într-un folder de staging, verifică fidelitatea (roundtrip
text→bin→text byte-identic) și abia apoi copiază `.vct`+`.vcx` (sau `.sct`+`.scx`) peste
binarele din proiect. Dacă orice pas eșuează, proiectul și cache-ul rămân neatinse.
## Limite
- `.mnx`/`.frx` rămân **doar pentru citire** — meniurile tot au nevoie de GENMENU în IDE ca să
regenereze `.mpr`, iar formatul `.frx` e prea fragil pentru round-trip. Editează-le în VFP IDE ca
până acum.
- Ținte sub `COMUN\` necesită `-AllowComun` **și** aprobare explicită — o modificare acolo afectează
toate aplicațiile ROA, nu doar ROAGEST.
- **După orice sesiune de IDE** rulează `vcx2txt.ps1` înainte de a edita text — staleness-ul se
verifică pe baza `mtime`, iar o sesiune de IDE (chiar și una care doar a deschis o clasă) poate
lăsa cache-ul în urmă față de binar.
- Fără backup-uri `.bak` lângă binarele din proiect — git e mecanismul de restore; scriptul ține o
copie de siguranță doar în folderul temp al rulării.
- **Liniile goale din interiorul metodelor nu sunt goale** în formatul `.vc2` — foxbin2prg le
regenerează cu indentarea curentă (ex. două TAB-uri într-un `PROCEDURE` de clasă). Dacă editarea
introduce linii complet goale, fidelity check-ul pică doar pe whitespace; fix: preia fișierul
`verify\*.vc2` din staging-ul păstrat la eșec (e forma canonică, semantic identică) peste cache
și reia write-back-ul.
- `vcx2txt.ps1/txt2vcx.ps1 -Project 'D:\ROA\ROAGEST\roagest.pjx' -ProjectRoot 'D:\ROA\ROAGEST'
-CacheRoot 'D:\ROA\_vfp_textcache\roagest'`
- procese de verificat inainte de write-back: `vfp9`, `roagest`
- patch-uri de review: `docs/diff_runda<N>_<subiect>.patch`
- capcana `*m:` patita aici pe `import_adauga_factura.recalc_tva` (07.2026)
- de ce nu se foloseste *Project > Build*: recompileaza toate `.vcx`/`.vct` din proiect (nu doar
`.fxp`-urile, ignorate oricum de git/svn) — antetul (timestamp compilare) si posibil p-code-ul
intern se rescriu si la librarii neatinse efectiv, aparand fals ca "modificate" in diff; de aici
fluxul text->bin punctual pe binarul vizat (07.2026)

37
docs/testare-vfp-mcp.md Normal file
View File

@@ -0,0 +1,37 @@
# Testare automata ROAGEST prin VFP IDE + MCP (windows-mcp)
Pentru verificare vizuala dupa modificari pe `.vc2`/`.sc2`, nu se porneste `roagest.exe`
(ar cere rebuild complet — vezi `flux-editare-vfp-text.md`), ci se lanseaza `vfp9.exe`
interpretat peste `Programe\roagest.prg`:
```powershell
Start-Process -FilePath "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" `
-ArgumentList '-c"D:\ROA\ROAGEST\config.fpw"','D:\ROA\ROAGEST\Programe\roagest.prg' `
-WorkingDirectory "D:\ROA\ROAGEST"
```
- Gate-ul de pornire (`gcNumeProgram = 'ROAGEST'` in `roagest.prg`) verifica
`JUSTSTEM(SYS(16,0))` — numele programului de la nivelul 0 al stivei, nu numele
procesului `.exe`. Rulat interpretat, `SYS(16,0)` = `roagest.prg`, deci gate-ul trece.
- Fereastra rezultata are titlul `ROA - Gestiuni` (setat din `NUMEPROGRAM`).
## Capcana: focus furat de terminal
Daca sesiunea Claude Code afiseaza output in timp ce comanda de lansare ruleaza,
fereastra terminalului/IDE-ului ramane in prim-plan si VFP porneste in fundal —
`Screenshot`/`Snapshot` din `windows-mcp` pot raporta "No windows found" desi procesul
si fereastra exista (verificabil cu `Get-Process vfp9 | Select MainWindowTitle`).
Fix: inainte de screenshot, adu explicit fereastra in prim-plan dupa titlu:
```
mcp__windows-mcp__App mode=switch name="ROA - Gestiuni"
```
apoi `Screenshot`. Nu te baza pe enumerarea implicita de ferestre a `windows-mcp` cand
ai lansat procesul chiar in runda curenta de comenzi.
## Curatare dupa test
Proces de omorat la final: `mcp__windows-mcp__Process mode=kill pid=<pid>` (gasit prin
`mode=list name=vfp9` sau `Get-Process vfp9`).

View File

@@ -29,4 +29,9 @@ INVENTAR MAGAZIN NOU
raport de gestiune - documentele importate intr-un inventar emise dupa inceperea inventarului sa apara inaintea inventarului
faza 2 write-back VFP: .mnx (cu pas GENMENU documentat) si .frx dupa ce testul de fidelitate le dovedeste stabile - excluse azi din txt2vcx.ps1
migrare text-as-source-of-truth in git (FoxBin2Prg workflow upstream) - de rediscutat cand SVN se retrage pentru COMUN
migrare text-as-source-of-truth in git (FoxBin2Prg workflow upstream) - de rediscutat cand SVN se retrage pentru COMUN
--- amanate din review /autoplan ergonomie import (10.07.2026) ---
dialog "Adauga factura": mod editare ("Modifica factura..." - dublu-click pe pereche, dialog precompletat) - dupa feedback de la utilizatori
linia de totaluri per document sub grila import_nota (M5 din propuneri_ergonomie_import.md - vezi istoricul git; semafor echilibru lei<->valuta si TVA=baza x cota)
preluare automata antet factura din e-Factura/XLS in dialogul de import (do_adauga_factura(toDlg) e deja populabil programatic)
persistenta draft la crash intre nota si articole (re-intrarea e tratata; draft-ul e alt proiect)