Files
roaregistratura/CLAUDE.md
2026-09-16 13:41:34 +03:00

5.5 KiB

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):
& '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 <fișier> -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:
$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 '<expresie>' -CodeOnly   # hit-uri etichetate clasa.metoda, doar cod
powershell -ExecutionPolicy Bypass -File $s @c -Where '<fisier>.vc2:<linie>'  # cine deține această linie
powershell -ExecutionPolicy Bypass -File $s @c -Find '<nume>'                 # unde e DEFINIT
powershell -ExecutionPolicy Bypass -File $s @c -Class '<nume_clasa>'          # 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.

Regulile complete de lucru ROA (livrare, comentarii, modificari minime, testare, delegare): COMUN\docs\reguli_lucru.md. Punctul 7 ruteaza fiecare zona atinsa.

Backstop de rutare: cand atingi o zona de mai jos, incarca skill-ul care o detine (el are procedura si criteriile care blocheaza "gata"); docurile sunt doar referinta conditionata a skill-ului.

  • editezi .vc2/.sc2/.prg cu diacritice, cauti in .vcx/.scx, adaugi membri de clasa -> skill roa-vfp-text-edit
  • rulezi sau depanezi teste headless ori UI -> skill roa-vfp-headless-test
  • commit / svn update / roa_sync in COMUN -> skill roa-git-svn-commit
  • scrii sau publici scripturi de migrare Oracle, reexporti un pachet -> skill roa-oracle-migration
  • actualizarea ROA nu se termina sau tablespace plin -> skill roa-oracle-diagnostic
  • acces la un Oracle de productie (tunel SSH + TNS + DSN) -> skill roa-oracle-production-access
  • garzi pe valori NULL din Oracle in VFP -> skill roa-vfp-null-guards
  • GO pe un Recno() capturat sau primit ca parametru -> skill roa-vfp-go-recno
  • procedura PL/SQL cu SELECT ... INTO apelata din VFP (randuri pierdute tacut) -> skill roa-oracle-sqlexec-no-data