h4kuna / ares

Download information about companies from ARES, PSR-17 ready
47 stars 16 forks source link

ARES XML služby končí k 1.1.2024 #30

Closed BigOHenry closed 12 months ago

BigOHenry commented 1 year ago

Nový ares (REST API): zdroj

Vážení uživatelé, tímto vám oznamujeme, že jsme spustili pilotní provoz modernizovaného Informačního systému ARES, který je dostupný na adrese "ares.gov.cz".

Technickou dokumentaci - katalog veřejných služeb pro vývojáře je možné získat:

ARES-Technicka-dokumentace-Katalog-verejnych-sluzeb (PDF, 1183 kB) AresRestApi-verejne (.JSON, 326 kB)

Původní i modernizovaný systém bude provozován souběžně do 30. 9. 2023. Nezbytné změny doporučujeme provést co nejdříve. V případě dotazů se prosím obracejte na email: aresmfcr@mfcr.cz

h4kuna commented 1 year ago

Pěkný, to je pro mě celkem šibeniční termín. S tím abych to nastudoval a zajistil zpětnou kompatibilitu.

h4kuna commented 1 year ago

Vývoj je ve větvi 3.x

BigOHenry commented 1 year ago

Ten jeden měsíc je za mě nepochopitelnej. Nevím proč tak spěchají.

josefsabl commented 1 year ago

Vývoj je ve větvi 3.x

Prosím, v jakém stádiu je vývoj? Je to již nějak použitelné v alpha režimu? Pracuji na nové aplikaci, kde ARES využijeme, tak bych byl early adopter nové verze a mohl nějak pomoci s vychytáváním much 😄 .

h4kuna commented 1 year ago

Teď jsem to dodělal do stavu, že to implementuju do aplikace a nechám to tak týden běžet. Takže pokud chceš, můžeš

composer require h4kuna/ares:3.x-dev

Příklad v dokumentaci je funkční.

h4kuna commented 1 year ago

Tak oficiálně je to připravené na alfa testování, není tam nic co bych chtěl implementovat.

BigOHenry commented 1 year ago

Díky. Vypadá to že základ funguje. Jen ještě otázka, máš v plánu implementovat další endpointy? (RES, VR, atd.). Aspoň jako obecnou metodu kam člověk dá ičo, zvolí endpoint a vrátí to raw JSON

EDIT: Dobrý, už jsem našel :-)

h4kuna commented 1 year ago

Super že jsi to našel, nicméně i sem přidám odkaz na changelog

BigOHenry commented 1 year ago

Narazil jsem na jednu věc. Plátce DPH.

$data->tin = Strings::trimNull($json->dic ?? null);
$data->vat_payer = (bool) $data->tin;

To, že má osoba DIČ ještě neznamená že je plátce DPH. Může být jen jako identifikovaná osoba. Hodnota atributu vat_payer je tedy za mě špatně.

Hodnota plátce DPH vrací pouze ekonomicke-subjekty-szr -> zaznamSzr -> platceDPH

h4kuna commented 1 year ago

To znamená udělat dotaz na další endpoint... tomu jsem se chtěl vyhnout

hubipe commented 1 year ago

@BigOHenry To je hloupost, ekonomicke-subjekty-szr je endpoint pro Záznamy Zemědělského registru. Firmy a živnostníci tam nebudou. Obávám se, že ARES vůbec informaci o plátcovství DPH nezná. Na ověření plátce DPH slouží VIES.

@h4kuna V changelogu píšeš:

zmizela metoda isGroupVat() ARES již vrací DIČ pro skupinové DPH

Jenže ARES vrací DIČ pro skupinové DPH chybně...

Viz např.: https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/02445344 - ARES vrací DIČ 02445344, ale správné DIČ subjektu je CZ699004845 nebo: https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/49240901 - ARES vrací DIČ 49240901, ale správné DIČ subjektu je CZ699003154

Psal jsem před chvílí na aresmfcr@mfcr.cz s dotazem, jestli bude ARES vracet správná DIČ v případě skupinových registrací k DPH. Uvidíme co odpoví, jestli odpoví...

BigOHenry commented 1 year ago

@hubipe Co je hloupost? Vyhodnocení plátce DPH je špatně implementované. Nepsal jsem že szr vrací vše, jen jsem napsal který endpoint to vrací :-)

Jinak máš pravdu, ARES (žádný endpoint) tedy nevrací plátce DPH pro všechny subjekty.

Také potvrzuji špatné skupinové DIČ. Díky a dej pak prosím vědět až odpoví (jestli) :-)

@h4kuna Bude to tedy spíše o tom atribut vat_payer úplně vyhodit.

mabar commented 1 year ago

Vyhazovat se nemusí, ale místo ano/ne to bude možná/ne

SvatoplukHus commented 1 year ago

@mabar Informace "možná" je poměrně málo použitelná.

Správné je nevracet info o plátcovství DPH, protože ho Ares neposkytuje.

Dedukovat nepřesné informace je asi mimo scope této knihovny.

h4kuna commented 1 year ago

@hubipe to jsem napsal. Měl jsem IČO v testech, který začalo dávat správný data, ale hlavní důvod je že odebrali parametr psu, kde to bylo extra uvedený. Navíc vraceli místo DIČ text Skupinove_DPH to taky už není. V tuto chvíli nevím čeho se chytit.

pionl commented 1 year ago

@SvatoplukHus nemyslím si že je to mimo scope knihovny. Obecně ARES knihovnu použiješ aby si doplnil fakturační údaje a potřebuješ identifikaci i o DPH :)

Co se týče jak evidovat typ DPH, tak bych šel jak to má ISDOC (a my interně).

case ValueAddedTax = 'VAT';
case TaxIdentificationNumber = 'TIN';

nebo null.

:)

BigOHenry commented 1 year ago

@SvatoplukHus má podle mě pravdu. @pionl Jenže to že má někdo DIČ, neznamená vůbec nic. Já třeba DIČ mám, ale plátce DPH nejsem (identifikovaná osoba). Je hromada případů kdy DIČ osoby mají a plátci nejsou. A jak psal @hubipe "Na ověření plátce DPH slouží VIES." A my ho také na to používáme. Za mě není důvod, aby si tahle super knihovna vymýšlela data :-)

A né každý používá tuto knihovnu na doplnění fakturačních údajů. Někdo ji třeba používá i v jiném prostředí, kde ty data MUSÍ být správná.

h4kuna commented 1 year ago

Říkám si zda by se nedalo chytit, zda je plátce DPH či není seznamRegistraci { "stavZdrojeDph":"AKTIVNI"} @BigOHenry jaký máš IČO?


Z historických důvodů jsem držel kompatibilitu a ponechal některé možnosti. Je potřeba mít možnost třídu Data vyměnitelnou za vlastní entitu?

Je potřeba mít možnost ovlivnit plnění entity?

BigOHenry commented 1 year ago

@h4kuna Hele to je otázka. Možná by tam cesta byla. Moje ičo je: 05560438

h4kuna commented 1 year ago

@BigOHenry cesta tam není :) u tebe jako identifikované osoby je uveden "stavZdrojeDph":"AKTIVNI" viz https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/05560438

BigOHenry commented 1 year ago

@h4kuna Taky jsem koukal. Bohužel není.

hubipe commented 1 year ago

@BigOHenry @h4kuna Koukám na to tvé DIČ. Na stránkách MFČR je v registru DPH skutečně tvoje DIČ uvedeno, jako identifikovaná osoba: image narozdíl třeba ode mě, kde je uvedeno plátce: image

VIES však tvé DIČ potvrdí, jako plátce: image

Tedy z mého pohledu, když by knihovna zachovala příznak _vatpayer, pak je za mě validní, aby v případě identifikovaných osob vracela TRUE. (Protože pokud někomu vystavuješ fakturu, přidáváš na ni DPH, které si může plátce DPH odpočítat, je to tak?) Ale stále nejsem přesvědčen o tom, že by knihovna pro vytahování dat z ARESu měla vůbec tuto property vracet. Stejně to není směrodatné a důležité je to, co vrací VIES.

BigOHenry commented 1 year ago

@hubipe Právě že DPH nepřidávám. Identifikovanou osobou jsem proto, protože kupiji služby z jiných členských států EU (reklamy Meta, Google, atd.) a oni když vystavují fakturu, tak ji vystavují bez DPH. Já pak toto DPH musím dopočítat z té částky a odvést za ně. To je vše. Když vystavuji fakturu jako dodavatel, tak ji mám bez DPH (s informací že nejsem plátce DPH) a nedělám ani kontrolní hlášení.

hubipe commented 1 year ago

@BigOHenry Aha, takže pro zahraniční plátce se identifikovaná osoba chová jako plátce DPH (vystavují faktury v režimu přenesené daňové povinnosti), ale v tuzemském styku identifikovaná osoba nevystupuje jako plátce DPH, takže potenciální příjemce tvých služeb si DPH odpočítat nemůže. Koukám ještě do starého ARESu, a tam v tagu PSU jsi také označen příznakem A pro registr DPH. Tzn. vlastně nový ARES vrací to stejné, co starý ARES a to stejné, co VIES — jen to, jestli jsi nebo nejsi v registru DPH, nikoliv v jakém režimu tam jsi. Takže ve dvojkové verzi knihovny jsi (nejspíš) taky označen jako _vatpayer. Takže pokud @h4kuna příznak v ARES _vatpayer ponechá, pak mi přijde, že by se měl chovat stejně, jako ve dvojkové verzi - tzn. vracet TRUE, pokud existuje záznam v registru DPH, tedy "stavZdrojeDph":"AKTIVNI". Ale je pravdou, že pro identifikované osoby je to zavádějící.

BigOHenry commented 1 year ago

@hubipe Ano, ve dvojkové verzi jsem označen jako vat_payer.

No ona je pak další otázka, jestli nejsou nějaké případy, kdy osoba má DIČ, ale z nějakého důvodu plátce není. Například že byl a již plátce není, ale DIČ mu zůstává. Ale to jsou hypotetické scénáře, u kterých netuším jestli jsou reálné. To by se dalo případně kombinovat se stavZdrojeDph jak píšeš.

h4kuna commented 1 year ago

Stav zdroje jsem upravil. Jestli jsi nebo nejsi identifikovaná osoba už nejde zjistit. Vlastnosti jsem označil jako deprecated, ale zatím je neplánuju odebrat. K vlastnostem jsem napsal info.

h4kuna commented 1 year ago

Identifikovaná osoba půjde zjistit z API (alespoň doufám) to bych chtěl dodělat. Fór je v tom že tam je SOAP, problém to není, jen co služba to jiná technologie. Pokud by chtěl někdo na tom začít dělat, bylo by to fajn :)

Pokud bych napojil i VIES, tak bych mohl dát dohromady všechny relevantní data :) K tomu aby se správně předvyplňoval formulář pro našeptávání. Jen nevím jak vyřešit staré DIČ? viz ARES vrací DIČ 49240901, ale správné DIČ subjektu je CZ699003154

h4kuna commented 1 year ago

@BigOHenry na starých datech máš taky DIČ https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=05560438 takže jsi byl vždy vat_payer podle knihovny. Ta detekce se chovala stejně i předtím. Jen to nikdo N let neřešil :)

BigOHenry commented 1 year ago

@h4kuna Je to tak a navíc DIČ mám tak max rok, takže jsem to předtím neřešil (a nic moc jsem o tom ani nevěděl) :)

h4kuna commented 1 year ago

Ono v 90-95% případů budou data správně.

BigOHenry commented 1 year ago

@h4kuna Tady jsem vyhrabal starou a basic, ale funkční implementaci ADIS. Nevím jestli ti k něčemu bude ale dám ji sem :)

$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
            <soapenv:Body>
            <StatusNespolehlivyPlatceRequest xmlns="http://adis.mfcr.cz/rozhraniCRPDPH/">
            <dic>'.$dic.'</dic>
            </StatusNespolehlivyPlatceRequest>
            </soapenv:Body>
            </soapenv:Envelope>';

$request = curl_init();

$url = 'http://adisrws.mfcr.cz/adistc/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP';

curl_setopt($request, CURLOPT_URL, $url);
curl_setopt($request, CURLOPT_CAINFO, $this->wwwDir . "/../resources/API/cacert.pem");

if($this->serviceModel->isProxy()) {
    curl_setopt($request, CURLOPT_USERPWD, $this->domain_user['user'] . ":" . $this->domain_user['password']);
    curl_setopt($request, CURLOPT_PROXY, $this->https_proxy['host'].':'.$this->https_proxy['port']);
}

$headers = array(
    'Content-Type:text/xml',
);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);

curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_CONNECTTIMEOUT ,400);
curl_setopt($request, CURLOPT_TIMEOUT, 400);

curl_setopt( $request, CURLOPT_POST, true );

curl_setopt($request, CURLOPT_POSTFIELDS, $xml);

$result_main = curl_exec($request);
$result = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $result_main);

$saved  = libxml_use_internal_errors(true);
$xml = simplexml_load_string($result);
$errors = libxml_get_errors();
libxml_use_internal_errors($saved);

if ($xml === false) {
    if(count($errors) > 0) {
        // log $errors
    } else if (curl_errno($request)) {
        // log curl_error($request)
    } else {
        // log $result_main
    }

    curl_close($request);
} else {
    if (curl_errno($request)) {
        // log curl_errno($request)
    } else {
        $json = json_encode($xml);
        $data = json_decode($json, true);
        // $data obsahují data z response jako pole
    }
}
hubipe commented 1 year ago

@h4kuna Potvrzuju; teď jsem zkoušel ten SOAP, a typ registrace jde vytáhnout za předpokladu, že známe DIČ:

$soap = new SoapClient('https://adisrws.mfcr.cz/dpr/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP');
dumpe($soap->getStatusNespolehlivySubjektRozsireny(['dic' => '8702080024']));

v response je pak typSubjektu, který podle dokumentace může nabývat hodnot:

<xsd:enumeration value="PLATCE_DPH"/>
<xsd:enumeration value="IDENTIFIKOVANA_OSOBA"/>
<xsd:enumeration value="NENALEZEN"/>

image

Ale stejně to neřeší skupinové DPH, u kterého prostě z ARESu DIČ skupiny nedostaneme. A i kdyby, tak ho SOAP API nespolehlivých plátců neověří... Pěknej bordel v té státní správě mají. image image

hubipe commented 1 year ago

Dobrá zpráva, odepsali mi z MFČR:

Dobrý den, o požadavku na Skupinové DPH víme a pracujeme na tom. Snažíme se o to, aby se vracelo DIČ skupiny nikoliv pouze text „Skupinove_DPH“. Tyto údaje přebíráme z Generálního finančního ředitelství, které nám již zaslalo testovací dávku, kterou nyní analyzujeme a snažíme se najít vhodné řešení.

S pozdravem Jan Sádlík oddělení Informační systémy |Information Systems MINISTERSTVO FINANCÍ | MINISTRY OF FINANCE Letenská 15, 118 10 Praha | Prague – Czech Republic

h4kuna commented 1 year ago

Přidal jsem ADIS jako další službu s tím že to zatím nijak neovlivňuje výsledky z ARESu. @BigOHenry použil jsem pro inspiraci ten kód, protože lze pak použít PSR standardy, namísto nativní SoapClient.

h4kuna commented 1 year ago

Doplnil jsem, aby ADIS validoval výsledky z ARESu. Přehledná tabulka

nufue commented 12 months ago

FYI

Na základě zpětné vazby jsme se rozhodli prodloužit souběžný provoz původního a modernizovaného informačního systému ARES do 31. 10. 2023.

h4kuna commented 12 months ago

Pokud používáte již tuto alfa verzi, doporučuji aktualizovat, změnili vstupní data a knihovna se chová špatně. Již opraveno #35 odebral jsem vlastnost Data::$vat_id

h4kuna commented 12 months ago

Vydána verze 3.0.0

hubipe commented 11 months ago

Jen pro info – vypnutí starého ARESu se odkládá na konec roku. Co se týče skupinových registrací k DPH, tak to v novém ARESu ještě pořád neimplementovali.

arziel12 commented 9 months ago

FIY: DIČ má u nás každý subjekt, získáváš ho při registraci na FÚ k dani z příjmu a je to identifikátor se kterým se s FÚ komunikuje i jako neplátce DPH. Takže úplně správně by ho měl vracet každý kontakt, ale jak víme, mají v tom registru bordel hlavně oni :)

h4kuna commented 9 months ago

Je to pravda, ale já ten DIČ pro neplátce nedostanu... Viz. https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/08975884

h4kuna commented 7 months ago

Dobrá zpráva, odepsali mi z MFČR:

Dobrý den, o požadavku na Skupinové DPH víme a pracujeme na tom. Snažíme se o to, aby se vracelo DIČ skupiny nikoliv pouze text „Skupinove_DPH“. Tyto údaje přebíráme z Generálního finančního ředitelství, které nám již zaslalo testovací dávku, kterou nyní analyzujeme a snažíme se najít vhodné řešení. S pozdravem Jan Sádlík oddělení Informační systémy |Information Systems MINISTERSTVO FINANCÍ | MINISTRY OF FINANCE Letenská 15, 118 10 Praha | Prague – Czech Republic

Vypadá to že vše funguje, již dostávám skupinové DIČ.