Verificare ANAF: perioada de inregistrare in scopuri de TVA + corectie mesaj fals la CNP/cod invalid

L1: perioada de TVA (inceput, sfarsit, anulare din oficiu) si mesajul ANAF integral propagate din
cursor pana in banda si in dialogul F4. Banda arata data doar la discordanta, anulare sau perioada
incheiata; F4 o arata intotdeauna.

L2: clasele de esec CNP si COD_INVALID au text propriu in F4, in loc de mesajul fals
'ANAF nu a raspuns'. Garda Vartype pe parametrul nou tnTipPersoana pentru apelantii cu vechea
semnatura (fisier partajat de ROACONT/ROAGEST/ROAFACTURARE).

SVN r17910.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
This commit is contained in:
2026-07-28 00:50:11 +03:00
parent 95cf54e447
commit d440dd91fc
2 changed files with 91 additions and 14 deletions

View File

@@ -49,11 +49,18 @@
*!* formularului, daca starea serviciului nu e cunoscuta, pleaca o sonda asincrona care stabileste
*!* disponibilitatea fara sa blocheze interfata, iar randul curent asteapta rezultatul ei
*!* 27.07.2026
*!* marius.mutu
*!* verificare ANAF: banda de stare arata si de cand e valabila starea de TVA (data de inceput,
*!* data de incetare sau data anularii din oficiu), doar cand starea difera de ROA, partenerul e
*!* inactiv sau perioada s-a incheiat deja; F4 arata intotdeauna perioada completa si mesajul
*!* primit de la ANAF
*!* #DEFINE CRLF CHR(13) + CHR(10)
#INCLUDE COMUN\ROA.H
Procedure ANAF_StarePartener
Lparameters tcCodFiscal, tdData, tlDoarCache, tlNecesitaApel, tlNegasit, tcClasaEsec
Lparameters tcCodFiscal, tdData, tlDoarCache, tlNecesitaApel, tlNegasit, tcClasaEsec, tnTipPersoana
Local lcCodFiscal, lcCui, loRezANAF, lcCheieCache, lnI, llValid, loOut, ldData, llNegasit, lcStareServiciu
@@ -79,7 +86,8 @@ Procedure ANAF_StarePartener
Endif
Endfor
Endif
If m.llValid And Len(m.lcCui) = 13
If m.llValid And Len(m.lcCui) = 13 And !(Vartype(m.tnTipPersoana) = 'N' And m.tnTipPersoana = 1)
tcClasaEsec = 'CNP'
Return .Null.
Endif
If !m.llValid
@@ -141,6 +149,10 @@ Procedure ANAF_StarePartener
Addproperty(loOut, "lInactivANAF", loRezANAF.statusInactivi)
Addproperty(loOut, "cDenumireANAF", Alltrim(Nvl(loRezANAF.denumire, '')))
Addproperty(loOut, "lDiscordanta", (loRezANAF.scpTVA <> loOut.lAreRO) Or loRezANAF.statusInactivi)
Addproperty(loOut, "dInceputScpTVA", Iif(Pemstatus(loRezANAF, 'dInceputScpTVA', 5), Nvl(loRezANAF.dInceputScpTVA, {}), {}))
Addproperty(loOut, "dSfarsitScpTVA", Iif(Pemstatus(loRezANAF, 'dSfarsitScpTVA', 5), Nvl(loRezANAF.dSfarsitScpTVA, {}), {}))
Addproperty(loOut, "dAnulareScpTVA", Iif(Pemstatus(loRezANAF, 'dAnulareScpTVA', 5), Nvl(loRezANAF.dAnulareScpTVA, {}), {}))
Addproperty(loOut, "cMesajScpTVA", Iif(Pemstatus(loRezANAF, 'cMesajScpTVA', 5), Alltrim(Nvl(loRezANAF.cMesajScpTVA, '')), ''))
Addproperty(loOut, "dData", m.ldData)
Return loOut
Endproc && ANAF_StarePartener
@@ -597,7 +609,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
This.oStare = .Null.
This.cCui = ''
This.lNegasit = .F.
This.cClasaEsec = ''
This.cClasaEsec = 'COD_INVALID'
This.SeteazaLabel(m.lcCodInvalid + ' (F4 = detalii)', .T.)
goLog.Log('Cod fiscal invalid: ' + m.lcCodInvalid + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare')
Return .F.
@@ -610,7 +622,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
lcClasaEsec = ''
This.lVerificareInCurs = .T.
Try
loStare = ANAF_StarePartener(m.lcCodFiscal, This.dDataDoc, !m.tlPermiteApel, @llNecesitaApel, @llNegasit, @lcClasaEsec)
loStare = ANAF_StarePartener(m.lcCodFiscal, This.dDataDoc, !m.tlPermiteApel, @llNecesitaApel, @llNegasit, @lcClasaEsec, m.lnTipPersoana)
Finally
This.lVerificareInCurs = .F.
Endtry
@@ -645,6 +657,9 @@ DEFINE CLASS anaf_verif_cautare AS Custom
This.SeteazaLabel('Cod fiscal nenumeric - nu se poate verifica la ANAF', .F., .T.)
goLog.Log('Cod fiscal nenumeric: ' + Alltrim(m.lcCodFiscal) + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare')
Return .F.
Case Isnull(m.loStare) And m.lcClasaEsec == 'CNP'
This.SeteazaLabel('Persoana fizica - CNP corect', .F., .T.)
Return .F.
Case Isnull(m.loStare)
This.AfiseazaPrompt()
Return .F.
@@ -676,22 +691,61 @@ DEFINE CLASS anaf_verif_cautare AS Custom
ENDPROC
PROCEDURE TextStare
Lparameters toStare, tcPerioada
Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Nvl(m.tcPerioada, '') + Iif(toStare.lInactivANAF, ', Inactiv', '')
ENDPROC
PROCEDURE SufixPerioadaTVA
Lparameters toStare
Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Iif(toStare.lInactivANAF, ', Inactiv', '')
If !(toStare.lDiscordanta Or !Empty(toStare.dAnulareScpTVA) Or (!Empty(toStare.dSfarsitScpTVA) And toStare.dSfarsitScpTVA < Date()))
Return ''
Endif
Do Case
Case !Empty(toStare.dAnulareScpTVA)
Return ', anulat din ' + Dtoc(toStare.dAnulareScpTVA)
Case !Empty(toStare.dSfarsitScpTVA) And !Empty(toStare.dInceputScpTVA)
Return ' ' + Dtoc(toStare.dInceputScpTVA) + ' - ' + Dtoc(toStare.dSfarsitScpTVA)
Case !Empty(toStare.dInceputScpTVA)
Return ' din ' + Dtoc(toStare.dInceputScpTVA)
Endcase
Return ''
ENDPROC
PROCEDURE TextAnaf
Lparameters toStare, tlCuVirgula, tnMaxLen
Local lcCodOk, lcDenANAF, lcDenFull
Local lcCodOk, lcDenANAF, lcDenFull, lcPerioada
lcCodOk = Iif(toStare.lPlatitorANAF, 'RO', '') + toStare.cCui
lcDenFull = Alltrim(Nvl(toStare.cDenumireANAF, ''))
lcDenANAF = lcDenFull
If Vartype(m.tnMaxLen) = 'N' And m.tnMaxLen > 0 And Len(m.lcDenFull) > m.tnMaxLen
lcDenANAF = Left(m.lcDenFull, m.tnMaxLen) + '...'
Endif
Return 'ANAF: ' + This.TextStare(toStare) + ' (' + ;
lcPerioada = This.SufixPerioadaTVA(toStare)
Return 'ANAF: ' + This.TextStare(toStare, m.lcPerioada) + ' (' + ;
Iif(Empty(m.lcDenANAF), '', m.lcDenANAF + Iif(m.tlCuVirgula, ', ', ' ')) + m.lcCodOk + ')' + ;
' la ' + Dtoc(toStare.dData)
Iif(Empty(m.lcPerioada), ' la ' + Dtoc(toStare.dData), '')
ENDPROC
PROCEDURE TextPerioadaTVA
Lparameters toStare
Local lcTxt
lcTxt = ''
If !Empty(toStare.dInceputScpTVA)
lcTxt = m.lcTxt + 'Inceput inregistrare TVA: ' + Dtoc(toStare.dInceputScpTVA) + Chr(13)
Endif
If !Empty(toStare.dSfarsitScpTVA)
lcTxt = m.lcTxt + 'Sfarsit inregistrare TVA: ' + Dtoc(toStare.dSfarsitScpTVA) + Chr(13)
Endif
If !Empty(toStare.dAnulareScpTVA)
lcTxt = m.lcTxt + 'Anulare din oficiu: ' + Dtoc(toStare.dAnulareScpTVA) + Chr(13)
Endif
If !Empty(toStare.cMesajScpTVA)
lcTxt = m.lcTxt + 'Mesaj ANAF: ' + Alltrim(toStare.cMesajScpTVA) + Chr(13)
Endif
If !Empty(m.lcTxt)
lcTxt = m.lcTxt + Chr(13)
Endif
Return m.lcTxt
ENDPROC
PROCEDURE AntetDialog
@@ -786,7 +840,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
PROCEDURE Detalii
Local lcCursor, lcDenAles, lcCodAles, lcCodOk, lcLista, lcMesaj, lnCandidati, lnCandidat, lcDenPereche
Local lnRasp, lnAles, loAles, llEroare
Local lnRasp, lnAles, loAles, llEroare, lcPerioadaTVA
If Vartype(This.oForm) <> 'O'
Return
Endif
@@ -800,13 +854,17 @@ DEFINE CLASS anaf_verif_cautare AS Custom
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + ;
Iif(This.lNegasit, 'Codul fiscal nu exista la ANAF.', ;
Iif(This.cClasaEsec == 'COD_NENUMERIC', 'Codul fiscal nu este numeric - nu se poate verifica la ANAF.', ;
'ANAF nu a raspuns - verificarea a fost sarita.')), ;
Iif(This.cClasaEsec == 'CNP', 'Persoana fizica - CNP corect.', ;
Iif(This.cClasaEsec == 'COD_INVALID', 'Cod fiscal invalid - nu s-a interogat ANAF. Corectati codul in fisa partenerului.', ;
'ANAF nu a raspuns - verificarea a fost sarita.'))))), ;
0 + 64, 'Verificare partener ANAF')
Return
Endif
lcPerioadaTVA = This.TextPerioadaTVA(This.oStare)
If This.oStare.lAreRO = This.oStare.lPlatitorANAF
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + ;
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + m.lcPerioadaTVA + ;
Iif(This.oStare.lInactivANAF, 'Nu exista alta varianta de partener de ales.', 'Codul fiscal corespunde.'), ;
0 + 64, 'Verificare partener ANAF')
Return
@@ -833,7 +891,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
This.MarcheazaDocumente()
lcLista = This.TextListaCandidati()
lcMesaj = This.AntetDialog(m.lcDenAles, m.lcCodAles) + 'Parteneri ROA cu CUI ' + m.lcCodOk + ':' + Chr(13) + m.lcLista + Chr(13) + ;
lcMesaj = This.AntetDialog(m.lcDenAles, m.lcCodAles) + m.lcPerioadaTVA + 'Parteneri ROA cu CUI ' + m.lcCodOk + ':' + Chr(13) + m.lcLista + Chr(13) + ;
'Da = Pastreaza selectia' + Chr(13) + ;
Iif(m.lnCandidati = 1, 'Nu = Alege 1 ' + m.lcDenPereche + ' (ID: ' + Transform(m.lnCandidat) + ')', ;
'Nu = Alege din lista (1-' + Transform(m.lnCandidati) + ')') + Chr(13) + ;

View File

@@ -67,6 +67,12 @@
*!* sonda asincrona de disponibilitate (ANAF_SondaPorneste/AuSositRaspunsul/AReusit/Opreste) verifica in
*!* fundal, la nevoie, daca serviciul ANAF a revenit, fara sa blocheze interfata
*!* 27.07.2026
*!* marius.mutu
*!* ANAF_VerdictDinCursor expune si perioada de inregistrare in scopuri de TVA (inceput, sfarsit,
*!* anulare din oficiu) si mesajul ANAF integral (mesaj_ScpTVA), citite din cursorul deja parsat de
*!* ParseJsonANAFv8; parsarea esuata a datelor de perioada se logheaza
*!* http://ec.europa.eu/taxation_customs/vies/viesquer.do
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/1879855/MFIN
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187
@@ -1673,6 +1679,10 @@ Function ANAF_VerdictDinCursor
Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.))
Addproperty(loResult, "denumire", Nvl(denumire, ""))
Addproperty(loResult, "mesaj", Nvl(mesaj, ""))
Addproperty(loResult, "dInceputScpTVA", Nvl(data_inceput_ScpTVA, {}))
Addproperty(loResult, "dSfarsitScpTVA", Nvl(data_sfarsit_ScpTVA, {}))
Addproperty(loResult, "dAnulareScpTVA", Nvl(data_anul_imp_ScpTVA, {}))
Addproperty(loResult, "cMesajScpTVA", Nvl(mesaj_ScpTVA, ""))
Else
If m.lnReccountTemp = 1 And Empty(denumire) And Nvl(cui, 0) = m.tnCuiCautat
tlNegasit = .T.
@@ -2067,6 +2077,15 @@ Define Class VerificareANAF As Custom
loDate.data_sfarsit_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA)
loDate.data_anul_imp_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA)
loDate.mesaj_ScpTVA = loInregistrareTVA.perioade_tva[1].mesaj_ScpTVA
IF !Empty(loInregistrareTVA.perioade_tva[1].data_inceput_ScpTVA) And Empty(loDate.data_inceput_ScpTVA)
goLog.Log('ParseJsonANAFv8: data_inceput_ScpTVA neparsabila (' + loInregistrareTVA.perioade_tva[1].data_inceput_ScpTVA + ')', 'ParseJsonANAF')
ENDIF
IF !Empty(loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA) And Empty(loDate.data_sfarsit_ScpTVA)
goLog.Log('ParseJsonANAFv8: data_sfarsit_ScpTVA neparsabila (' + loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA + ')', 'ParseJsonANAF')
ENDIF
IF !Empty(loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA) And Empty(loDate.data_anul_imp_ScpTVA)
goLog.Log('ParseJsonANAFv8: data_anul_imp_ScpTVA neparsabila (' + loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA + ')', 'ParseJsonANAF')
ENDIF
CATCH TO loEx
ENDTRY
ENDIF