Bug roku 2010

4. 1. 2010 17:10 (aktualizováno) Josef Pavlík

Kdo si myslel, že když úspěšně přežil přechod z roku 1999 na rok 2000, že teď může klidně spát minimálně do roku 2038 kdy přetečou 32 bitové unixové time_t, ten se mýlil.

Něco o tom ví italský výrobce registračních pokladen Custom Engineering. Jeho kasy přešly z roku 2009 přímo do roku 2016. Jedná se (neověřeno) o přibližně 43000 strojů. Poznámka ‚neověřeno‘ se vztahuje pouze k počtu problémových strojů. Bug samotný je ověřen, viz fotografie. Jednu takovou kasu máme v kanceláři. fotografie

S největší pravděpodobností jde o to, že RTC jede v BCD (jako ostatně drtivá většina těchto součástek), ale program tuto hodnotu interpretuje jako binární číslo. Takže RTC přešlo z 9 na 10, ale program to přečetl jako 0×10.

Problém je komplikovanější, než by se mohlo na první pohled zdát. Tyto kasy jsou vybaveny fiskální pamětí, do které se ukládají informace o uzávěrkách.

Kdo si problému všiml okamžitě, dřív než vydal první účtenku, mohl jednoduše opravit datum. Jestli to ovšem jde. Vzhledem k povaze bugu to pravděpodobně ani nepůjde. (na naší kase jsem zatím raději nic nezkoušel) Tito klienti tedy budou muset počkat na upgrade firmware.

Ti, co už udělali aspoň jednu účtenku jsou v poněkud horší situaci. Kasa nedovolí změnit datum a čas pokud se předtím neudělá uzávěrka, což je v tomto případě to nejhorší, co človek může udělat, viz další odstavec. Tito klienti budou muset nechat resetnout kasu a upgradnout firmware.

Ten, kdo už udělal uzávěrku je v nezáviděníhodné situaci. Tato situace je nezáviděníhodná především pro výrobce tohoto stroje. Kasa totiž za žádných okolností nedovolí vrátit se s datumem před předchozí uzávěrku. Něco o tom vím, protože díky bugu v mém programu jsem poslal 2 kasy do roku 2020 (v paketu na změnu datumu se měl poslat rok jenom dvoumístně, ne čtyřmístně jak jsem posílal :-) ).

V takovém případě se dá udělat jenom jedna věc. Poslat kasu výrobci a ten v ní vymění fiskální paměť. Tím ovšem starosti nekončí. Je to jako by klient koupil novou kasu (má nové číslo). V takovém případě se podle italských zákonů musí stará kasa odhlásit a přihlásit nová. Obnáší to mimo jiné i poslání doporučeného dopisu na finanční úřad.

Otázka je, jak si s tím výrobce poradí. Ono už jenom resetnutí kasy a upgrade firmware není věc, kterou by zákazník mohl udělat sám. Na to musí zavolat autorizovaného technika, kasa se odplombuje, udělá se co je potřeba, zase se zaplombuje a zapíše se o tom zápis do fiskální knihy, která je nedílnou součástí každé kasy. (Třeba jenom ztráta tohoto sešitu je záležitost, která by vydala na další článek.)

Sdílet