Import parteneri: se curata doar CNP-urile invalide, codul persoanelor juridice ramane neatins

This commit is contained in:
2026-08-02 10:29:34 +03:00
parent 349130c369
commit da19090ed9
10 changed files with 754 additions and 139 deletions

View File

@@ -0,0 +1,133 @@
* test_cod_fiscal_real.prg - ruleaza GetCodFiscalValid pe TOATE codurile din XML-urile Fidelio
* si scrie un raport, ca sa vedem efectul real inainte de import.
*
* Verifica invariantii care conteaza pentru declaratii:
* - nicio persoana JURIDICA nu ramane fara cod din cauza noastra (codul nu se sterge)
* - se sterge cod DOAR la persoane fizice si DOAR cand CNP-ul chiar este invalid
* - niciun CNP valid nu se pierde
*
* Rulare: vfp9.exe -A -T "D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_cod_fiscal_real.prg"
SET SAFETY OFF
SET TALK OFF
PUBLIC gcUILog, gcSyncDir, gnTestFail, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
gnTestFail = 0
gnMockRaspuns = 6
gcMockUltimMesaj = ''
gnMockUltimTip = 0
LOCAL lcTestDir
lcTestDir = ADDBS(JUSTPATH(SYS(16, 0)))
gcUILog = lcTestDir + 'test_cod_fiscal_real_log.txt'
gcSyncDir = lcTestDir + 'uisync\'
IF !DIRECTORY(gcSyncDir)
MD (gcSyncDir)
ENDIF
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
DO (lcTestDir + 'test_init_env_auto.prg') WITH .F.
SET PROCEDURE TO (lcTestDir + 'ui_harness.prg') ADDITIVE
SET PROCEDURE TO (lcTestDir + 'mock_amessagebox.prg') ADDITIVE
DO HarnessInit
LOCAL lcCale, lcFisier, lnFisiere, lcRaport
lcCale = ADDBS(ALLTRIM(goApp.oSettings.cale_import_fidelio))
HarnessLog('Citesc XML-urile din: ' + m.lcCale)
CREATE CURSOR cTot (denumire C(200), cod C(50), reg_com C(50))
lnFisiere = 0
lnSarite = 0
lcFisier = SYS(2000, m.lcCale + 'bts_detalii_facturi_rep_*.xml')
DO WHILE !EMPTY(m.lcFisier)
lnRanduri = 0
* fisierele goale sau fara coloanele asteptate se sar controlat
TRY
lnRanduri = XMLTOCURSOR(m.lcCale + m.lcFisier, 'cUnul', 512)
CATCH
lnRanduri = 0
ENDTRY
IF m.lnRanduri > 0 AND USED('cUnul') AND ;
TYPE('cUnul.codfiscal_cnp') = 'C' AND TYPE('cUnul.cumparator') = 'C'
SELECT DISTINCT CAST(ALLTRIM(cumparator) AS C(200)) AS denumire, ;
CAST(ALLTRIM(codfiscal_cnp) AS C(50)) AS cod, ;
CAST(ALLTRIM(regcomert_ci_pass) AS C(50)) AS reg_com ;
FROM cUnul WHERE !EMPTY(NVL(codfiscal_cnp, '')) INTO CURSOR cTemp
SELECT cTot
APPEND FROM DBF('cTemp')
USE IN (SELECT('cTemp'))
lnFisiere = m.lnFisiere + 1
ELSE
lnSarite = m.lnSarite + 1
ENDIF
USE IN (SELECT('cUnul'))
lcFisier = SYS(2000, m.lcCale + 'bts_detalii_facturi_rep_*.xml', 1)
ENDDO
HarnessLog('Fisiere citite: ' + TRANSFORM(m.lnFisiere) + ', sarite (goale/fara coloane): ' + TRANSFORM(m.lnSarite))
TestAssert(m.lnFisiere > 0, 'exista fisiere XML de analizat')
SELECT DISTINCT denumire, cod, reg_com FROM cTot INTO CURSOR cUnic
HarnessLog('Combinatii distincte nume+cod+regcom: ' + TRANSFORM(RECCOUNT('cUnic')))
LOCAL lnPF, lnPJ, lnSters, lnPJNevalidat, lnCnpPierdut, lnPJFaraCod
LOCAL lnTip, lcRez, lcCifre, lcCod
STORE 0 TO lnPF, lnPJ, lnSters, lnPJNevalidat, lnCnpPierdut, lnPJFaraCod
lcRaport = 'denumire;cod_import;reg_com;tip;cod_salvat' + CHR(13) + CHR(10)
SELECT cUnic
SCAN
lcCod = ALLTRIM(cUnic.cod)
lnTip = 0
lcRez = GetCodFiscalValid(m.lcCod, @lnTip, cUnic.denumire, cUnic.reg_com)
IF m.lnTip = 1
lnPJ = m.lnPJ + 1
* invariant 1: la persoana juridica NU stergem niciodata codul
IF EMPTY(m.lcRez) AND !EMPTY(m.lcCod)
lnPJFaraCod = m.lnPJFaraCod + 1
HarnessLog('EROARE invariant: PJ ramasa fara cod: ' + ALLTRIM(cUnic.denumire) + ' [' + m.lcCod + ']')
ENDIF
IF !VerifCF(m.lcRez)
lnPJNevalidat = m.lnPJNevalidat + 1
ENDIF
ELSE
lnPF = m.lnPF + 1
IF EMPTY(m.lcRez)
lnSters = m.lnSters + 1
* invariant 2: nu stergem CNP-uri VALIDE
lcCifre = CHRTRAN(m.lcCod, CHRTRAN(m.lcCod, '0123456789', ''), '')
IF LEN(m.lcCifre) = 13 AND cValidCNP(m.lcCifre)
lnCnpPierdut = m.lnCnpPierdut + 1
HarnessLog('EROARE invariant: CNP valid pierdut: ' + ALLTRIM(cUnic.denumire) + ' [' + m.lcCod + ']')
ENDIF
ENDIF
ENDIF
lcRaport = m.lcRaport + ALLTRIM(cUnic.denumire) + ';' + m.lcCod + ';' + ALLTRIM(cUnic.reg_com) + ';' + ;
IIF(m.lnTip = 1, 'PJ', 'PF') + ';' + m.lcRez + CHR(13) + CHR(10)
ENDSCAN
STRTOFILE(m.lcRaport, m.lcTestDir + 'raport_cod_fiscal_real.csv', .F.)
HarnessLog('persoane fizice : ' + TRANSFORM(m.lnPF))
HarnessLog('persoane juridice : ' + TRANSFORM(m.lnPJ))
HarnessLog('PF cu CNP sters : ' + TRANSFORM(m.lnSters))
HarnessLog('PJ cu cod nevalidat RO : ' + TRANSFORM(m.lnPJNevalidat) + ' (raman cu cod, atentioneaza declaratia)')
TestAssertEqual(0, m.lnPJFaraCod, 'nicio persoana juridica nu ramane fara cod')
TestAssertEqual(0, m.lnCnpPierdut, 'niciun CNP valid nu se pierde')
TestAssert(m.lnPF + m.lnPJ > 1000, 's-au analizat toti partenerii din exemple')
TestAssert(m.lnSters > 0, 'exista CNP-uri invalide care se curata')
TestAssert(m.lnPJ > 0, 'exista si persoane juridice detectate')
DO HarnessStep WITH 0, 'analiza pe date reale'
HarnessLog('REZULTAT: ' + TestRezultat())
DO HarnessDone WITH TestRezultat()
QUIT