Skip to content
Devix Open Source

Changelog

Every release of Laravel ZATCA, newest first. Breaking changes are flagged.

v1.0.0

15 Sep 2026

First release.

Added

  • Zatca::encode() for the Saudi ZATCA QR payload — phase one tags 1–5 and phase two tags 6–9 — verified against the ASCII and Arabic vectors published by the reference implementation the Saudi market uses.
  • Zatca::decode() and Zatca::looksLikePayload(): reading a payload back into its fields, which no other package in this space does.
  • Check::payload() with twelve reason codes, codes(), messages() and the decoded invoice, so a caller need not decode twice.
  • Check::vatNumber() on its own, verifying the fifteen-digit shape beginning and ending with 3 — all that Saudi Arabia publishes a rule for.
  • Amount::format(), which produces the same string as JavaScript's toFixed for every input by rounding the exact decimal expansion half-away-from-zero. Neither number_format nor sprintf does: the first turns 0.015 into 0.02, the second turns 0.125 into 0.12.
  • Timestamp::format(), which passes an ISO 8601 string through byte for byte so a signed timestamp is never invalidated by reformatting.
  • A TlvException naming the tag when a value is longer than the 255 bytes a one-byte length field can hold, rather than wrapping silently.
  • A SaudiVatNumber validation rule, registered as saudi_vat_number for the string form, whose message says which part failed.
  • A Zatca facade and a publishable config/zatca.php holding the VAT rate and tolerance.
  • Eleven shared vectors generated by the JavaScript twin and read by both test suites, so the two packages are held to one file rather than to each other.
  • Zero dependencies, including no QR library.