# 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_.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: ``` ``` 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.