v0.16.2 — 31 markets, 28 i18n tables
Added
-
**Phase E: BG Bulgaria + HR Croatia + SI Slovenia + EE Estonia + LV Latvia
- LT Lithuania + MT Malta + CY Cyprus** — eight more EUR-market profiles
(twenty-four live): research briefs at
docs-research/{bg,hr,si,ee,lv,lt,mt,cy}-profile.md(EAS codes verified
against the official OpenPEPPOL codelist release 8 Dec 2025 — BG 9926,
HR 9934, SI 9949, EE 9931, LV 9939, LT 9937, MT 9943, CY 9928);
monthly VAT returns (BG 14th, HR/SI/EE/LV 20th, LT 25th; MT/CY
quarterly 15th/10th of the second month), annual-accounts + CIT
deadlines per market (BG 30 Jun, HR 30 Apr, SI 31 Aug/31 Mar, EE 30 Jun
(CIT on distributions), LV 31 Jul (CIT on distributions), LT 30 Apr/1
Oct, MT 10/9 months, CY 10 months/31 Jan+2y). New markets keep
English-document defaults (no i18n tables yet — same treatment as
GB/IE/US) and inherit the art. 226 EU baseline + cross-border Peppol
BIS; domestic e-invoicing mandates (e-Sąskaita LT, PVN LV 2025
framework) and return layouts stay documented B-milestones.
- LT Lithuania + MT Malta + CY Cyprus** — eight more EUR-market profiles
-
**Phase F: CZ Czechia + SK Slovakia + GR Greece + PL Poland + HU Hungary
- RO Romania** — the final six EU members (thirty live markets; 27/27 EU
- GB/NO/US): research briefs at
docs-research/{cz,sk,gr,pl,hu,ro}-profile.md(EAS codes verified
against the official OpenPEPPOL codelist release 8 Dec 2025 — CZ 9929,
SK 9950, GR 9933, PL 9945, HU 9910, RO 9947); monthly VAT returns
(CZ/SK/PL/RO 25th, GR 26th, HU 20th), annual-accounts + CIT deadlines
per market (CZ 6mo/31 Mar, SK 6mo/31 Mar, GR 10mo/30 Jun, PL 6mo/31
Mar, HU 31 May/31 May, RO ~150d/25 Jun); CZK/PLN/HUF/RON base
currencies via per-profile baseCurrency; GR uses the EL VIES prefix;
RO is the only non-Peppol market (e-Factura national, cross-border UBL
only); domestic mandates (KSeF PL — live 2026, RTIR HU, myDATA GR,
e-Factura RO, SK 2027) stay documented B-milestones. English-document
defaults; art. 226 EU baseline + cross-border Peppol BIS inherited.
-
i18n refactor: per-language table modules —
src/i18n/index.js's
singleTABLESliteral split intosrc/i18n/locales/<lang>.js(one
module per language: en/nl/nl-be/de/fr/fr-lu/da/fi/nb/sv/it/es/pt);
index.jskeeps the machinery (t/label/unitLabel/resolveLocale,
LABELS/UNITS backwards-compat exports) and re-assemblesTABLESfrom
imports. Public API unchanged; keys/values byte-identical; the parity
guard still pins 89 keys across all 11 full tables. Behavior-neutral —
944/944 green. -
i18n: 14 national-language PDF tables — full 89-key tables for
pl/cs/hu/ro/sk/sl/hr/bg/el/et/lv/lt/mt/cy undersrc/i18n/locales/
(25 full tables + 2 regional overrides; parity guard extended). The
Phase E/F profiles now render documents in their national language by
default (PLpl, CZcs, SKsk, GRel, HUhu, ROro, BGbg,
HRhr, SIsl, EEet, LVlv, LTlt, MTmt, CYcy) — the
invoice PDF/email pipeline is fully localized for all 30 markets;
--languageaccepts any of the 27 table codes.meta.localealigned
to ISO language codes (si->sl, ee->et, cz->cs, gr->el). -
Phase G: Kosovo (XK) — 31st market. Non-EU EUR jurisdiction
(unilateral euro adoption), SKRFI convention chart in Albanian, VAT
18%/8% (monthly returns by the 20th), CIT + annual accounts by 31 March
(10% flat CIT), Sh.p.k./Sh.a./O.P./K.P./B.I. legal forms, NBR
(8-digit) + K-prefixed VAT identifiers. Not a Peppol participant —
cross-border EN 16931 UBL emission only. Full Albanian (sq) i18n table
(26 full + 2 regional overrides); documents render in Albanian by default.
Full changelog: CHANGELOG.md