# AccountReceivableDocument

## Description

AccountReceivableDocument is the AR-side counterpart of AccountPayableDocument. It separates commercial lines, accounting distributions, and due schedules into dedicated tables. Sales-order sourced lines drive the sales-order invoiced-quantity projection when the document is registered.

## Domain Model Definitions

### Model type

Stateful

#### State Transitions

```mermaid
stateDiagram-v2
    [*] --> DRAFT: createAccountReceivableDocument
    DRAFT --> REGISTERED: registerAccountReceivableDocument
    DRAFT --> CANCELLED: cancelAccountReceivableDocument
    REGISTERED --> POSTED: postAccountReceivableDocument
    REGISTERED --> CANCELLED: cancelAccountReceivableDocument
```

### Command Definitions

- [createAccountReceivableDocument](../command/CreateAccountReceivableDocument.md)
- [correctAccountReceivableDocument](../command/CorrectAccountReceivableDocument.md)
- [registerAccountReceivableDocument](../command/RegisterAccountReceivableDocument.md)
- [postAccountReceivableDocument](../command/PostAccountReceivableDocument.md)
- [cancelAccountReceivableDocument](../command/CancelAccountReceivableDocument.md)

### Query Definitions

- Documents and lines are available through TailorDB GraphQL using their model permissions

### Models

- AccountReceivableDocument
- AccountReceivableDocumentLine
- AccountReceivableDistributionLine
- AccountReceivableDueScheduleLine

### Invariants

- Every registered document has at least one line, distribution, and due-schedule line
- Sales-order source fields are either all present or all absent
- Line netAmount equals quantity multiplied by unitPrice for sales-order source lines
- The sum of line gross amounts equals totalAmount
- Distribution and due-schedule totals equal totalAmount
- REGISTERED and POSTED documents contribute to SalesOrderLine.billedQuantity
- POSTED documents cannot be cancelled; corrections use a separate correction document

### Relationships

- Each line belongs to one AccountReceivableDocument
- Each line references one sales SalesOrderLine
- Each distribution references one posting account
- Each due-schedule line represents a customer installment
