# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## What this is ROAREGISTRATURA este aplicația VFP9 de **registratură** din suita ROA (ROA Romfast SRL), frate cu ROAGEST/ROACONT/ROAACNPRO din `D:\ROA`. Proiectul propriu este `roaRegistratura.pjx`; framework-ul partajat este subfolderul `COMUN\` (svn:external, comun tuturor aplicațiilor ROA). Convențiile generale (build în VFP9 IDE, `.prg` = sursă / binare VFP editate prin fluxul text, changelog `changelog_roaRegistratura.txt`) sunt aceleași ca la ROAGEST — vezi `D:\ROA\ROAGEST\CLAUDE.md` ca referință de suită. ## Version control: git alongside SVN Git rulează în paralel cu SVN-ul legacy, nu îl înlocuiește. SVN rămâne sursa "vie" (mai ales pentru `COMUN/`), sincronizat manual către git. - Repo-ul principal (rădăcina acestui folder) e propriul lui `.git`, remote `git@gitea.romfast.ro:romfast/roaregistratura.git`. **Flux text FoxBin2Prg în-arbore**: git urmărește DOAR versiunile text `.??2` (`.vc2`/`.sc2`/`.fr2`/`.mn2`/`.pj2`/`.db2`…) generate lângă binare; binarele VFP sunt git-ignored, iar SVN le ignoră pe cele text (global-ignores pe `.??2`). - `COMUN/` are propriul `.git` separat, remote `git@gitea.romfast.ro:romfast/comun.git` — **același repo partajat de toate aplicațiile ROA**. O modificare împinsă acolo afectează toate proiectele; fără `push --force` fără aprobare explicită. - Refresh text înainte de orice căutare/editare/commit (și după orice sesiune VFP IDE): ```powershell & 'D:\ROA\UTIL\foxbin2prg\git_sync.ps1' -ProjectRoot 'D:\ROA\ROAREGISTRATURA' -DbfList @('datemenu\Vechi\*.dbf','Grafice\DKCONTRL.DBF','Programe\Vechi\genhtml.dbf','COMUN\clase\Locale\*.dbf','COMUN\datemenu\*.dbf','COMUN\datemenu\xold\*.dbf','COMUN\Drepturi utilizatori\*\*.dbf','COMUN\utile\GridExtras\gridextras.dbf','COMUN\utile\ListProperty\lproperty.dbf','COMUN\utile\hpdf\*.dbf','COMUN\utile\hpdf\ReportOutput\*.dbf') ``` - Eșec cunoscut `git_sync`: `Clase\registry.vcx` (copie FFC din 2008, memo `.vct` corupt — Error 41 la bin→text). Nereferențiat de proiect (`.pj2` folosește `comun\clase\registry.vcx`); rămâne binar netracked, doar `registry.h` e în git. - Editare cod în `.vcx`/`.scx`: editezi textul `.vc2`/`.sc2` (format pozițional, byte-preserving — nu Edit/Write UTF-8, doar PowerShell CP1252/raw bytes), apoi write-back cu `txt2vcx.ps1 -TextFile -ProjectRoot 'D:\ROA\ROAREGISTRATURA'`. `.frx/.mnx/.lbx/.pjx/.dbc/.dbf` rămân doar-citire (editare în IDE). Ținte sub `COMUN\` cer `-AllowComun` + aprobare explicită. Detalii: `D:\ROA\UTIL\foxbin2prg\CLAUDE.md` și `COMUN\docs\flux-editare-vfp-text.md`. - **Cine deține un hit**: Grep nu poate spune din ce clasă/metodă vine un hit din `.vc2` (header-ul clasei poate fi la mii de linii deasupra, iar ~2/3 din fișier e proprietăți/metadate). `vfp_symbols.ps1` indexează intervalul de linii al fiecărei clase/metode/proceduri și etichetează hit-urile cu proprietarul — folosește-l înainte de orice editare `txt2vcx.ps1` ca să afli intervalul exact al metodei pe care o modifici. Valorile implicite țintesc ROAACNPRO, deci trimite mereu căile acestui proiect: ```powershell $s = 'D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1' $c = @('-CacheRoot', 'D:\ROA\ROAREGISTRATURA', '-ProjectRoot', 'D:\ROA\ROAREGISTRATURA', '-IndexFile', 'D:\ROA\_vfp_textcache\roaregistratura\_symbols.tsv') powershell -ExecutionPolicy Bypass -File $s @c -Grep '' -CodeOnly # hit-uri etichetate clasa.metoda, doar cod powershell -ExecutionPolicy Bypass -File $s @c -Where '.vc2:' # cine deține această linie powershell -ExecutionPolicy Bypass -File $s @c -Find '' # unde e DEFINIT powershell -ExecutionPolicy Bypass -File $s @c -Class '' # lanțul de moștenire + metode ``` Indexul (`_symbols.tsv`) se reconstruiește singur când textul e mai nou, deci reîmprospătează textul întâi — nu vede editările din IDE neconvertite. Ghid complet: `COMUN\docs\cautare_vcx_vct.md`. ## Reguli de lucru si testare Înainte de orice modificare de cod sau testare, citește `COMUN\docs\reguli_lucru.md` (obligatoriu — reguli de livrare, diff ca fișier + aprobare înainte de write-back, convenții per zonă). Fără commit fără review: Marius vede întâi diff-ul.