Files
roacontracte/CLAUDE.md
Marius Mutu 7cc3bff358 Initial: flux text FoxBin2Prg (git urmareste .??2 in-arbore, binarele VFP git-ignored)
Inrolare ROACONTRACTE conform COMUN\docs\inrolare-proiect-git-text.md:
- .gitignore/.gitattributes dupa modelul ROACONT (COMUN/ exclus, are repo propriu)
- 439 texte FoxBin2Prg generate in arbore (vc2/sc2/fr2/mn2/pj2/db2)
- Clase\registry.vcx ramane binar: memo .vct corupt (Error 41), nu se poate converti
- Clase\ferestre_contracte.vcx: text generat, roundtrip scutit (fara write-back)
- CLAUDE.md, docs/README.md, roa_sync.bat

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K
2026-08-03 01:51:36 +03:00

145 lines
7.8 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## What this is
ROACONTRACTE is a Visual FoxPro 9 desktop application (Romanian-language) for **contracte**
client/supplier contracts with rate (scadentar), facturare din contract, incasari, garantii si
alerte. Thick client: VFP source (`.prg`, `.scx`, `.vcx`, `.mnx`, `.frx`) compiled to
`roacontracte.exe`, on an Oracle backend reached through the shared `goExecutor`/`goConn`
pass-through objects (`gcS` = schema, primita in parametrul de lansare).
It is one product in the ROA suite built by ROA Romfast SRL; this directory
(`D:\ROA\ROACONTRACTE`) is one working copy inside the `D:\ROA` tree that holds the siblings
(ROACONT, ROAGEST, ROAIMOB, ROAFACTURARE, ...) plus the suite-wide shared library
`D:\ROA\COMUNROA`.
Cod, comentarii, meniuri si changelog sunt in romana — pastreaza limba la editari.
## Version control
Primarily an **SVN** working copy (`^/ROACONTRACTE/Trunk`, repository root
`http://svnroa:3001/svn/ROA`) — `svn status`, `svn diff`, `svn commit` raman fluxul legacy.
`COMUN\` e external SVN (`^/COMUN/Trunk`). A **git** mirror runs in parallel
(`gitea.romfast.ro:romfast/roacontracte.git`), synced from SVN; SVN stays the source of truth.
Git tracks the **FoxBin2Prg text versions** of the VFP binaries (`.vc2/.sc2/.fr2/.mn2/.pj2/.db2`),
generated in-tree next to each binary — not the binaries themselves. Refresh them with
`git_sync.ps1` at the start of every session and before any `git commit`:
```
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot D:\ROA\ROACONTRACTE
```
Sau, mai simplu, `roa_sync.bat` din radacina proiectului: face svn update -> git_sync -> commit
`sync SVN rN` pe `main` (proiect + COMUN) -> push.
Then search the `.??2` files in-tree with Grep, citing `file:line`. Write-back text->binary via
`txt2vcx.ps1` is supported **only for `.vc2`/`.sc2`**; `.frx/.mnx/.pjx/.dbf` are editable only in
the VFP IDE. See `D:\ROA\UTIL\foxbin2prg\CLAUDE.md` and `COMUN\docs\flux-editare-vfp-text.md`.
`COMUN/` is excluded from this repo's git — shared by every ROA product and versioned by its
**own git repo**, `gitea.romfast.ro:romfast/comun.git`. Run git commands for `COMUN/` from inside
that directory, and treat any change there as cross-project (fara `push --force`).
## Building / running
No CLI build. Compiled from the VFP 9 IDE: open `roaContracte.pjx`, then Project > Build.
Entry point is `Programe/roacontracte.prg` (`PARAMETERS tparam` — sir cu `;` trimis de launcher-ul
ROA Start: host, user, parola, idutil, idprogram, ..., an, luna, schema, idfirma; altfel intra pe
valorile de dezvoltare din cod).
`roacontracte.exe` refuza sa porneasca daca numele fisierului nu incepe cu `ROACONTRACTE`.
Startup-ul e procedural (nu `RoaApp`): `SET PATH` peste folderele proprii + `COMUN\*` + `..\COMUNROA\`,
zeci de `SET CLASSLIB/PROCEDURE ... ADDITIVE` (ordinea conteaza — inregistrarile ulterioare umbresc),
apoi `goApp = CREATEOBJECT("wzApplication")` (AppWizard, `COMUN\clase\appwiz.vcx`) cu
`goApp.cStartupMenu = meniuri\roacontracte.mpr` si `goApp.cStartupForm = COMUN\ferestre\frm_login.scx`.
Fisiere `.prg`/`.vcx` noi comune trebuie inregistrate acolo ca sa fie vizibile in aplicatie.
`config.fpw` da mediul de rulare; `versiune_db.txt` (`YYYY_MM_DD_NN`) e marcajul ultimei migrari DB.
Editeaza intotdeauna sursa, nu compilatul (`.FXP`/`.SCT`/`.VCT`/`.MPR`).
## Directory layout
`Programe/` logica de business proprie (`oproceduri_roacontracte.prg`, `oproceduri_roaclienti.prg`,
`oparteneri_contracte.prg`, `oproceduri_registretva.prg`, `oproceduri_preluari.prg`, `pmenu.prg`,
`refverif.prg`, `verifica.prg`) · `Clase/` `.vcx` proprii (`ferestre_contracte.vcx`,
`onom_clienti.vcx`, `roaclienti.vcx`, `ofundal*.vcx`, `outlook2003bar.vcx`) · `Ferestre/` formulare
(`frm_dg_*.scx` = paginile din datele generale ale contractului, `fundal.scx`, `startfirma.scx`) ·
`Meniuri/` (`roacontracte.mnx` = meniul de start, `rapIncasari.mnx`) · `Rapoarte/` `.frx`
(`rcontracte`, `rcontracte_centralizator`, `rRate`, `rrate_facturi`, `rRate_facturi_extins`,
`rincasari`, `rap_facturat_incasat`, `rctrrestdefact`, `ratedefacturat`, `ralerte`,
`fisa_contractului`) · `Grafice/`, `datemenu/`, `Locale/`, `Teste/` · `COMUN/` biblioteca partajata.
Ca la ROAGEST, o buna parte din logica efectiva vine din `COMUN\programe\` si `COMUN\clase\`
rezolvate prin `SET PATH` (login, nomenclatoare, parteneri, eFactura ANAF, listari, oracle).
## Domain quick reference
Obiecte Oracle uzuale (vezi `Programe/oproceduri_roacontracte.prg`): `vcontracte`,
`vcontracte_toate`, `vtipuri_contracte`, `vctr_scadentar` (ratele contractului),
`vctr_rate_facturi` (legatura rata-factura), `vctr_articole`, `vctr_selectii`,
`ctr_facturi_garantii`, `vireg_parteneri`/`ireg_parteneri`, `vnom_valute`, `vnom_sectii`,
`vatas_referinte` (atasamente), `vcrm_politici_preturi`, `vcrm_note_vanzari`.
TVA e sensibil la perioada documentului (19/9/5% inainte de 01.08.2025, 21/11% dupa) — foloseste
cota din perioada documentului, nu "cota curenta".
## Changelog convention
`changelog_roacontracte.txt`, blocuri de comentariu HTML, cea mai noua intrare **prima**:
```
<!--
DD/MM/YYYY
ROACONTRACTE - X.Y.Z
:modificare:
<ce s-a schimbat>
-->
```
Tag-uri: `:nou:`, `:modificare:`, `:eroare:`, `:adaugare:`. Se bumpeaza `MAJOR.MINOR.PATCH`
(seria curenta `2.3.x`). Intrarile sunt scurte, orientate spre utilizator: o singura intrare
consolidata per livrare, fara pasi intermediari sau detalii interne.
## Reguli de lucru si testare
**Inainte de orice modificare de cod sau testare, citeste `COMUN\docs\reguli_lucru.md`.**
Nu e optional si nu e doar context: contine regulile de livrare (diff ca fisier + aprobare
inainte de write-back), comentariile (max o linie), modificarile minime, harnessul de testare
headless si — la punctul 7 — lista de conventii obligatorii per zona atinsa (encoding cp1252 la
editarea `.vc2`/`.sc2`, UX formulare/griduri, `GO` pe `Recno()`, `goExecutor` + `ALTER TABLE`,
testare UI, export Oracle). Fisierul e index: urmeaza linkurile relevante pentru sarcina curenta.
Depanare detaliata: `COMUN\docs\depanare_testare_vfp.md`.
Foloseste **PowerShell**, nu Bash (bash.exe crapa pe aceste masini si lasa stackdump-uri).
## Mod de lucru: delegare catre subagenti + review inainte de commit
- **Orchestrare pe misiuni lungi**: niciodata un singur subagent care acumuleaza context pe multe
sarcini inlantuite — sesiunea principala orchestreaza subagenti proaspeti per sarcina (max
~200-250k tokens per subagent, apoi handoff + agent nou), cu handoff compact pe disc:
`COMUN\docs\orchestrare-subagenti.md`.
- **Delegare**: modificarile de volum/rutina (aplicarea unei propuneri aprobate din `docs/`,
editari pe versiunile text `.??2` + write-back, actualizari de documentatie, rulari de teste) se
delega catre **subagenti Sonnet care lucreaza in background** (Agent tool cu `model: sonnet`),
iar sesiunea principala doar orchestreaza si verifica rezultatele.
- **Fara commit fara review**: nu da commit (git sau svn) din proprie initiativa pe modificari de
cod — diff-ul se livreaza intai ca fisier in `docs/`, iar commit-ul vine dupa aprobare.
- **Curatenie inainte de commit**: `powershell -File COMUN\utile\curatenie.ps1` (`-DryRun` doar
listeaza) sterge patch-urile de review, handoff-urile, backup-urile `*.pre_runda*.bak` si
artefactele de test.
## Stil de raspuns
Raspunsuri scurte si concrete: stare (facut / de decis / urmeaza), cu fisier si linie. Fara
naratiune de proces, fara reluari. Detaliile lungi (dovezi, iesiri de test) se scriu in fisier si
se trimite link-ul.
## Project insights (docs/)
`docs/` tine notite scurte si concrete descoperite in timpul lucrului (fluxuri ascunse, capcane,
proceduri/tabele cheie) — vezi `docs/README.md`. Ofera-te proactiv sa actualizezi `docs/` cand
descoperi ceva neevident, ca sesiunile viitoare sa nu reinvestigheze.