Files
roacontracte/CLAUDE.md
Marius Mutu 50c98bb951 CLAUDE.md: aliniere cu ROACONT/ROAGEST
Adus din CLAUDE.md-urile celorlalte proiecte: branching git (main = doar sync SVN rN,
claude/<subiect> pentru lucru), curatare orfani + limitele global-ignores, regula ca o
modificare doar-text comisa in git se pierde fara write-back + svn commit, regula de
continut a changelog-ului, formatul obligatoriu al raspunsului si skill routing.

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

11 KiB

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.

git_sync converteste intr-un staging temp si copiaza inapoi doar textul (binarele din working copy-ul SVN nu sunt atinse niciodata), continua peste esecurile per fisier si iese cu cod nenul daca a esuat ceva: nu comite cat timp git_sync raporteaza esecuri neexplicate.

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 si COMUN\docs\flux-editare-vfp-text.md.

Curatare orfani: la fiecare rulare completa git_sync sterge textul .??2 al carui binar a disparut din SVN si raporteaza restul (ex. stub-uri de test doar-git, fara binar) fara sa le stearga.

SVN ignora fisierele .??2 prin global-ignores din configul local (%APPDATA%\Subversion\config, [miscellany]), impreuna cu *.dbf.cfg. Limitare: global-ignores acopera doar fisierele neversionate — daca un .??2 ajunge svn add-ed, scoate-l cu svn rm --keep-local.

O modificare facuta doar in text si comisa in git, fara write-back in binar si fara svn commit, se pierde la urmatorul git_sync (textul se regenereaza din binar). Ordinea corecta: text -> txt2vcx.ps1 -> svn commit -> sync git.

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).

Branching (git)

Doua benzi in oglinda git: main primeste DOAR commit-uri sync SVN rN, facute din stare curata (imediat dupa svn update, inainte de lucru local); Claude lucreaza pe branch claude/<subiect> si comite doar acolo, ca git diff main..claude/<subiect> sa arate exact si numai munca lui. Branch-ul se inchide dupa ce modificarile intra in SVN (svn commit facut de utilizator). Model complet: COMUN\docs\fluxul_svn_git.md.

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: (functie noua), :modificare: (schimbare de comportament), :eroare: (corectie), :adaugare:. Se bumpeaza MAJOR.MINOR.PATCH (seria curenta 2.3.x).

Regula de continut: changelog-ul e pentru utilizatori — se scrie doar ce vede utilizatorul, scurt si compact. O singura intrare consolidata per livrare (versiunea o da Marius), fara pasi intermediari, runde sau mecanisme interne; erorile introduse si reparate in aceeasi versiune nelivrata nu se trec (clientul nu le-a vazut) — intrarea versiunii curente se rescrie, nu se acumuleaza.

Comentariile de modificare in cod urmeaza conventia *!* DD.MM.YYYY + autor + descriere scurta, direct deasupra codului schimbat.

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 — Marius vrea intai sa vada diff-ul, ca fisier in docs/. Pentru binarele VFP (.vcx/.scx) diff-ul lizibil se face pe forma text .vc2/.sc2 regenerata cu git_sync.ps1, inainte de write-back cu txt2vcx.ps1.
  • Curatenie inainte de commit: powershell -File COMUN\utile\curatenie.ps1 (-DryRun doar listeaza) sterge patch-urile de review, handoff-urile/planurile de runda, backup-urile *.pre_runda*.bak si artefactele de test. Faptul ca sunt in .gitignore nu le scuteste.

Stil de raspuns: scurt si concret

Marius vrea raspunsuri clare, concise, fara vorbarie. Regula, nu preferinta.

  • Starea si ce urmeaza, nu povestea. Ce e gata, ce e stricat, ce trebuie decis, ce urmeaza — in liste scurte, cu fisier si linie. Fara reconstituirea drumului pana la rezultat.
  • Fara naratiune de proces: ce a raportat fiecare agent, cine ce a corectat, cum au fost coordonate benzile. Intra in docs/, nu in raspuns.
  • Fara laude si fara reluari. Nu repeta ce s-a spus deja in conversatie.
  • Detaliile tehnice lungi (dovezi, iesiri de test, metodologie) se scriu in fisier si se trimite la el, nu se copiaza in raspuns.

Formatul obligatoriu al raspunsului, in aceasta ordine, maxim cateva randuri fiecare:

  1. Am facut: ce e gata (fisier:linie).
  2. Urmeaza: ce fac mai departe.
  3. De la tine: intrebarea, clar si simpla, cu recomandarea mea.

Skill routing

When the user's request matches an available skill, invoke it via the Skill tool. When in doubt, invoke the skill.

  • Product ideas/brainstorming -> /office-hours · Strategy/scope -> /plan-ceo-review
  • Architecture -> /plan-eng-review · Full review pipeline -> /autoplan
  • Bugs/errors -> /investigate · Code review/diff check -> /review
  • Ship/deploy/PR -> /ship or /land-and-deploy
  • Save progress -> /context-save · Resume context -> /context-restore

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.