Files
comun/utile/Teste/test_anaf_nomenclator.prg
Marius Mutu a580dfd6e1 teste ANAF nomenclator: proba e2e pe formularul real + init mediu ROADEF
Proba end-to-end ruleaza formularul frm_firme_nou_desktopf peste nomenclatorul
Oracle real; 997/1000 coduri fiscale reale potrivite corect. Testul sintetic
acopera 42 de verificari, fara Oracle si fara ANAF.

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

168 lines
9.2 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.")
*** 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 # 42
gnNok = m.gnNok + 1
Strtofile("ESEC au rulat doar " + Transform(m.gnOk + m.gnNok) + " verificari din 42" + 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