docs re-org

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-09 13:26:35 +00:00
parent 4d13a57068
commit 6a4f95c35a
231 changed files with 11353 additions and 31152 deletions

View File

@@ -0,0 +1,69 @@
# Billing Lifecycle
## Purpose
Detail how credits, plans, subscriptions, invoices, and payments flow through the system, and where deductions/additions are enforced.
## Code Locations (exact paths)
- Models: `backend/igny8_core/business/billing/models.py` (`CreditTransaction`, `CreditUsageLog`, `CreditCostConfig`, `Invoice`, `Payment`, `CreditPackage`, `PaymentMethodConfig`, `AccountPaymentMethod`)
- Services: `backend/igny8_core/business/billing/services/credit_service.py`, `services/invoice_service.py`, `services/payment_service.py`
- Views/Endpoints: `backend/igny8_core/modules/billing/views.py`
- Frontend billing pages: `frontend/src/pages/account/{AccountBillingPage.tsx,PlansAndBillingPage.tsx,PurchaseCreditsPage.tsx}`
## High-Level Responsibilities
- Track credit balance, record usage, and enforce costs for AI/automation actions.
- Manage plans/subscriptions, generate invoices, and record payments.
- Expose account-scoped billing data (balance, usage, invoices, payments, packages, payment methods).
## Detailed Behavior
- Credit balance: stored on `Account.credits`; `CreditService` adds/deducts via `CreditTransaction` and logs usage in `CreditUsageLog`.
- Costs: read from `CreditCostConfig` or hardcoded `CREDIT_COSTS` fallbacks inside `credit_service.py`.
- Deductions: called from AI/automation flows to ensure sufficient credits; `InsufficientCreditsError` thrown on shortage.
- Plans/Subscriptions: `Plan` defines price, billing_cycle, included_credits, max sites/sectors/users; `Subscription` links account to plan. Plan selection handled via billing endpoints and frontend plan tabs.
- Invoices: `InvoiceService` creates invoices for subscriptions and credit packages; generates unique invoice numbers and line items.
- Payments: `PaymentService` records payments; manual payments stored with status (pending/processing/etc.); payment methods configured via `PaymentMethodConfig`/`AccountPaymentMethod`.
- Packages: `CreditPackage` defines purchasable credit bundles; purchasing triggers invoice/payment flows.
## Data Structures / Models Involved (no code)
- Billing: `CreditTransaction`, `CreditUsageLog`, `CreditCostConfig`, `Invoice`, `Payment`, `CreditPackage`, `PaymentMethodConfig`, `AccountPaymentMethod`.
- Plan: `Plan`, `Subscription` (in `auth/models.py`).
- Account linkage: `Account` holds `credits` and `plan`.
## Execution Flow
- Balance/Usage read: billing endpoints return account-scoped balance and usage summaries.
- AI/Automation call: service invokes `CreditService.deduct_credits_for_action` → creates `CreditTransaction` + `CreditUsageLog`.
- Purchase credits: frontend calls billing endpoint → `CreditService.add_credits` + `InvoiceService` for package; payment recorded via `PaymentService` (manual/other).
- Subscription change: endpoint updates `Subscription` + `Account.plan`, generates invoice as needed; payment recorded if required.
- Invoice download: `modules/billing/views.py` exposes invoice retrieval; frontend uses `downloadInvoicePDF`.
## Cross-Module Interactions
- Automation/writer AI calls depend on credit checks; insufficient balance blocks operations.
- Account settings feed invoice billing details; payments/invoices are tied to account.
## State Transitions (if applicable)
- Payment status: `pending``processing/pending_approval``succeeded/completed` or `failed/refunded/cancelled/void/uncollectible`.
- Subscription status: `active`/`cancelled` (persisted in `Subscription`); plan reference on account updates accordingly.
## Error Handling
- `InsufficientCreditsError` for low balance; surfaces to API as error response.
- Payment/Invoice service raise validation errors (e.g., already paid invoice).
## Tenancy Rules
- All billing queries filter by `request.user.account`; viewsets inherit from `AccountModelViewSet`.
- Payment methods, invoices, payments, credit transactions are account-scoped; no cross-tenant access.
## Billing Rules (if applicable)
- Costs derived from config constants or `CreditCostConfig`.
- Included credits and limits come from `Plan`; extra purchases via `CreditPackage`.
- Credits must be available before AI/automation runs proceed.
## Background Tasks / Schedulers (if applicable)
- None dedicated; billing operations are request-driven. Automation tasks carry account context to deduct credits within Celery runs.
## Key Design Considerations
- CreditService centralizes deductions to avoid scattered logic.
- Manual payment flow avoids storing sensitive data; relies on transaction_reference and admin approval.
## How Developers Should Work With This Module
- When adding new billable actions, route them through `CreditService` with a defined cost key.
- To change pricing, update `CreditCostConfig` data or the `CREDIT_COSTS` fallback map.
- Keep all billing endpoints inheriting `AccountModelViewSet` to maintain isolation.