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

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

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.