ekmungai/laravel-ifrs
Laravel IFRS brings double-entry accounting and IFRS-compliant financial reporting to Laravel apps. Manage chart of accounts, journal entries, ledgers, and trial balances, then generate balance sheets, income statements, and other audit-ready financial reports from clean data.
Architecture fit. Based on the release notes, this is a Laravel accounting/ledger package (accounts, VAT, line items, schedules, trial-balance reporting) that ships its own migrations, models, and model factories, and is tested via Orchestra Testbench. That is a conventional, low-friction shape for a Laravel app: service provider + publishable config/migrations, no external services, no queue or driver requirements implied. Two coupling points matter for architecture fit: (1) the package owns schema in the host database and manipulates foreign keys on host-adjacent tables (the remove_vat_id_column fix drops an FK before the column), so schema ownership is shared with the app; (2) it depends on Carbon semantics for schedule aging (AccountSchedule age calculation), which means date/time library upgrades in the host are behaviorally coupled to this package's reporting output.
Integration feasibility. v6.0.0 is a platform-floor release, not a feature release. There is no new domain capability here — the version bump is driven entirely by raising minimum PHP to 8.2 and narrowing Laravel support to 11/12/13. Integration is therefore gated on the host application's own framework and runtime position, not on API changes. If we are already on Laravel 11+ and PHP 8.2+, this is a low-effort, low-risk bump. If we are on Laravel 10 / PHP 8.1, we cannot consume v6 at all and must either stay pinned to 5.x or sequence a framework upgrade first.
Technical risk. The breaking changes are version-floor changes and are mechanical; the real risk sits in the four behavioral fixes:
diffInDays(). This means pre-v6 versions on Carbon 3 were silently computing aging buckets incorrectly. Fixing this changes reported output, not just code — a business-visible change requiring accounting/reporting stakeholder sign-off.remove_vat_id_column migration previously left a dangling foreign key on modern SQLite. Any environment where this migration ran (dev, CI, possibly local prod-like stacks) may have partially-applied or ambiguous migration state to reconcile.LineItem and Vat factories no longer generate zero amount/quantity/rate. If our own tests or seeders relied on zero-value lines, data shape changes.Key questions.
remove_vat_id_column already run in every environment, and in what state? Do we have published copies of the package's migrations that would diverge from the fixed version?LineItem, Vat, AccountSchedule, or any report class? If so, what is the re-verification cost?Stack fit. Target matrix is Laravel 11/12/13, PHP 8.2–8.4, PHPUnit 11/12, orchestra/testbench ^9|^10|^11, nunomaduro/collision ^8, spatie/laravel-ignition ^2. Only PHPUnit/Collision are dev-time; the runtime surface is plain Laravel + PHP. Note the dependency coupling: Collision 8 requires PHPUnit 11+, so a partial test-runner upgrade will not resolve — treat the dev-dependency set as one atomic change.
Migration path. Prefer framework-first, package-second:
^5 of this package during that work.^6.0 immediately after, in the same or the next release train.^5 is acceptable only with a dated, owner-assigned risk item — PHP 8.1 is EOL, so delay is a security exposure, not just technical debt.Compatibility. Before merging, inventory published package assets: config, migrations, and any extended models/factories. The migration fix must be reconciled against environments where the old migration already ran — verify the column is actually gone and no orphan constraint remains, and confirm that a re-publish does not attempt a duplicate drop.
Sequencing.
^6.0.^5 and a documented DB check for the VAT-ID migration state.Maintenance. This release is housekeeping: CI matrix across PHP 8.2/8.3/8.4, deterministic test bootstrap, modernized phpunit.xml. The signal is positive — the maintainer is tracking PHP and Laravel EOL policy and shipping disciplined test hygiene rather than accumulating flakiness. The implied cadence is a major bump roughly in step with Laravel's own support windows, so budget an annual upgrade slot rather than a one-off project.
Support. Dropping PHP 8.1 aligns with EOL; staying on 5.x means running an unsupported runtime with no upstream security patches. The compounding cost is that the next major (dropping Laravel 11 when it reaches EOL) will be harder if we skip this one.
Scaling. No runtime, throughput, or concurrency change. The PRNG seeding, factory value changes, and PHPUnit schema updates are build-time only. The Carbon 3 fix changes correctness of aging output, not scale.
Failure modes.
remove_vat_id_column ran may have a dangling FK (SQLite) or partial state; a naive re-run can fail mid-deploy.AccountSchedule or the factories will not automatically inherit the fixes.Ramp-up. Low for engineers — there is no new API or concept to learn; the effort is upgrade mechanics and verification discipline. Realistic TPM-level estimate: roughly half a day of discovery to answer the key questions, a sprint-sized engineering effort for a typical Laravel app already near the supported floor, and materially more if we are on Laravel 10/PHP 8.1 or carry published migrations and extended models. The one non-engineering task that must be scheduled explicitly is accounting/reporting stakeholder review of the aging output change — that is a sign-off dependency, not a code review.
How can I help you explore Laravel packages today?