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
168 lines
9.2 KiB
Plaintext
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
|