Files
comun/utile/Teste/test_anaf_nomenclator.prg
Marius Mutu 019d241e50 teste ANAF: verificari pentru preluarea codului CAEN si a reviziei
Testul sintetic acopera CaenAnaf (completarea zeroului din fata, valori
neplauzibile) si CaenRevizie (format nou/vechi de numar de registru): 42 -> 53
verificari. Proba e2e goleste caen/caen_revizie inainte de rulare si le
verifica dupa, cu contoare SEPARATE de judet/localitate ca cifrele masurate in
rundele anterioare sa ramana comparabile. Mock-ul de dialog expune acum si
codul CAEN si numarul de registru brute de la ANAF.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015husoVS24ewJZr21ZoVR3v
2026-08-23 21:22:56 +03:00

183 lines
10 KiB
Plaintext

*!* 23.08.2026
*!* marius.mutu
*!* Test headless pentru potrivirea denumirilor ANAF peste nomenclator: taierea prefixului in
*!* ParseAdresaAnaf si treptele din AnafNomenclator (exact / fara sufix / fuzzy A-I).
Local lcLog, lcComun, loV, loN, lnOk, lnNok
lcComun = Addbs(Justpath(Justpath(Justpath(Sys(16)))))
lcLog = Addbs(Justpath(Sys(16))) + "test_anaf_nomenclator_log.txt"
If File(m.lcLog)
Erase (m.lcLog)
Endif
Public gnOk, gnNok, gcLog
gnOk = 0
gnNok = 0
gcLog = m.lcLog
*** fara On Error o eroare de runtime ar deschide un dialog modal si testul ar atarna
On Error Strtofile("EROARE " + Transform(Error()) + " linia " + Transform(Lineno()) + ": " + Message() + Chr(13) + Chr(10), m.gcLog, .T.)
Set Procedure To (m.lcComun + "programe\validare.prg") Additive
Set Procedure To (m.lcComun + "programe\onomenclatoare.prg") Additive
loV = Createobject("VerificareANAF")
loN = Createobject("AnafNomenclator")
*** --- FaraPrefixLoc: prefixul se taie, restul denumirii ramane intreg ---
Verif("prefix JUD. un cuvant", loV.FaraPrefixLoc("JUD. CONSTANTA"), "CONSTANTA")
Verif("prefix JUD. doua cuvinte", loV.FaraPrefixLoc("JUD. SATU MARE"), "SATU MARE")
Verif("prefix ORS.", loV.FaraPrefixLoc("ORS. TIRGU NEAMT"), "TIRGU NEAMT")
Verif("prefix MUN. cu cratima", loV.FaraPrefixLoc("MUN. CLUJ-NAPOCA"), "CLUJ-NAPOCA")
Verif("prefix COM.", loV.FaraPrefixLoc("COM. AGHIRESU"), "AGHIRESU")
Verif("prefix SAT fara punct", loV.FaraPrefixLoc("SAT AGHIRESU-FABRICI"), "AGHIRESU-FABRICI")
Verif("fara prefix", loV.FaraPrefixLoc("CONSTANTA"), "CONSTANTA")
*** forma NEprescurtata: pe Bucuresti ANAF trimite "MUNICIPIUL BUCURESTI", nu "JUD. BUCURESTI"
Verif("prefix MUNICIPIUL", loV.FaraPrefixLoc("MUNICIPIUL BUCURESTI"), "BUCURESTI")
Verif("prefix JUDETUL", loV.FaraPrefixLoc("JUDETUL CLUJ"), "CLUJ")
*** ORASUL/COMUNA/SATUL NU se taie: exista localitati care chiar incep asa
Verif("ORASUL NU e prefix", loV.FaraPrefixLoc("ORASUL NOU"), "ORASUL NOU")
*** --- ParseAdresaAnaf: adresa completa, inclusiv cazul Bucuresti ---
Local loA
loA = loV.ParseAdresaAnaf("JUD. SATU MARE, MUN. SATU MARE, STR. LALELELOR, NR.12")
Verif("adresa judet doua cuvinte", loA.judet, "SATU MARE")
Verif("adresa loc doua cuvinte", loA.localitate, "SATU MARE")
loA = loV.ParseAdresaAnaf("MUN. BUCURESTI, SECTOR 1, STR. AVIATORILOR, NR.2")
Verif("bucuresti judet", loA.judet, "BUCURESTI")
Verif("bucuresti sectorul", loA.localitate, "BUCURESTI SECTORUL 1")
*** forma pe care o trimite ANAF in realitate (masurat pe 200 de coduri reale): nu "MUN.", ci
*** "MUNICIPIUL", si fara "JUD." pe primul element
loA = loV.ParseAdresaAnaf("MUNICIPIUL BUCURESTI, SECTOR 1, STR EMANOIL PORUMBARU, NR.90-92")
Verif("bucuresti real judet", loA.judet, "BUCURESTI")
Verif("bucuresti real sectorul", loA.localitate, "BUCURESTI SECTORUL 1")
loA = loV.ParseAdresaAnaf("JUD. CONSTANTA, MUN. CONSTANTA, ALEEA CRIZANTEMELOR, NR.6, BL.H1, SC.F, ET.2, AP.109")
Verif("nemodificat judet", loA.judet, "CONSTANTA")
Verif("nemodificat loc", loA.localitate, "CONSTANTA")
Verif("nemodificat strada", loA.strada, "CRIZANTEMELOR")
Verif("nemodificat nr", loA.nr, "6")
Verif("nemodificat bloc", loA.Bloc, "H1")
Verif("nemodificat apart", loA.apart, "109")
*** --- AnafNomenclator pe cursoare modelate dupa syn_vnom_* ---
Create Cursor crsJudeteT (id_judet I Null, judet C(30))
Insert Into crsJudeteT Values (Null, "<ALEGETI JUDETUL>")
Insert Into crsJudeteT Values (10, "BUCURESTI")
Insert Into crsJudeteT Values (14, "CLUJ")
Insert Into crsJudeteT Values (34, "SATU MARE")
VerifId("judet exact", loN.pozitioneaza_judet("crsJudeteT", "CLUJ"), "crsJudeteT.id_judet", 14)
VerifId("judet doua cuvinte", loN.pozitioneaza_judet("crsJudeteT", "SATU MARE"), "crsJudeteT.id_judet", 34)
Verif("judet inexistent", Transform(loN.pozitioneaza_judet("crsJudeteT", "ATLANTIDA")), ".F.")
Create Cursor crsLocT (id_loc I Null, localitate C(45))
Insert Into crsLocT Values (Null, "<ALEGETI LOCALITATEA>")
Insert Into crsLocT Values (57, "AGHIRESU")
Insert Into crsLocT Values (58, "AGHIRESU-FABRICI (COM. AGHIRESU)")
Insert Into crsLocT Values (1759, "BUCURESTI SECTORUL 1")
Insert Into crsLocT Values (9001, "TIRGU MURES")
Insert Into crsLocT Values (9002, "TIRGU NEAMT")
Insert Into crsLocT Values (9101, "SATU NOU (COM. ALFA)")
Insert Into crsLocT Values (9102, "SATU NOU (COM. BETA)")
Insert Into crsLocT Values (9201, "MAMAIA (MUN. CONSTANTA)")
Insert Into crsLocT Values (9202, "POIANA (ORS. OVIDIU)")
*** omonime departajabile dupa comuna (cazul real GRECI din Olt)
Insert Into crsLocT Values (9301, "GRECI (COM. SCHITU)")
Insert Into crsLocT Values (9302, "GRECI (COM. OSICA DE SUS)")
*** omonime unde marcajul e scris diferit in cele doua surse: nomenclatorul "(ORAS X)",
*** ANAF "ORS. X" - departajarea compara doar denumirea comunei/orasului
Insert Into crsLocT Values (9401, "STEFANESTI (COM. SUSENI)")
Insert Into crsLocT Values (9402, "STEFANESTI (ORAS STEFANESTI)")
*** omonime care difera de ANAF SI prin A/I: treapta exacta nu gaseste nimic, cea fuzzy gaseste
*** doi - departajarea dupa comuna trebuie sa se aplice si acolo (cazul real SIRBI, Maramures)
Insert Into crsLocT Values (9501, "SIRBI (COM. BUDESTI)")
Insert Into crsLocT Values (9502, "SIRBI (COM. FARCASA)")
*** exactul are prioritate: AGHIRESU nu trebuie sa cada pe AGHIRESU-FABRICI
VerifId("loc exact", loN.pozitioneaza_localitate("crsLocT", "AGHIRESU"), "crsLocT.id_loc", 57)
VerifId("loc fara sufix", loN.pozitioneaza_localitate("crsLocT", "AGHIRESU-FABRICI"), "crsLocT.id_loc", 58)
VerifId("loc sector", loN.pozitioneaza_localitate("crsLocT", "BUCURESTI SECTORUL 1"), "crsLocT.id_loc", 1759)
*** fuzzy: ANAF trimite forma cu A, nomenclatorul o tine cu I
VerifId("loc fuzzy A-I", loN.pozitioneaza_localitate("crsLocT", "TARGU MURES"), "crsLocT.id_loc", 9001)
VerifId("loc fuzzy A-I 2", loN.pozitioneaza_localitate("crsLocT", "TARGU NEAMT"), "crsLocT.id_loc", 9002)
*** sufix administrativ FARA paranteze - asa il trimite ANAF, intr-un singur element de virgula:
*** "JUD. CONSTANTA, SAT AGIGEA COM. AGIGEA, STR. ECLUZEI, NR.1". Nomenclatorul il tine cu
*** paranteze, deci ambele forme trebuie sa se reduca la aceeasi denumire.
VerifId("loc sufix COM. fara paranteze", ;
loN.pozitioneaza_localitate("crsLocT", "AGHIRESU-FABRICI COM. AGHIRESU"), "crsLocT.id_loc", 58)
VerifId("loc sufix MUN. fara paranteze", ;
loN.pozitioneaza_localitate("crsLocT", "MAMAIA MUN. CONSTANTA"), "crsLocT.id_loc", 9201)
VerifId("loc sufix ORS. fara paranteze", ;
loN.pozitioneaza_localitate("crsLocT", "POIANA ORS. OVIDIU"), "crsLocT.id_loc", 9202)
*** ambiguu: doua sate omonime in comune diferite - se refuza, nu se ghiceste
Verif("loc ambiguu refuzat", Transform(loN.pozitioneaza_localitate("crsLocT", "SATU NOU")), ".F.")
*** ...dar daca ANAF trimite comuna, omonimele SE departajeaza dupa ea
VerifId("omonime departajate dupa comuna", ;
loN.pozitioneaza_localitate("crsLocT", "SATU NOU COM. BETA"), "crsLocT.id_loc", 9102)
VerifId("omonime departajate, caz real GRECI", ;
loN.pozitioneaza_localitate("crsLocT", "GRECI COM. SCHITU"), "crsLocT.id_loc", 9301)
*** marcaj scris diferit in cele doua surse: ANAF "ORS. STEFANESTI" vs nomenclator "(ORAS STEFANESTI)"
VerifId("omonime, marcaj scris diferit", ;
loN.pozitioneaza_localitate("crsLocT", "STEFANESTI ORS. STEFANESTI"), "crsLocT.id_loc", 9402)
*** comuna care nu exista printre omonime: NU se ghiceste, ramane refuzat
Verif("omonime, comuna necunoscuta refuzata", ;
Transform(loN.pozitioneaza_localitate("crsLocT", "GRECI COM. ATLANTIDA")), ".F.")
*** fara comuna de la ANAF nu se poate departaja - refuz corect (cazul real STEFANESTI, Arges)
Verif("omonime fara comuna refuzate", ;
Transform(loN.pozitioneaza_localitate("crsLocT", "STEFANESTI")), ".F.")
*** departajarea se aplica SI dupa treapta fuzzy: ANAF "SARBI", nomenclatorul "SIRBI"
VerifId("omonime fuzzy departajate dupa comuna", ;
loN.pozitioneaza_localitate("crsLocT", "SARBI COM. FARCASA"), "crsLocT.id_loc", 9502)
Verif("omonime fuzzy fara comuna refuzate", ;
Transform(loN.pozitioneaza_localitate("crsLocT", "SARBI")), ".F.")
Verif("loc inexistent", Transform(loN.pozitioneaza_localitate("crsLocT", "ATLANTIDA")), ".F.")
*** --- CaenAnaf: ANAF trimite codul NUMERIC, deci sectiunea agricultura pierde zeroul din fata ---
Verif("caen 4 cifre nemodificat", loV.CaenAnaf(6201), "6201")
Verif("caen 3 cifre completat", loV.CaenAnaf(141), "0141")
Verif("caen 3 cifre completat 2", loV.CaenAnaf(111), "0111")
Verif("caen primit ca text", loV.CaenAnaf("4711"), "4711")
Verif("caen gol", loV.CaenAnaf(""), "")
Verif("caen zero", loV.CaenAnaf(0), "")
Verif("caen prea lung refuzat", loV.CaenAnaf(62011), "")
*** --- CaenRevizie: numar de registru in format NOU (fara '/') <=> cod CAEN revizia 3 ---
Verif("revizie format nou", loV.CaenRevizie("J2017000999304"), "3")
Verif("revizie format nou F", loV.CaenRevizie("F1993000063034"), "3")
Verif("revizie format vechi", loV.CaenRevizie("J13/626/1991"), "")
Verif("revizie fara numar", loV.CaenRevizie(""), "")
*** On Error continua executia, deci o verificare sarita (obiect neinstantiat) nu s-ar vedea
*** in numarul de esecuri; se verifica explicit ca au rulat toate.
If m.gnOk + m.gnNok # 53
gnNok = m.gnNok + 1
Strtofile("ESEC au rulat doar " + Transform(m.gnOk + m.gnNok) + " verificari din 53" + Chr(13) + Chr(10), m.gcLog, .T.)
Endif
Strtofile("TOTAL: " + Transform(m.gnOk) + " ok, " + Transform(m.gnNok) + " esec" + Chr(13) + Chr(10), m.gcLog, .T.)
Quit
Procedure Verif
Lparameters tcNume, tcObtinut, tcAsteptat
Local lcStare
If Alltrim(Nvl(m.tcObtinut, "")) == Alltrim(m.tcAsteptat)
gnOk = m.gnOk + 1
lcStare = "ok "
Else
gnNok = m.gnNok + 1
lcStare = "ESEC "
Endif
Strtofile(m.lcStare + Padr(m.tcNume, 26) + " obtinut=[" + Alltrim(Nvl(m.tcObtinut, "")) + ;
"] asteptat=[" + Alltrim(m.tcAsteptat) + "]" + Chr(13) + Chr(10), m.gcLog, .T.)
Endproc
Procedure VerifId
Lparameters tcNume, tlGasit, tcExpresieId, tnAsteptat
Local lnId
lnId = Iif(m.tlGasit, Nvl(Evaluate(m.tcExpresieId), -1), -1)
Verif(m.tcNume, Transform(m.lnId), Transform(m.tnAsteptat))
Endproc