nav-gov-hu / eVAT

Public repository of the eVAT System
23 stars 6 forks source link

QueryVatDeclarationData octet-stream encoding(?) probléma #93

Closed zbenko closed 8 months ago

zbenko commented 8 months ago

A ManageDeclarationPartition requestben octet-streamként feltöltött gzip fájl és a QueryVatDeclarationData responseban visszakapott octet-stream eltér méretben és tartalomban is. Például a visszakapott: AFABLETOLT2V.txt És a feltöltött: BEVALLAS.GZ Előre is köszönöm az ötleteket!

renced42 commented 8 months ago

Légy szíves azt is csatold be amit feltöltöttél...

zbenko commented 8 months ago

Légy szíves azt is csatold be amit feltöltöttél... Az eredeti feltöltött már sajnos nincs meg (felülíródott), de megképeztem újra a feltöltést ugyanazzal a gzip állománnyal, remélem ez segítség lesz. Köszönöm.

AFAPARTITIONV.TXT

renced42 commented 8 months ago

Szia ne haragudj, de jó lenne ha a fizikailag feltöltött állományt csatolnád be nem pedig a txt-t amit a feltöltéskor kidumpolsz. Köszi!

zbenko commented 8 months ago

Szia ne haragudj, de jó lenne ha a fizikailag feltöltött állományt csatolnád be nem pedig a txt-t amit a feltöltéskor kidumpolsz. Köszi!

Szia! A küldés MSXML2.SERVERXMLHTTP.6.0 objektummal történik, amelynek send metódusába egy karakteres változóban pontosan az az érték kerül átadásra, amelyet az afapartitionv.txt-ben csatoltam. A kőkorszaki visual foxpro-s küldő programrész az alábbi (ha ez segítség):

BOUNDARY = '--'+STRTRAN(SYS(2015),'_','') SRCFILE = ÚTVONAL+"\penzugy\bevallas.gz" SRCFILE2 = ÚTVONAL+"\penzugy\afapartition.xml" CONTENT = FILETOSTR(m.SRCFILE) CONTENT2 = FILETOSTR(m.SRCFILE2) FILENAME = JUSTFNAME(m.SRCFILE) FILENAME2 = JUSTFNAME(m.SRCFILE2) NAME = "file" NAME2 = "body"

CPAYLOAD = ; +m.BOUNDARY; +CRLF; +TEXTMERGE('Content-Disposition: form-data; name="<<m.name>>"; filename="<<m.fileName>>"' ); +CRLF; +'Content-Type: application/octet-stream'; +CRLF; +CRLF; +m.CONTENT; +CRLF;

CPAYLOAD2 = ; +m.BOUNDARY; +CRLF; +TEXTMERGE('Content-Disposition: form-data; name="<<m.name2>>"; filename="<<m.fileName2>>"' ); +CRLF; +'Content-Type: application/xml'; +CRLF; +CRLF; +m.CONTENT2; +CRLF; +m.BOUNDARY; +"--"

QPAYLOAD = CREATEBINARY(m.CPAYLOAD+m.CPAYLOAD2)

m.WS=CREATEOBJECT("MSXML2.ServerXMLHTTP.6.0")
IF _OLSZTEST
    m.WS.OPEN("Post","https://api-test.eafa.nav.gov.hu/analyticsService/v1/manageDeclarationPartition",.F.)  
ELSE
    IF !EMPTY(USERNAME)
        m.WS.OPEN("Post","https://api.eafa.nav.gov.hu/analyticsService/v1/manageDeclarationPartition",.F.)  
    ENDIF
ENDIF
m.WS.SETREQUESTHEADER("Content-Type", "multipart/form-data; boundary="+ SUBSTR(m.BOUNDARY,3) )
m.WS.SEND(m.QPAYLOAD)

STRTOFILE(M.QPAYLOAD,ÚTVONAL+"\PENZUGY\AFAPARTITIONV.TXT")      <<-- ezt küldtem a korábbi válaszomban

OBJXMLRECEIVE = m.WS.RESPONSEXML
STRTOFILE(OBJXMLRECEIVE.XML,ÚTVONAL+"\PENZUGY\AFAPARTITIONV.xml",0)
renced42 commented 8 months ago

Kedves @zbenko

Kezdjük előlről :)

Kérlek, hogy küld meg azt a filet, amit feltöltöttél. (XML/GZ) És kérlek küld meg azt a file-t amit letöltöttél és szerinted nem az amit feltöltöttél. (XML/GZ) Küld meg a feltöltéskori RequestID-t

zbenko commented 8 months ago

Kedves @zbenko

Kezdjük előlről :)

Kérlek, hogy küld meg azt a filet, amit feltöltöttél. (XML/GZ) És kérlek küld meg azt a file-t amit letöltöttél és szerinted nem az amit feltöltöttél. (XML/GZ) Küld meg a feltöltéskori RequestID-t

Tehát a feltöltött gz: BEVALLAS.GZ

A feltöltött (de újra megképzett új request id-vel) XML, amely tartalmazza az előbbi gz-t: AFAPARTITIONV.TXT

A letöltött xml, amely streamként tartalmazza a gz-t is: AFABLETOLT2V.txt

A feltöltéskori request id-t nem tudom, mert nem tudtam, hogy tárolni kell. Viszont azt tudom, hogy a teszt rendszerben a declarationProcessingId-je: 4GAN1M8PG1L4QOFR , mert ez alapján töltöm le QueryVatDeclarationDataRequest-ként.

Köszönöm és bocsánat, hogy ilyen nehezen érthető vagyok.

renced42 commented 8 months ago

Kedves @zbenko

A problémám az, hogy az AFABLETOLT2V.txt-ből én nem tudom előállítani azt a file-t ami szerinted más mint a feltöltött gzip file. Tehát fizikailag nekem az a file kell amit te letöltesz és azt lemented GZ-ként és megmondod, hogy miben különbözik a feltöltött állománytól.

Köszi!

zbenko commented 8 months ago

Kedves @zbenko

A problémám az, hogy az AFABLETOLT2V.txt-ből én nem tudom előállítani azt a file-t ami szerinted más mint a feltöltött gzip file. Tehát fizikailag nekem az a file kell amit te letöltesz és azt lemented GZ-ként és megmondod, hogy miben különbözik a feltöltött állománytól.

Köszi!

Kedves @renced42 !

Az AFABLETOLT2V.txt-ből én az alábbi GZ-t tudtam előállítani a stream kimásolásával: proba.gz Összevetve az eredetileg feltöltött GZ-vel: annak mérete 841 byte, a visszakapotté 1000 byte. És a karakterek is mások benne. És GZ-ként nem olvasható, mert hibás a csomagolt fájl hibaüzenetet kapok.

renced42 commented 7 months ago

Kedves @zbenko

Megvizsgáltuk az esetet, sajnos több sebből vérzik a beküldés az alábbiak szerint:

Az XML fájl nem felelt meg a NAV által meghatározott XML sémának. Az XML fájlban az elemeknek meg kell adni, hogy melyik XML séma szerint vizsgálja őket a rendszer. Az XML helyes sémáját az eÁFA M2M rendszer interfész specifikáció „3.1 XSD struktúra” fejezetben a 17. oldalon található meg. Az alábbi oldalon XML példákat találsz példákat, ami segít a helyes XML felépítésben. A „taxPointDate” mező helyett „taxpointDate” mezőnek kell szerepelnie az XML fájlban. A dátum helytelenül van megformázva. Az esetedben a dátumok az alábbi megformátumban lettek beküldve: „20240101”. A helyes dátum formátum viszont: ÉÉÉÉ-HH-NN (É – év, H – hónap, N – nap). A helyes formátum az eÁFA M2M rendszer interfész specifikáció „3.2 Analitika XML összeállítása” fejezetben a 187. oldalon található meg a „simpleType TaxpointDateType” táblázatban az „Érték” mező alatt. A „sumAccountedTax” mező helytelenül van kiszámítva. A küldött bevallás esetén MP07-es adókkal rendelkező fizetendő tételek összege, 32400, ami 32-re kerekítendő. MD66-ra adókódolt levonandó tételek összege 40500, ami 41-re kerekítendő. A fizetendő tételek összegének kerekített eredményéből ki kell vonni a levonandó tételek összegének kerekített eredményét, ami ebben az esetben 32 – 41, ami -9-cel egyenlő. Ezt az eredményt kell beírni a „sumAccountedTax” mezőbe. Az erről szóló hibaleírást az eÁFA M2M rendszer interfész specifikáció „8 MELLÉKLETEK” fejezetben a 309. oldalon a második táblázatban talod meg. A Partnereknél, hogy ha a státusz „DOMESTIC” vagy „OTHER” típusú, akkor kötelező megadni a Partner nevét, adószámát és címét. Az erről szóló hibaleírást az eÁFA M2M rendszer interfész specifikáció „8 MELLÉKLETEK” fejezetben a 315. oldalon a második táblázatban találja meg.

Továbbá az általa küldött "visszakapott" fájl kiterjesztése ".txt", viszont a helyes kiterjesztés a ".gz". Ezt úgy tudja orvosolni, hogy a response szövegének octet-stream részét ".gz" kiterjesztéssel menti el.

Kérlek, hogy a specifikációt alaposan tanulmányozd át mert itt sok minden összejött :)