Download the PHP package aichadigital/larabill without Composer
On this page you can find all versions of the php package aichadigital/larabill. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download aichadigital/larabill
More information about aichadigital/larabill
Files in aichadigital/larabill
Package larabill
Short Description Professional billing & invoicing package for Laravel with UUID v7, VAT verification, tax calculation for Spain/EU/worldwide, and EU compliance
License AGPL-3.0-or-later
Homepage https://github.com/aichadigital/larabill
Informations about the package larabill
Larabill - Professional Billing & Invoicing for Laravel
Development happens on gitlab.castris.com. The GitHub repository is a read-only distribution mirror: issues and pull requests opened there are not seen.
π Stability contract (effective from v6.0.0) β larabill is a closed, stable product governed by STABILITY.md: breaking changes only enter with a qualified, documented usage imperative; every major is auto-upgradeable from the previous one; deprecations live through at least one full major before removal. As of 6.0 the deprecated backlog is empty. One planned major exists (agreement model redesign β see the notice below).
π Planned major β agreement model redesign (STABILITY.md.
βΉοΈ Schema upgrade policy (stable versions = respect for data) β since 1.0, larabill treats your database as a contract: schema changes ship WITH their upgrade path. Every release that touches tables includes a data-aware migration (existing rows are transformed, never discarded), and breaking majors ship an
UPGRADE-X.mdguide in the dist. To upgrade an existing install:composer update aichadigital/larabill, re-runphp artisan larabill:install --no-migrate(idempotent β it publishes only the NEW migrations, skipping the ones you already have), thenphp artisan migrate. Never usemigrate:freshon a database with real data.β οΈ Upgrading? Follow the guides sequentially: UPGRADE-6.0.md (5.x β 6.0, deprecated surface removed β zero migrations).
Larabill is a professional, UUID-first billing and invoicing package for Laravel applications. It provides tax calculation for Spain/EU/worldwide and flexible invoice generation with immutability protection, plus an optional thin bridge to intra-community VAT/NIF verification (delegated to the lararoi package). The consumer app's users.id MUST be UUID v7 char(36) β see ADR-006.
π― Features
Core Functionality
- Invoice Management: UUID-based IDs, sequential numbering, proforma invoices, immutable records
- Tax Calculation: Spanish (IVA), Canary Islands (IGIC), Ceuta/Melilla (IPSI), EU reverse charge, worldwide
- VAT/NIF Verification (optional): thin bridge that delegates to the
lararoipackage (VIES and other providers). Not wired into invoice issuance β reverse charge is driven by theis_roi_taxedflag - Fiscal Data Management: Company and customer fiscal configurations with temporal validity
- PDF Generation: Built-in invoice PDF generation using DomPDF
- EU Compliance: Full support for EU B2B reverse charge and destination VAT rules
Technical Excellence
- String UUID v7: Ordered UUIDs for invoices and the consumer's
users.id(ADR-006) - FixedDecimal money: Precise monetary value objects backed by base-100 integers (no floating-point errors)
- Preflight check:
larabill:installaborts cleanly whenusers.idis not UUID-compatible - Temporal Validity: Fiscal configurations with
valid_from/valid_untildates - Invoice Immutability: Protection against modifications after issuance
- Non-overlapping prices: at most one active price per article and billing frequency on any date, enforced on write (ADR-012)
π¦ Requirements
- PHP ^8.3
- Laravel ^12.0 | ^13.0
users.idUUID v7 char(36) β seedocs/setup-uuid.md
π Installation
Via Composer
Publish Configuration
Run the Installer
This will:
- Publish migrations
- Run database migrations
- Seed default tax categories and rates
Diagnostic Commands
Larabill enforces at most one active price per article and billing frequency on any given date (ADR-012), and rejects writes that would break it. A database written before that invariant may already hold overlapping prices, so run this as a pre-upgrade gate and resolve what it reports. It does not repair anything on purpose: deciding which of two prices survives is a pricing decision, and it is yours.
Manual Installation (if preferred)
βοΈ Configuration
Environment Variables
Add these to your .env file:
Model Configuration
The user model resolves through user_model (env LARABILL_USER_MODEL) in config/larabill.php:
models.user is an optional explicit override β when set to an existing class it wins over user_model. If neither key points to an existing class, larabill fails loudly (no silent default). Package models can be swapped through the models block:
ποΈ Architecture
Fiscal Data Model
Larabill separates company and customer fiscal data with temporal validity:
Key principles:
- The customer is a
User(ADR-003); businesses and sub-accounts are modelled withparent_user_id. The legacyCustomerFiscalDatamodel was removed. - Company config changes apply from a specific date forward
UserTaxProfilerecords are temporally versioned (valid_from/valid_until) β never modify past records- Invoices capture a fiscal snapshot at creation time
- Invoices are absolutely immutable once issued
UUID Strategy
Larabill uses string UUID v7 for invoices:
Monetary Values (FixedDecimal)
Money is stored as base-100 integers and exposed as FixedDecimal value objects (from lara100), so there are no floating-point errors. You assign the unscaled base-100 integer; reading the attribute returns a FixedDecimal:
Invoice and invoice-item money attributes use the FixedDecimalCast (scale 2) from the lara100 package. Note: query-builder access (->value(), ->sum(), ->where()) returns the raw integer, while Eloquent attribute access returns a FixedDecimal.
π Usage
Creating an Invoice
Invoice numbers are correlative per series (invoice_series_control, EU/RD 1619/2012): fiscal_number, prefix, series_number and fiscal_year all derive atomically from InvoiceNumberingService. An active CompanyFiscalConfig must exist β createInvoice() snapshots the issuer's fiscal data and refuses to emit without it.
Removed in 6.0: the former
BillingServicequick-start path is gone βInvoiceServiceis the emission path. See UPGRADE-6.0.md for the 1:1 mapping.
Tax Calculation
VAT/NIF Verification (optional bridge to lararoi)
Intra-community VAT/NIF verification is owned by the lararoi package. Larabill exposes a single thin bridge action that delegates to lararoi's contract and returns its canonical result unchanged:
Providers (VIES, isvat, vatlayer, β¦), caching and optional tracking are configured in lararoi, not here β publish its config with php artisan vendor:publish --tag="lararoi-config". This bridge is not wired into invoice issuance: reverse charge is decided by the invoice's is_roi_taxed flag, never by a live lookup.
Company Fiscal Configuration
User Tax Profile
The customer is a User (ADR-003); their fiscal data lives in UserTaxProfile, temporally versioned. This replaces the removed CustomerFiscalData model.
π§ͺ Testing
Current status (v3.1.3): 928 tests passing on SQLite, plus MySQL 8 integration tests (real column types and unique constraints) and fork-based concurrency tests. The UUID-first contract is demonstrated on MySQL 8.
π Documentation
| Document | Description |
|---|---|
| ARCHITECTURE.md | Core architecture and domain model |
| setup-uuid.md | UUID-first onboarding for the consumer app |
| ADR-006 | UUID-first decision (supersedes the agnostic id contract) |
| TAX_RATES_MIGRATION_GUIDE.md | Tax rates migration guide |
| STABILITY.md | Stability contract: how larabill evolves from v6.0.0 |
| UPGRADE-4.0.md | Upgrade guide: larabill 3.x β 4.0 (VAT verification bridge) |
| UPGRADE-5.0.md | Upgrade guide: larabill 4.x β 5.0 (fiscal series vs fiscal type) |
| UPGRADE-6.0.md | Upgrade guide: larabill 5.x β 6.0 (deprecated surface removed) |
| CHANGELOG.md | Version history and breaking changes |
For AI agents working with this package, see .claude/project.md.
πΊοΈ Roadmap
Shipped
- β Core invoice management (immutable records, UUID v7, sequential numbering, proforma)
- β Spanish tax system (IVA, IGIC, IPSI)
- β EU reverse charge (B2B) and destination VAT
- β
Fiscal data with temporal validity (
CompanyFiscalConfig,UserTaxProfile) - β
FixedDecimalmoney type (base-100, no floating-point errors) - β
VeriFACTU integration (Spain AEAT) via
lara-verifactu - β Grouped payments
- β
Legal-retention contract (
LegallyRetainable) for GDPR tooling
Under consideration
- Subscription billing
- Payment gateway integration (Stripe, PayPal, Redsys)
- Advanced reporting
See the CHANGELOG for the full release history.
π€ Contributing
Please see CONTRIBUTING for details.
π Security
Please review our security policy on how to report security vulnerabilities.
π License
GNU Affero General Public License v3.0 (AGPL-3.0-or-later). See LICENSE.md for details.
This means:
- β You can use, modify, and distribute this software
- β You must share any modifications under the same license
- β οΈ If you run this as a network service, you must provide the source code to users
- β οΈ You must preserve copyright and attribution notices
π₯ Credits
- AichaDigital
- All Contributors
All versions of larabill with dependencies
aichadigital/lara-privacy-core Version ^1.0
aichadigital/lara-verifactu Version ^1.0
aichadigital/lara100 Version ^2.0
aichadigital/lararoi Version ^1.0.4
dompdf/dompdf Version ^3.1
illuminate/contracts Version ^13.0
illuminate/database Version ^13.0
illuminate/http Version ^13.0
lorisleiva/laravel-actions Version ^2.0
spatie/laravel-package-tools Version ^1.17
spatie/laravel-translatable Version ^6.12