bkfdev/invoicable
Invoicable adds flexible invoicing to Laravel apps, letting you generate invoices from Eloquent models with line items, taxes, totals, and status tracking. A lightweight, developer-friendly package for billing workflows.
Assessment basis: This evaluation is derived from a single changelog line — Add store_id to payments — for a Laravel/PHP payments package (v1.1.8). It is therefore a directional assessment; assumptions are flagged explicitly and should be validated against the package source, schema migrations, and release diff before commitment.
Architecture fit
store_id foreign key on the payments table, a corresponding model relationship, and likely a Store/tenant concept already present in the package or the host application. If the package does not own a store entity, the column is a loose reference and integrity is the host application's responsibility.store_id column forces a parallel hierarchy that must be reconciled downstream in reporting and reconciliation jobs.Integration feasibility
store_id is nullable, existing payment rows remain valid and integration is additive and safe. If non-nullable without a default, the migration will fail on any non-empty payments table — this is the single highest-priority item to confirm before scheduling.Technical risk
php artisan migrate in a deploy window.store_id. Unvalidated mass assignment is both a correctness and a security concern: a caller could attribute a payment to a store it does not own unless authorization scoping is enforced.Key questions
store_id nullable, does it have a default, and is there a foreign key constraint with cascade/restrict behavior?store_id required on payment creation, or inferred from the authenticated context/session?Store model, or does it expect one from the host application (and if so, what is the expected table/column contract)?Stack fit
Migration path
store_id with no constraints; (2) deploy application code that writes it on new payments; (3) backfill historical rows from the best available source (order records, gateway metadata, or account-to-store mapping); (4) only then add the foreign key and consider a NOT NULL constraint. Each step is independently deployable and reversible.Compatibility
select lists and strict response schemas are the common breakage points.store_id was previously added locally as a workaround.Sequencing
store_id; keep read paths store-agnostic.Maintenance
store_id exists. Record the version floor in the dependency documentation so later upgrades are not attempted out of order.Support
Scaling
(store_id, created_at), which the package may not ship by default.Failure modes
store_id producing understated store revenue — high severity because it fails quietly and is discovered by finance rather than by monitoring.store_id is accepted from client input without scope enforcement — high severity, mitigated by deriving store from authenticated context or by policy checks.store_id before the column exists, or vice versa — mitigated by strict expand/contract ordering and backwards-compatible code.Ramp-up
How can I help you explore Laravel packages today?