- SaleOrder._fc_rate_usage: aggregates usage, computes overage via charge._compute_billable, upserts sale.order.line for the overage product - FusionBillingUsage._cron_rate_open_periods: hourly cron iterates active charges × in-progress subscriptions, calls _fc_rate_usage - data/ir_cron.xml: two crons — rate usage (hourly), dispatch webhooks (2 min) - __manifest__.py: registers data/ir_cron.xml in data list - test_usage.py: test_rate_open_period_creates_overage_line (TDD, FCB_EXIT=0) Reference: _create_recurring_invoice / _get_invoiceable_lines confirmed in Enterprise sale_subscription/models/sale_order.py — overage line goes onto sale.order so native invoicing picks it up via _get_invoiceable_lines.
56 lines
2.3 KiB
Python
56 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
{
|
|
"name": "Fusion Centralized Billing",
|
|
"version": "19.0.1.0.0",
|
|
"category": "Accounting/Subscriptions",
|
|
"summary": "Centralized billing engine for all NexaSystems services — metered usage, "
|
|
"per-app billing API, and outbound webhooks on top of Odoo Enterprise subscriptions.",
|
|
"description": """
|
|
Fusion Centralized Billing
|
|
==========================
|
|
|
|
Makes this Odoo Enterprise instance the single billing brain for every NexaSystems
|
|
service (NexaCloud hosting, NexaDesk chat, NexaMaps API, custom apps, memberships).
|
|
|
|
It adds ONLY the metering + integration layer; all financial behaviour (invoicing,
|
|
HST tax, proration, dunning, portal, credit notes, Stripe) is native Odoo Enterprise.
|
|
|
|
Capabilities
|
|
------------
|
|
* Service registry — one record per source app (NexaCloud / NexaDesk / NexaMaps) with
|
|
bearer API key + webhook config.
|
|
* Identity links — fold each app's external account into one ``res.partner``.
|
|
* Metric + Charge catalog — billable metrics with quota + overage pricing, keyed by a
|
|
shared ``plan_code`` (apps own feature entitlements; Odoo owns money).
|
|
* Usage engine — aggregate-push: apps send periodic counters; a pre-invoice cron feeds
|
|
billable quantities onto the subscription ``sale.order``.
|
|
* Inbound API — Lago-shaped REST (``/api/billing/v1/*``), bearer auth.
|
|
* Outbound webhooks — HMAC-signed lifecycle events (payment failed/succeeded,
|
|
subscription terminated) so apps suspend / restore / deprovision.
|
|
|
|
Design spec: docs/superpowers/specs/2026-05-27-nexa-billing-centralized-design.md
|
|
|
|
Status: SCAFFOLD. Model fields are in place; engine/API/webhook bodies are stubs to be
|
|
implemented via the writing-plans output. Per repo CLAUDE.md, read live Odoo 19
|
|
reference files from the container before implementing subscription/account internals.
|
|
""",
|
|
"author": "Nexa Systems Inc.",
|
|
"website": "https://nexasystems.ca",
|
|
"license": "OPL-1",
|
|
"depends": [
|
|
"account_accountant",
|
|
"sale_subscription",
|
|
"sale_management",
|
|
"payment_stripe",
|
|
],
|
|
"data": [
|
|
"security/ir.model.access.csv",
|
|
"data/ir_cron.xml",
|
|
],
|
|
"installable": True,
|
|
"application": False,
|
|
"auto_install": False,
|
|
}
|