*!* 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, "") 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, "") 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