Skip to content

1.0.1

Released: staging (target promotion: TBD)

Compared to 1.0.0. Derived from git log --oneline origin/main..staging.

Highlights

  • Recurring everything: invoices and expenses can now run on a schedule.
  • Owner-organization features: per-product margin tracking and a disposable-budget KPI answer "cuánto le estoy ganando" and "cuánto puedo destinar a gastos".
  • Bank reconciliation: statement parsing + AI-assisted transaction matching.
  • Inventory dimensions: locations, lots, and costing methods.

Added

Owner-org features (this release's main theme)

Accounting & operations

Schema (selected)

  • unitCostSnapshot, grossMarginAmount, grossMarginPct on InvoiceDetail.
  • New types: ProductMarginReport, ProductMarginReportRow, DisposableBudgetKPI.
  • tax_rate_id per-line on invoice/supplier-invoice details.

Changed

  • Tag assignment on items now goes through Tag objects rather than free-form strings.
  • BankReconciliationService accepts a joinedload option for LedgerEntryLine.
  • XLSX parsing streamlined; LLMService dependency removed from the parser path.

Fixed

  • unique() applied on the file-hash query to deduplicate joined-eager-load rows.

Migrations

Run in order on top of 1.0.0:

  • add_bank_statements
  • add_fiscal_years_and_periods
  • add_bank_reconciliations
  • add_ledger_audit_logs
  • add_payroll
  • add_tax_filings
  • add_tax_rate_id_to_details
  • add_recurring_journals
  • add_recurring_invoices
  • add_recurring_expenses
  • add_tags_to_itemstag_module (the tag table replaces the inlined strings)
  • add_fixed_assets
  • add_budgets
  • add_inventory_dimensions
  • add_unit_cost_snapshot (this release)
  • PathPermission backfill (separate one-off script: scripts/backfill_new_path_permissions.py)

Apply with task migrate-dev against staging, or task migrate-prod once promoted.

Frontend impact

Required wiring before this version reaches users:

  • Invoice line UI: surface grossMarginPct next to subtotal; dim when null and explain why on hover.
  • Owner dashboard: new card backed by getDisposableBudget. Color-band per the disposable-budget doc.
  • Margin report: new screen backed by getProductMarginReport. Include the costCoveragePct badge so users understand partial coverage on historical sales.
  • Inventory list: support location / lot / costing-method dimensions (additive, but UX should expose them).
  • Tags UI: switch from string input to Tag-object picker.
  • Recurring schedules: separate UIs for recurring invoices and recurring expenses (same shape as recurring journals).
  • Bank workflow: statement upload, parse-status, reconciliation board with AI-suggested matches.

Versioning notes

  • This is the first release that maintains a changelog — see index for conventions.
  • Bumped via uv run python scripts/bump_version.py 1.0.1.