# BusinessPartner

## Description

BusinessPartner is the globally unique identity of an external organization or individual. It owns identity-level data such as legal name, addresses, and bank accounts. Company-specific customer and supplier behavior is represented by CustomerAccount and SupplierAccount instead of fields or roles on the partner itself.

## Domain Model Definitions

### Model type

Stateful

#### State Transitions

```mermaid
stateDiagram-v2
    [*] --> Active: createPartner (status=ACTIVE)
    Active --> Inactive: deactivatePartner
    Inactive --> Active: reactivatePartner
```

| Operation | From | To | Command |
|-----------|------|----|---------|
| deactivate | ACTIVE | INACTIVE | [deactivatePartner](../command/DeactivatePartner.md) |
| reactivate | INACTIVE | ACTIVE | [reactivatePartner](../command/ReactivatePartner.md) |

### Command Definitions

- [createPartner](../command/CreatePartner.md) - Create an active global business partner
- [updatePartner](../command/UpdatePartner.md) - Update mutable identity fields
- [deactivatePartner](../command/DeactivatePartner.md) - Deactivate a partner
- [reactivatePartner](../command/ReactivatePartner.md) - Reactivate a partner

### Query Definitions

None.

### Models

- BusinessPartner

### Invariants

- Name is required and non-empty
- Type is ORGANIZATION or INDIVIDUAL and is immutable after creation
- A partner is globally reusable and is not scoped to a company
- Customer and supplier capabilities are established through accounts, not partner roles
- New partners are active by default
- Only active partners may receive new customer or supplier accounts
- Business partners are deactivated rather than physically deleted

### Relationships

- **Referenced By CustomerAccount**: A partner may have customer accounts in multiple companies or operating units
- **Referenced By SupplierAccount**: A partner may have supplier accounts in multiple companies or operating units
- **Referenced By PartnerAddress**: A partner owns reusable addresses
- **Referenced By PartnerBankAccount**: A partner owns reusable bank accounts
