Commit Graph

23 Commits

Author SHA1 Message Date
20323d22b3 fix: F4 detalii ANAF pe formularul de cautare partener fara campul nume
Nvl() evalueaza ambele argumente, deci .nume era citit chiar cand cursorul avea
doar denumire - eroare "Variable 'NUME' is not found". Inlocuit cu Iif() pe
Type() in Detalii si VerificaAlegere.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K
2026-08-02 12:20:07 +03:00
974716fd85 todos 2026-08-02 11:51:25 +03:00
f789ace574 docs: numerotarea scripturilor de migrare si ce intra in versiune_db.txt
Secventa NN e unica pe zi, comuna tuturor prefixelor (ff/co/sys/ris/rf). In versiune_db.txt
intra doar versiunea ultimului script ff_, pentru ca programele se conecteaza pe schema
firmei, nu pe CONTAFIN_ORACLE.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K
2026-08-02 11:42:57 +03:00
4342aae78c TODOS 2026-08-02 01:46:57 +03:00
859e67e874 Cache ANAF pe ISTORIC_CODURI_FISCALE: verificare din memorie, plasa la tacere ANAF
Verificarile de partener nu mai depind exclusiv de raspunsul ANAF: se citeste
intai cache-ul din ISTORIC_CODURI_FISCALE (mutat in CONTAFIN_ORACLE), cu
provenienta afisata pe ecrane (sursa / data_sursa) si cu plasa de siguranta
cand ANAF tace. Ordinea cache/ANAF e configurabila; cache-ul expira.

- programe/validare.prg: verificare single si pe loturi peste cache, contract
  404 separat de caderea de serviciu, expirarea cache-ului, corectii la
  verdictul pe firma si la etichetarea CACHE_INDISP.
- programe/ocautare.prg: plasa de siguranta si banda de provenienta la cautarea
  de partener.
- programe/oproceduri_comune.prg: VERIFICA_RTVAI_DATA citeste si cache-ul.
- clase/overificari.vc2: propagarea provenientei in interfata.
- utile/Teste/: harness-uri de testare headless - echivalenta cache/ANAF pe 200
  de coduri reale, marginile pe inactiv si TVA la incasare, mock batch ANAF,
  baseline D394 si sondele de diagnostic ANAF.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JCzVWfqscv1xyo5uvJiWiW
2026-08-02 01:33:18 +03:00
832fea4913 achizitie import: TVA DVI cu valuta proprie, discount financiar, cote multiple
- TVA-ul de pe DVI poate avea valuta si curs proprii, diferite de ale facturii
  (rand "protejat": rand_dvi/valuta_proprie pe introdc, sparge_tva_protejat).
- Discount financiar pe factura: rand tip_rand='G' (401 = 767), TVA calculat pe
  baza diminuata, marfa si preturile articolelor pe valoarea integrala.
- Factura multi-cota: randurile S, G si T se sparg pe cotele articolelor, cu
  explicatia TVA din familia coloanei si alinierea T -> S.
- Teste noi in utile/Teste/achizitie_import (discount, DVI, cote, e2e).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U9uDgDfUQXbh2Neib36CN8
2026-08-01 09:32:35 +03:00
704e25e190 eroare validare daca nu exista internet 2026-07-30 13:51:57 +03:00
31a157cb55 todos 2026-07-28 17:08:21 +03:00
ccb8fd2cc6 Verificare ANAF: perioada de TVA spune ce reprezinta; optiunea intreaba inainte sa modifice
SufixPerioadaTVA lipea intervalul direct dupa verdict ("Neplatitor TVA
05/07/2002 - 18/04/2012"), ceea ce se citea ca perioada in care partenerul NU a
fost platitor - exact pe dos. Eticheta spune acum ce reprezinta: "inregistrat TVA
<de la> - <pana la>", respectiv "cod TVA anulat din <data>". Detaliile F4 arata
perioada si in ramurile "Nu exista partener cu CUI ..." si "Nu s-a putut citi
lista de parteneri", unde lipsea - adica tocmai in cazul in care utilizatorul
n-avea de unde sa afle ce inseamna datele din banda de stare.

ANAF_ComutaVerificare afisa un mesaj informativ si apoi cerea neconditionat
valoarea noua, propunand valoarea curenta. Cand verificarea era oprita local din
settings.ini, valoarea propusa era 0, iar un Enter reflex o salva ca optiune de
utilizator - ceea ce transforma tacut o oprire locala in oprire pe orice
calculator. Mesajul intreaba acum Da/Nu si propune 9 (oprire locala) in loc de 0.

reguli_lucru.md pct. 2: istoricul modificarilor sta doar in antetul fisierului,
la fel in .prg si in package-urile/procedurile PL/SQL Oracle; in corpul codului
doar comentarii functionale, niciodata data/autor/"am modificat".

Adaugat docs/sold-neexigibil-reportat-jc2007-jv2007.md: jc2007/jv2007 tin o linie
per factura PER PERIOADA (soldul neexigibil se reporteaza lunar), deci orice
interogare pe sold se filtreaza pe an/luna.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
2026-07-28 15:12:13 +03:00
95cf54e447 Verificare ANAF: raspunsul 404 citit, intrerupator cand serviciul nu raspunde
Serviciul ANAF intoarce HTTP 404 cu corp complet pentru codurile inexistente
({"found":[],"notFound":[...]}), iar wrapper-ul citea corpul doar pe 200 - deci
verdictul "cod inexistent" nu aparea niciodata. Corpul se citeste acum la orice
status, iar verdictul se da doar cand notFound contine chiar codul interogat;
orice alt corp neinteles inseamna "nu a raspuns", nu acuzatie.

Timeout-uri reale pe apelurile web (2/2/3/3): garda Pemstatus din jurul lui
SetTimeouts intoarce .F. pe obiectul COM legat tarziu, deci timeout-urile nu se
aplicau, iar o gazda care inghite pachetele bloca interfata ~21 s per rand.
Aceleasi timeout-uri si pe drumul batch. Fallback-ul Microsoft.XMLHTTP, fara
timeout, a fost scos de pe calea single.

Cand serviciul nu raspunde, verificarile se opresc 10 minute si banda arata ca
au fost sarite, in loc sa taca. La deschiderea formularului pleaca o sonda
asincrona de disponibilitate, cu termen de viata, guard de reintrare si Abort()
la inchidere; randul care asteapta verdictul nu face apel propriu. Cache doar pe
rezultate pozitive. Codul fiscal nenumeric primeste mesaj propriu, in banda si
in detaliile F4.

ParseJsonANAFv8 restaureaza formatul datei si pe calea de eroare (o exceptie
lasa toata sesiunea pe YMD).

Teste: suita headless 70/70, cu sonda si clasele de esec mock-uite (fara retea)
si fixture peste corpurile 404 masurate pe serviciul real.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
2026-07-27 16:25:02 +03:00
eacf145536 reguli_lucru: curatenie dupa commit si capcana versiunilor text stale
Punctul 1: dupa commit se sterg patch-urile de review si backup-urile de lucru.

Punctul 5: versiunile `.??2` sunt instantanee si pot ramane in urma binarului.
Concret, un `.pj2` vechi de doua saptamani a dus la concluzia gresita ca proiectul
refera `clase\orapoarte.vcx`, cand `.PJX`-ul real refera `comun\clase\orapoarte.vcx`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P1J6WjsQn7i7c9uF7VweGc
2026-07-27 15:53:20 +03:00
989c3dd6f4 Adauga scripts/roa_sync.ps1 (mutat din UTIL\foxbin2prg) + testele lui
Sync-ul de sesiune se distribuie de-acum cu COMUN (svn update / comun.git).
Fata de versiunea veche: dupa commit-ul local de sync reconciliaza cu origin
(fetch + ff-only sau rebase --empty=drop; sync-urile byte-identice cu origin
dispar singure) si face push automat DOAR cand tot ahead-ul e din commit-uri
de sync; conflict real -> abort + exit nenul. Switch -GitOnly pentru
reconciliere rapida / teste. Doc inrolare actualizat (tooling + pasul 6).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AvccPZXr4A9ihcTtExNoJT
2026-07-27 11:59:42 +03:00
889840357a Verificare ANAF la alegerea partenerului
ocautare.prg - miezul functionalitatii:
- anaf_verif_cautare: verdictul ANAF pe randul curent din formularul de cautare
  (label sub grid), la data documentului; discordantele si codurile fiscale invalide
  cu rosu; F4 sau click deschide detaliile.
- ANAF_StarePartener, cu cache pe sesiune, excludere parteneri externi si persoane
  fizice; ANAF_ValidareCod pentru CIF/CNP.
- ANAF_NivelVerificare: cascada RC_ANAF_VERIF_SELECTIE (kill-switch settings.ini >
  optiuni utilizator > optiuni firma > implicit 1), cu cache invalidat la schimbarea
  firmei sau utilizatorului; ANAF_ComutaVerificare pentru punctul de meniu.
- Detalii: alegerea variantei corecte de partener din perechea RO / fara RO, cu
  discriminator "are documente in perioada"; dupa Da sau Nu se inchide cautarea si
  se revine in formular cu partenerul ales (AplicaInlocuirePartenerANAF).
- ANAF_CaData: data documentului poate veni si ca DateTime (tact.dataact).
- Banda proprie sub grid pentru label: formularul creste cu 54, gridul isi pierde
  ancorarea de jos si primeste inaltimea din AjusteazaBanda, legata de Resize si
  Activate - formularul isi reaseaza gridul dupa Show, deci Activate e momentul util.

validare.prg: ANAF_VerificaCuiSingle, wrapper single-CUI peste serviciul ANAF, cu
data verificarii si o singura eroare logata pe sesiune.

cauta_alfa.prg: hook generic - ataseaza poVerifAlegere pe formularul de cautare
inainte de Show si il detaseaza dupa.

Apelanti opt-in (lVerificaANAF): baza.vc2 (lookup-ul generic de partener din
formularele actbaza/actbaza2007 lansate din meniuri), onote_contabile.vc2 (partener
debit/credit), omodificari.vc2 (do_cauta din cele trei clase de modificare, cu data
notei), ofacturare.vc2 (client, furnizor). Casa/banca ramane in afara: acolo partenerul
se alege pentru imperecherea facturilor.

cauta_alfa_forms.vc2: F4 deschide detaliile, iar terminarea cautarii trece prin
VerificaAlegere.

Teste: suita headless pentru fluxul de verificare (utile/Teste/partener_anaf/), cu
mock pentru apelul ANAF si pentru dialoguri.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019H3r66sVojGhgaKq5niu1u
2026-07-27 01:29:41 +03:00
df9698375a Merge origin/main: rulaje.vc2 rezolvat din binarul SVN curent
Conflictul era doar pe 7 valori Column*.Width din frm_rulaje.grdrulaje - doua
regenerari FoxBin2Prg ale aceleiasi forme. Rezolvat prin regenerare din
clase/rulaje.vcx (SVN = sursa de adevar), rezultat identic cu HEAD.
wincrypt.h a venit identic pe ambele parti.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
2026-07-24 11:02:29 +03:00
ca465641e8 docs: compactare depanare/testare VFP (dedup + eliminare cazuri specifice)
depanare_testare_vfp.md 226->118 linii, testare-ui-vfp.md 133->90.
- regula SAFETY/dialog modal si -A -T erau enuntate de 3 ori -> o data
- cele 3 capcane "proces agatat" -> un singur algoritm de diagnostic in 3 pasi
- studiul de caz CNRCRT si detaliile ROAGEST (jtva_coloane2, achizitie_import)
  reduse la regula generala + pointer catre scriptul de test
- reguli_lucru pct.4 ramane doar pointer, fara detaliile duplicate de mediu
- sters docs/bash.exe.stackdump (fisier de gunoi, negitat)
Masuratorile si datele concrete pastrate integral.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
2026-07-24 10:59:30 +03:00
95bb2b5b74 Borderou eFactura: import manual arhiva zip descarcata din SPV
AnafeFacturaServer.ImportZipLocal (programe/anaf_efactura.prg): dezarhiveaza
arhiva aleasa de utilizator, ia xml-ul facturii (ignora semnatura MFinante),
ParseEFactura, decide FACTURA PRIMITA/TRIMISA dupa codul fiscal al firmei
curente, copiaza arhiva in directorul local de raspunsuri si scrie in Oracle
prin acelasi lant ca descarcarea din SPV (cursor temporar canaf_efactura_temp
+ cUpdateFactura + UpdateDb -> pack_anaf.AdaugaRaspunsFactura si
anaf_efactura_detalii). Fara SQL scris de mana si fara duplicarea maparii de
campuri.

clase/anaf_efactura.vcx (clasa anaf_efactura, metoda citesteraspunsuri):
optiunea 8 in meniul butonului "Raspunsuri" - "Import arhiva zip de pe disc...".

Necesar cand mesajul nu mai e in lista de raspunsuri ANAF (expira dupa 60 zile)
si factura primita nu a ajuns in borderou.

Testare (CENTRAL/MARIUSM_AUTO, ianuarie 2026, 12 PASS / 0 FAIL):
utile/Teste/efactura_import/ - garda pe cod fiscal, import complet cu verificarea
campurilor si a liniilor in anaf_efactura_detalii, factura vizibila in grila reala
"Facturi primite in SPV".

utile/Teste/test_init_env_auto.prg: adauga goFirma.codfiscalfro ca in start_firma
(ostartfirma.prg) - proprietatea nu e coloana in v_firme, iar fara ea orice cod
care o citeste nepazit crapa in mediul headless.

docs/depanare_testare_vfp.md: verificarea de sintaxa prin compilare headless
(config.fpw cu SAFETY=OFF, copie in scratchpad) si capcana literalelor string
mai lungi de 255 de caractere (eroare de compilare, nu de runtime).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
2026-07-24 10:43:28 +03:00
15e13cc333 reguli_lucru: patch-urile de review nu se comit niciodata (doar local, in .gitignore)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018H9za5A9Tk6wcLFof6seds
2026-07-23 20:50:35 +03:00
73992f0977 reguli_lucru: comentarii doar la functionalitati (nu la bugfix), changelog minimal pe limba utilizatorului
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018H9za5A9Tk6wcLFof6seds
2026-07-23 20:16:51 +03:00
cafe03fdb3 reguli 2026-07-23 17:19:44 +03:00
76422f6aad docs: reguli_lucru - conventii obligatorii per zona atinsa (pct. 7)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015DQoCUF3QSCgQCwCBK1qbz
2026-07-20 13:36:20 +03:00
53d9f1c64a Achizitie import unificata (ROAGEST): ointroduceri, teste UI, documentatie
- import_nota / import_adauga_factura: flux unificat note contabile + articole,
  sincronizare automata, total factura automat, TVA impartit pe conturile
  creditoare ale notelor (rundele 1-31)
- runda 32: totalurile import_nota pe _label/_textbox din _baza.vcx (Arial 10),
  fara containerele clb_tx_simplu si fara bifa "Recalculeaza TVA" (recalcul
  mereu automat); "Sincronizeaza facturile secundare" mutata sub butoane
- utile/Teste: harness UI VFP headless (vfp_ui_harness.ps1, ui_harness.prg,
  precompilare, mock-uri) in radacina; suitele e2e pentru achizitia din import
  grupate in utile/Teste/achizitie_import/
- docs: flux editare text vcx/scx, testare-ui-vfp si testare-vfp-mcp (mutate
  din ROAGEST, general valabile), inventar comun, orchestrare subagenti,
  conventie GO recno, depanare testare VFP

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019DGibQKa5uK4P2TNSFFQNh
2026-07-20 00:50:18 +03:00
98023fec50 sync SVN r17882 2026-07-16 13:22:59 +03:00
2f59024385 Initial: flux text FoxBin2Prg (git urmareste .??2 in-arbore, binarele VFP git-ignored)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 10:55:38 +03:00