Skip to content

anaf-sync 0.4.0 — facturile care refuzau să se citească

Choose a tag to compare

@github-actions github-actions released this 28 Jul 22:03

anafpy 0.7.0 repară citirea facturilor pe care validarea prea strictă le
golea de date, fereastra Facturi arată data încărcării în SPV și numără
întârzierea în zile lucrătoare, iar tray-ul nu mai ține terminalul ocupat. /
anafpy 0.7.0 separates reading from authoring so real invoices no longer
collapse to unknown; the Facturi window gains the SPV upload date and a
working-day delay rule; the tray frees the terminal it was launched from.

Versiunea 0.3.2 a fost pregătită, dar nu a fost niciodată publicată —
conținutul ei (ritmul programării în schedule status, versiunea corectă în
bundle-ul de macOS) este inclus aici.

Remedieri

Facturile reale nu mai ajung unknown_unknown_unknown. Cititorul din
anafpy aplica documentelor primite de la ANAF regulile de construcție ale
modelelor de emitere, așa că un inbox real de 85 de facturi se citea în
zero: fiecare se arhiva cu number, issue_date și partner_name prăbușite
în unknown și se fișa ca unknown_unknown_unknown_<id>. anafpy 0.7.0 face
din citire și emitere contracte diferite
(anafpy#9), iar toate cele
85 se citesc acum. Arhiva nu a pierdut nimic — ZIP-urile semnate erau intacte,
doar numele fișierelor și catalogul purtau unknown; un anaf-sync backfill
peste folderul respectiv le catalogează acum pe toate.

Un document care tot nu se citește nu mai tace. Până acum, avertismentul
cititorului ajungea pe stderr — pe o rulare programată, adică nicăieri. Acum
sincronizarea îl consemnează în jurnal (view_unreadable) și arhivează
documentul oricum: ZIP-ul semnat e scopul, iar a-l refuza ar fi mai rău decât
a-l fișa cu câmpuri goale. backfill numără aceste documente separat
(unreadable, distinct de not_ubl, care până acum le absorbea pe amândouă),
iar CLI-ul tipărește contorul doar când e diferit de zero — ca semnalul de
eroare care este, nu ca încă o statistică.

Îmbunătățiri

Fereastra Facturi arată data încărcării în SPV. O coloană nouă,
Încărcată, stă lângă data emiterii — redenumită Emisă, pentru că un simplu
„Data" devenise ambiguu. Semnalul de întârziere se mută de la 5 zile
calendaristice la 5 zile lucrătoare între emitere și încărcare, numărate
luni–vineri — așa cum e formulat termenul de raportare e-Factura; sărbătorile
legale nu sunt modelate, deliberat. Evidențierea chihlimbarie se mută pe
celula Încărcată — chiar faptul întârziat. O factură marcată până acum ca
întârziată poate să nu mai fie: regula s-a schimbat, nu datele.

Tray-ul eliberează terminalul. Pe Windows, anaf-sync-tray rulează acum
sub pythonw: nicio fereastră de consolă — nici din shell, nici la pornirea
automată la login — iar prompt-ul revine imediat. Pe macOS și Linux, pornit
dintr-un terminal, tray-ul se desprinde într-o sesiune proprie și îți dă
terminalul înapoi; închiderea terminalului nu mai închide tray-ul.
--foreground păstrează comportamentul atașat pentru depanare, iar
contextele fără terminal (launchd, autostart XDG) rulează atașat în
continuare, ca managerul de procese să vadă adevărul.

schedule status arată ritmul, nu doar existența programării. Până acum,
rândul schedule: confirma doar că un job e instalat — dacă îl instalaseși cu
--every 6h acum trei luni, singura cale să afli era să deschizi tu plist-ul,
unitatea systemd sau Task Scheduler. Acum ritmul e citit chiar din
planificator și tipărit lângă stare, cu expresia cron echivalentă atunci când
una se potrivește:

launchd agent ro.anaf-sync.sync: loaded — runs daily at 07:30 (cron: 30 7 * * *)

Sursa adevărului rămâne sistemul de operare; un registru propriu ar fi
însemnat încă un lucru care se poate desincroniza tăcut. Două precizări
despre expresia cron: descrie ritmul, nu punctul de pornire (un interval
instalat cu --every se numără de la momentul instalării, deci orele reale
sunt aproape sigur decalate față de grila cron) și apare doar când e exactă —
pentru --every 45m sau --every 2d nu se afișează nicio expresie, pentru că
una familiară dar greșită e mai rea decât niciuna.

Internal

  • The macOS bundle derives its version from the package it bundles.
    CFBundleShortVersionString was a hand-written literal in the PyInstaller
    spec, stale the moment it was written — every .app between v0.1.3 and
    v0.3.1 reported 0.1.3 to the Finder. The spec now imports the installed
    anaf_sync version and passes it through PyInstaller's version= kwarg,
    so the .app and the release can no longer disagree.
  • The Facturi header-state key is versioned, so a column layout saved by
    an older tray is not replayed onto the six-column table; the saved layout
    resets once.

⚠️ The bundles are unsigned — no macOS notarization, no Windows
Authenticode. First run triggers the usual OS warning; use the
right-click-open workaround documented in the README. The CLI on PyPI
(pip install anaf-sync) is unaffected.

Full changelog: v0.3.1...v0.4.0