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
145 lines
7.8 KiB
Markdown
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.
|