netipar/szamlazzhu
Laravel package for integrating Számlázz.hu, the Hungarian online invoicing service. Create, query, and manage invoices, generate PDFs, and automate tax and accounting workflows through a fluent API, with configuration and service provider support for quick setup in Laravel applications.
Package context. This is the Laravel wrapper around the official szamlazz.hu PHP SDK, i.e. it sits on the invoicing path — a regulated, customer-visible, financial-record workflow. That drives the risk posture below: we treat v3.0.0 as a controlled upgrade, not a routine dependency bump.
Architecture fit. Low architectural impact, high coupling impact. The package is a thin adapter (config + service provider + typed request/response objects over the vendor SDK), so it does not change our application architecture. The coupling is to (a) the Laravel major version and (b) the vendor SDK contract. v3.0.0 moves both: it consumes SDK v2.12.5 and raises the floor to Laravel 12/13. No prior assessment exists, so this release is also our baseline record for the package.
Integration feasibility. Feasible and well-signposted. The breaking changes are narrow and each ships with an explicit action ("stay on ^2.0", "type your overridden constants", "delete stale session rows"). The two genuinely new capabilities are operational rather than functional: vendor:publish --tag=szamlazzhu now emits config and the sessions migration together (with a fresh timestamp and a down()), and InvoiceHeader::setSimpleItems() exposes simpleItems. There is exactly one behavioural fix that matters to us: non-JSON responses now throw ResponseException instead of a PHP TypeError, which is a net win for error handling but a change in exception type on a failure path.
Technical risk (ranked).
^2.0 and will silently stop receiving fixes. We have no inventory of the current Laravel versions across our services — this is the single largest unknown.database session driver, old rows linger in the sessions table. Concurrent first requests (multi-instance rollout) may each open a session — harmless for correctness, but it is a deploy-window behaviour we should expect and monitor rather than diagnose live.InvoiceHeader::setProfitVat() (arresAfa) and Item::setPriceGapVatBase() (arresAfaAlap) are removed by the official SDK after 2027-02-15. They still work; on PHP 8.4+ they emit deprecation notices. This is tax/VAT semantics — if we use them, the removal is a specification change, not a code change.migrate.laravel package skeleton. Service provider, config shape and publish tags may have moved. Low severity, but it invalidates any local patches or forks.Key questions (need answers before we commit a plan).
setProfitVat() / setPriceGapVatBase() today? If yes, who owns the VAT-specification replacement and by when?database, who owns the cleanup of pre-upgrade rows, and is migrate gated in the release process?TypeError on response conversion anywhere, and does monitoring alert on exception type?setSimpleItems() a requirement we have, or a capability we are simply inheriting?Stack fit. Requires Laravel 12 or 13; PHP 8.3+ is unchanged from prior releases, so PHP is not the constraint — Laravel is. We should confirm our Laravel upgrade path is already funded, because this package now rides on it rather than the reverse.
Migration path.
^2.0 → ^3.0 in a dedicated PR with no unrelated changes.^2.0 and record an explicit exception with an owner and target date. Do not attempt to hold v3 on an old Laravel.Compatibility checks (gate list).
composer why-not / lockfile audit for Laravel constraints.const overrides → add matching types.setProfitVat, setPriceGapVatBase, arresAfa, arresAfaAlap → inventory and owner.TypeError handling around invoice responses → migrate to ResponseException.config/szamlazzhu.php before accepting the new publish output.Sequencing.
simpleItems and throw before the request — good for staging verification, and worth a negative test).Rollback. Package rollback is a lockfile revert. Note the asymmetry: the session re-key means a rollback re-opens sessions in the opposite direction, and the duplicated-migration risk means rollback must include migrate:rollback of the newly published migration where applicable. Document this rather than assume a clean git revert.
Maintenance. Net neutral-to-positive. Being rebuilt on the laravel package skeleton lowers our cost to reason about the codebase, and consuming SDK v2.12.5 keeps us current with the vendor. The cost we take on is the Laravel 12/13 floor, which converts a package upgrade into a platform upgrade for lagging services.
Support. Two support obligations are created:
arresAfa / arresAfaAlap with a hard date of 2027-02-15 and a named owner.^2.0 are explicitly frozen and must not be presented as "supported" in any roadmap without an upgrade date attached.Scaling. No throughput or payload implications. The one scaling-adjacent change is the session cache re-key, which is a one-time per-key event; the only thing that scales with it is deploy concurrency (multiple instances opening sessions simultaneously on the first post-deploy request).
Failure modes to watch.
^2.0 stops receiving SDK parity fixes with no visible failure.TypeError will no longer match, so a malformed gateway response surfaces differently — better, but different.setSimpleItems() now fail fast with ValidationException; anything that "worked" by sending and tolerating a gateway error will now surface earlier and louder.Ramp-up. Low for engineers — the API surface is unchanged apart from one new setter, and the typed-constant rule is mechanical. The real ramp-up is organisational: getting the Laravel version inventory, agreeing who owns the VAT deprecation, and adding the migration/publish step to the release checklist. Estimate roughly a day of engineering per service for the v3 upgrade itself, with the Laravel upgrade as the dominant, separately-estimated cost.
Recommendation. Adopt v3.0.0 on Laravel 12/13 services, hold Laravel 10/11 services on ^2.0 with a dated exception, and treat the arresAfa deprecation as a tracked compliance item with an owner — not a footnote in a changelog.
How can I help you explore Laravel packages today?