dodil/erp-brick-ar
DODIL ERP brick: accounts receivable
src/brick_ar/domain/events.py
"""Domain events: facts the aggregates record as they decide (the use case may publish them; tests read them)."""
from dataclasses import dataclass
from decimal import Decimal
from typing import Optional
@dataclass(frozen=True)
class Event:
by: str = ""
@dataclass(frozen=True)
class InvoiceRaised(Event):
invoice_id: str = ""
source_kind: str = ""
source_id: str = ""
@dataclass(frozen=True)
class InvoiceIssued(Event):
invoice_id: str = ""
invoice_no: str = ""
total: Decimal = Decimal(0)
@dataclass(frozen=True)
class InvoiceCancelled(Event):
invoice_id: str = ""
@dataclass(frozen=True)
class InvoiceVoided(Event):
invoice_id: str = ""
reason: str = ""
@dataclass(frozen=True)
class InvoiceSent(Event):
invoice_id: str = ""
address: str = ""
@dataclass(frozen=True)
class FindingDecided(Event):
invoice_id: str = ""
step: str = ""
decision: str = ""
@dataclass(frozen=True)
class CreditNoteApproved(Event):
credit_id: str = ""
credit_no: str = ""
invoice_id: Optional[str] = None
total: Decimal = Decimal(0)
@dataclass(frozen=True)
class WriteoffApproved(Event):
writeoff_id: str = ""
invoice_id: str = ""
amount: Decimal = Decimal(0)
@dataclass(frozen=True)
class ScheduleStopped(Event):
schedule_id: str = ""
reason: str = ""
@dataclass(frozen=True)
class ScheduleFinished(Event):
schedule_id: str = ""
@dataclass(frozen=True)
class RunSigned(Event):
run_id: str = ""