CLAUDE.md: ghid de proiect pentru agenti, cu trimitere la regulile comune ROA

This commit is contained in:
2026-08-02 10:55:06 +03:00
parent ce9ec394df
commit 8857e8fedf

113
CLAUDE.md Normal file
View File

@@ -0,0 +1,113 @@
# CLAUDE.md
Ghid pentru agenti (Claude Code / Jcode) care lucreaza in acest repo.
## Ce este
FLORA2ROA e o aplicatie Visual FoxPro 9 care importa facturile si vanzarile din **Fidelio**
(hotel, XML) si **BIZ** (restaurant, XML) si genereaza note contabile in **ROA** (Oracle).
Un singur formular, `frm_import.scx`, face tot fluxul: citeste XML-urile din interval,
completeaza nomenclatorul de parteneri, construieste notele si le scrie in ROA.
Radacina: `D:\PROIECTE\FLORA\FLORA2ROA`. Nu are folder `COMUN\` (doar `comun.h` local), deci
scripturile partajate ROA au echivalente locale in `Teste\`.
## Reguli de lucru: OBLIGATORIU inainte de orice modificare
**Citeste `D:\ROA\ROACONT\COMUN\docs\reguli_lucru.md`.** Nu e context optional, e contractul de
livrare. Ce se incalca cel mai usor daca nu-l citesti:
- **Nu se comite fara aprobare.** Livrezi diff ca FISIER (`docs\diff_runda<N>_<subiect>.patch`),
iar write-back-ul in binar si commit-ul se fac dupa ce utilizatorul aproba. Patch-urile de
review nu se comit niciodata (sunt in `.gitignore`).
- **Comentarii minime, fara jurnal.** O linie, descriind comportamentul CURENT. Interzis inline:
istoricul modificarii ("inlocuieste...", "nu mai depinde de..."), nume de agent, referinte la
runde/decizii. Istoricul sta doar in antetul fisierului, cumulativ, semnat de om.
- **Modificari minime**: doar ce s-a cerut, fara refactorizari din oficiu.
- Punctul 7 din acel fisier e un index de conventii per zona atinsa (encoding cp1252, UX
formulare, `GO` pe `Recno()`, `goExecutor` + `ALTER TABLE`, testare UI, export Oracle).
## Documentatia proprie a proiectului
- `docs\depanare_testare_flora2roa.md` - harnessul de testare headless, ce contine `Teste\`,
comenzile uzuale si capcanele confirmate aici. **De citit inainte de a rula sau scrie teste.**
- `docs\flux_git_flora2roa.md` - fluxul git + SVN, ce urmareste fiecare, `roa_sync.bat`.
## Versionare
**SVN** e sursa de adevar, inclusiv pentru binarele VFP. **git** urmareste versiunile TEXT
(`.sc2`, `.pj2`) generate de FoxBin2Prg in arbore, plus `.prg`, `Teste\`, `docs\`. Binarele sunt
git-ignored, ca diff-urile sa fie lizibile. La inceput de sesiune: `roa_sync.bat`.
`svn commit` (care atinge binarele) se face **doar cu acordul explicit al utilizatorului**.
## Editarea formularului
`frm_import.scx` se editeaza pe text, byte-safe in Windows-1252:
```powershell
powershell -ExecutionPolicy Bypass -File Teste\text_din_bin.ps1 # binar -> frm_import.sc2
# editezi frm_import.sc2 cu [IO.File]::ReadAllText/WriteAllText + GetEncoding(1252)
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile frm_import.sc2
powershell -ExecutionPolicy Bypass -File Teste\recompileaza_binare.ps1
```
Ultimul pas nu e optional: write-back-ul reface `.scx/.sct` fara cod obiect, deci formularul
ruleaza fara `#INCLUDE "comun.h"` si constantele (`CT_SUCCES`) crapa in RUNTIME, desi
verificarea de sintaxa trece.
## Testare
Nu exista IDE in flux. Totul headless, din PowerShell:
```powershell
powershell -ExecutionPolicy Bypass -File Teste\ruleaza_teste.ps1 # suita + sinteza
powershell -ExecutionPolicy Bypass -File Teste\verifica_sintaxa.ps1 # dupa orice editare .prg
```
Un `.fxp` vechi ascunde modificarile din `.prg`: daca un test da acelasi rezultat dupa o
corectie evidenta, sterge `.fxp`-ul si reia.
## Cod
- Punct de intrare `main.prg`; `myutils.prg` = biblioteca de functii utilitare; `capp/app/myapp.prg`
= obiectele globale (`goApp`, `goConn`, `goExecutor`, `goLog`).
- Constantele din `comun.h` (`CT_SUCCES = 1`, `CT_INSUCCES`) sunt conventia de retur.
- Cod si mesaje in **romana, fara diacritice** (fisierele sunt cp1252).
- Functiile utilitare partajate se copiaza din `D:\ROA\ROACONT\COMUN\programe\oproceduri_comune.prg`,
nu se rescriu.
## Reguli de domeniu (contabil) de stiut
- In ROA, `RO12345678` (platitor de TVA) si `12345678` sunt **doi parteneri diferiti**: prefixul
`RO` se pastreaza exact cum vine din import si nu se adauga niciodata automat.
- La D394/D406 o **persoana fizica** poate fi raportata fara CNP, deci un CNP invalid se goleste.
O **persoana juridica** trebuie sa aiba cod fiscal: codul ei nu se sterge niciodata, ca eroarea
sa fie semnalata la validarea declaratiei si corectata la sursa, in Fidelio.
- Algoritmul romanesc de validare (CNP/CUI) nu se aplica partenerilor straini; codurile lor pot fi
si numai din cifre, de orice lungime.
## Changelog
`changelog_flora2roa.txt`, blocuri de comentariu HTML, cel mai nou primul:
```
<!--
DD/MM/YYYY
FLORA2ROA - X.Y.Z
:modificare:
Ce vede utilizatorul.
-->
```
Taguri: `:nou:`, `:modificare:`, `:eroare:`. Text **pentru utilizator**, scurt, netehnic, o fraza
per idee. Erorile introduse si reparate in aceeasi versiune nelivrata nu se trec: `:eroare:` e
doar pentru ce a fost in productie. La bump de versiune se actualizeaza si `flora2roa.txt`
(fisierul pe care `update.bat` il compara cu cel de pe server).
## Stil de raspuns
Scurt si concret. Ce e gata (fisier:linie), ce urmeaza, ce trebuie decis. Fara naratiunea
drumului pana la rezultat, fara reluari, fara justificari necerute. Detaliile lungi (dovezi,
iesiri de test) se scriu in fisier si se trimite link.