Biała lista podatników VAT: Plik Płaski

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
Destylator
Posty: 3
Rejestracja: czw sty 22, 2015 2:58 pm

Biała lista podatników VAT: Plik Płaski

Post autor: Destylator »

Witam wszystkich,

Od niedawna nasze ministerstwo finansów udostępnia listę płatników VAT w formie gargantuicznego JSONa(~200 mb). Problem, dla mnie, jest ze znalezieniem w tym pliku czegokolwiek. Specyfikacja i przykład nijak się mają do realnych danych udostępnionych na stronie ministerstwa. Moim problemem jest wyliczanie funkcji skrótu, i znalezienie jej w pliku. Algorytm którym się posługuje wygląda tak:

1. Z nagłówka pliku (lub jego nazwy pobieram datę - np. 20191121 z pliku testowego), do tego dokładam NIP i numer rachunku. Dla przykładu podam dane dostępne z pliku testowego na stronie ministerstwa: 20191121 + 9810000054 + 70102035709724546729803218 (pierwszy przykład ze strony).
2. Konkatenuję te dane do jednego ciągu znaków: 20191121981000005470102035709724546729803218
3. Wyliczam funkcję skrótu SHA-512 = BD191BD8E7A486622221AEAABFC1AA4D093EC09E7DD99A9E69F2C4DA6BAB3A0C5F2BACF905311340C27671641A3EDF221EF6A2EA6805E9C5A4ECF26281C89B78
4. Wchodzę do pliku i szukam wskazanego ciągu znaków (nie ma). Dla tego przypadku maska nie ma zastosowania (bank nie znajduje się na liście masek).

WW. problem występuje dla wszystkich sprawdzanych przeze mnie firm i numerów bankowych. Zakładam, że robię coś źle (kierowałem się przykładem podanym w specyfikacji pliku, gdzie podobny algorytm działa). Czy mógłby ktoś wskazać mi co jest nie tak? Próbowałem również zapętlić funkcję skrótu (wg danych z nagłówka) 5000 razy, ale powstaje również hash nie znajdujący się na żadnej liście.

Linki:
Generator hashy: https://passwordsgenerator.net/sha512-hash-generator/
Specyfikacja pliku: https://www.gov.pl/attachment/9b8daadb- ... c5ac991cb0
Dane testowe i plik testowy (na dole strony w materiałach): https://www.gov.pl/web/kas/plik-plaski

Z góry dzięki,
Damian
kiepski programista
Posty: 1
Rejestracja: wt gru 10, 2019 1:47 pm
Been thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: kiepski programista »

Spróbuj tak:

CONCATENATE i_date i_nip i_iban INTO inp_string.

DO 5000 TIMES.
TRY.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA512'
if_data = inp_string
IMPORTING
ef_hashstring = out_string.
CATCH cx_abap_message_digest .
" ...
ENDTRY.

TRANSLATE out_string TO LOWER CASE.

inp_string = out_string.
ENDDO.
Destylator
Posty: 3
Rejestracja: czw sty 22, 2015 2:58 pm

Re: Biała lista podatników VAT: Plik Płaski

Post autor: Destylator »

Cześć,

Dzięki, tak to miałem ogarnięte. Problem już rozwiązany :D Brakowało mi własnie translacji "TO LOWER CASE".

Dzięki mimo wszystko.

Pzdr,
Damian
marcs_1
Posty: 6
Rejestracja: czw gru 19, 2019 4:58 am
Been thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: marcs_1 »

A mi to nie działa.
Dla tego samego przykładu co poprzednik , wychodzi mi taka sama suma kontrolna .
Brałem już przykłady "bez maski" , "z maską" i nie umiem tego poprawnie
I nie znajduje jej w przykładowym jsonie...
Oczywiście jest "lower case".
Jakiś bug czy co ?
bulikd
Posty: 3
Rejestracja: czw gru 19, 2019 9:05 am
Has thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: bulikd »

Witam.

Ja również mam ten sam problem.

Zaimplementowałem rozwiązanie z poniższego postu, w system SAP na którym pracuję.
kiepski programista pisze: wt gru 10, 2019 1:59 pm Spróbuj tak:

CONCATENATE i_date i_nip i_iban INTO inp_string.

DO 5000 TIMES.
TRY.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA512'
if_data = inp_string
IMPORTING
ef_hashstring = out_string.
CATCH cx_abap_message_digest .
" ...
ENDTRY.

TRANSLATE out_string TO LOWER CASE.

inp_string = out_string.
ENDDO.
Dla przykładu z danych testowych:
Data: 20191121
NIP: 9810000054
Konto Bankowe: 70102035709724546729803218

Niezależnie od tego czy metoda cl_abap_message_digest=>calculate_hash_for_char wykona się raz, czy 5000 razy, wynik jest zawsze taki sam, a dokładnie taki:
bd191bd8e7a486622221aeaabfc1aa4d093ec09e7dd99a9e69f2c4da6bab3a0c5f2bac


Niestety, otrzymany ciąg znaków nie zostaję znaleziony w przykładowym pliku JSON.

Pozdrawiam,
Damian
marcs_1
Posty: 6
Rejestracja: czw gru 19, 2019 4:58 am
Been thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: marcs_1 »

Mam to samo..Dziękuję za odpowiedź.
marcs_1
Posty: 6
Rejestracja: czw gru 19, 2019 4:58 am
Been thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: marcs_1 »

Ok już wiem.
Musisz to co wyliczyleś dalej puścić funkcją SHA512 i tak 5000 razy.
U mnie zadziało.
bulikd
Posty: 3
Rejestracja: czw gru 19, 2019 9:05 am
Has thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: bulikd »

Serdeczne dzięki marcs_1.

To było dokładnie to, czego mi brakowało.

Teraz już znajduję wartości w pliku z danymi testowymi.

Pozdrawiam
Damian
marcs_1
Posty: 6
Rejestracja: czw gru 19, 2019 4:58 am
Been thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: marcs_1 »

:) bardzo się cieszę ,że zadziałało ... Nigdy bym na to nie wpadł. Podpowiedział mi to kolega z grupy.
Wesołych Świąt.
Destylator
Posty: 3
Rejestracja: czw sty 22, 2015 2:58 pm

Re: Biała lista podatników VAT: Plik Płaski

Post autor: Destylator »

Cześć,

Dodam tylko, że SAP zobowiązał się dostarczyć do końca stycznia własne rozwiązanie opierające się na SAP cloud integration platform. Ale nie znamy szczegółów, no i cały styczeń jesteśmy pozostawieni sami sobie.

Pzdr i wesołych świąt
marcs_1
Posty: 6
Rejestracja: czw gru 19, 2019 4:58 am
Been thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: marcs_1 »

Ja Dynamics :) Ale to nie ma znaczenia :)
dominik.tylczynski
Posty: 7666
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1499 times
Been thanked: 1248 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: dominik.tylczynski »

Destylator pisze: czw gru 19, 2019 1:58 pm Cześć,

Dodam tylko, że SAP zobowiązał się dostarczyć do końca stycznia własne rozwiązanie opierające się na SAP cloud integration platform. Ale nie znamy szczegółów, no i cały styczeń jesteśmy pozostawieni sami sobie.

Pzdr i wesołych świąt
Ciekawe to co piszesz. Jestem na 99.9% pewny, że ta funkcjonalność była poza zakresem: "White List" register of taxpayers

Ciekaw jestem co spowodowało zmianę stanowiska SAP?
pietaszek
Posty: 22
Rejestracja: pt gru 09, 2016 12:04 pm
Has thanked: 1 time
Been thanked: 20 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: pietaszek »

mam taką informację wprost z SAP Polska


Termin realizacji: 29.01.2020.
Rozwiązanie będzie dostarczone w ramach utrzymania.
Będzie konieczność dokupić licencje dla szyny danych ( wymiana komunikatów):
• SAP Cloud Platform Integration, PI Edition” (material number 8004740) – 2 units (prod and test)
• SAP Cloud Platform bandwidth (material number 8000351) - 1 unit (10GB)


Opis, daty i status może sprawdzać na stronie: https://launchpad.support.sap.com/#/leg ... Expanded/0.


kłopot w tym, że trzeba to jeszcze poustawiać i posprawdzać, czyli na dwa miesiące (optymistyczne podejście) potrzebne jest dodatkowe narzędzie.....
vegeta73
Posty: 3
Rejestracja: śr sty 08, 2020 11:52 am

Re: Biała lista podatników VAT: Plik Płaski

Post autor: vegeta73 »

marcs_1 pisze: czw gru 19, 2019 12:13 pm Ok już wiem.
Musisz to co wyliczyleś dalej puścić funkcją SHA512 i tak 5000 razy.
U mnie zadziało.
Witam,

mógłby Ktoś z tym pomóc bo nie zupełnie rozumiem. Tzn rozumiem ale mi nie działa. Robie to w Javie. Gdy robie pierwszy skrót to jest taki jaki Wy piszecie na forum (bd191bd8e7a486622221aeaabfc1aa4d093ec09e7dd99a9e69f2c4da6bab3a0c5f2bacf905311340c27671641a3edf221ef6a2ea6805e9c5a4ecf26281c89b78)
Następnie wywołuje funkcje ponownie na tym Skrócie i znowu na tym nowo powstałym i tak 5000 razy i sprawdzam za każdym razem i żaden nie pasuje do tych z pliku testowego.
w dużym skrócie tak to dziala:

last = encryptThisString("20191121981000005470102035709724546729803218");
wykonaj 4999 razy : last = encryptThisString(last);
marcs_1
Posty: 6
Rejestracja: czw gru 19, 2019 4:58 am
Been thanked: 2 times

Re: Biała lista podatników VAT: Plik Płaski

Post autor: marcs_1 »

masz ciąg znaków (przyklad prawdziwy)
20200108 NIP 5272472856 i rachunek 06 1840 0007 2614 0080 0819 0310
cały ciąg to 20200108527247285606184000072614008008190310
pierwszy hash to 30155ab51616f3ecafbdca9520f8b11ff6f6c3795af360ce65268c27dd1a39dc733a124cbc920c017b6e9bbbca3ee860a295c60ddc2b56680aae94c1dc8121d1
ale wynikowy hash to
d243981174cf00199544794effc5e887b0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0cf2c36876d98f2f50207d46c1f4b351da24f
I ten jest znajdowany
<--
cat 20200108.json | grep 0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0c
"d243981174cf00199544794effc5e887b0edbcf7e5ed304e4312216b33a5f6ad3bab4dd5cb420b3b79edc6546d0cf2c36876d98f2f50207d46c1f4b351da24f9",
-->

Podaję kod z Dynamicsa :)
public str CalculateHash1()
{

str s;
ClrObject obj;
//str tb = "20191219527247285609160011561847077970000001";
str tb = "20200108527247285606184000072614008008190310";
ClrObject SHA256;
System.Text.StringBuilder sBuilder;
ClrObject clrStr;
ClrObject clrStrObject;
System.Exception clrException;
System.Array resultByteArray;
int i;
int p;
int arrayLength ;
InteropPermission perm;
perm = new InteropPermission(InteropKind::ClrInterop);
perm.assert();
for (p=1; p<=5000; p+=1)
{
{

obj = System.Text.Encoding::get_ASCII().GetBytes(tb);
SHA256 = System.Security.Cryptography.SHA512::Create();
resultByteArray = SHA256.ComputeHash(obj);
//BP deviation documented
sBuilder = new System.Text.StringBuilder();
arrayLength = resultByteArray.get_Length() ;
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (i = 0; i <arrayLength; i++)
{
clrStrObject = resultByteArray.GetValue(i);
clrStr = clrStrObject.ToString('x2');
sBuilder.Append(clrStr);
}

// Return the hexadecimal string.
s = sBuilder.ToString();
}


CodeAccessPermission::revertAssert();

tb = s;
}
info(s);
return s;



}