use serde::{Deserialize, Serialize};
use uuid::Uuid;
use chrono::{DateTime, Utc, NaiveDate};
use rust_decimal::Decimal;
use crate::domain::entity::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct AccountId(pub Uuid);
impl AccountId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for AccountId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<AccountId> for Uuid {
fn from(id: AccountId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountDto {
pub id: AccountId,
pub account_number: String,
pub account_code: String,
pub name: String,
pub description: Option<String>,
pub account_type: AccountType,
pub account_subtype: AccountSubtype,
pub normal_balance: NormalBalance,
pub parent_id: Option<Uuid>,
pub level: i32,
pub path: Option<String>,
pub is_header: bool,
pub is_detail: bool,
pub currency: String,
pub opening_balance: Decimal,
pub opening_balance_date: Option<NaiveDate>,
pub current_balance: Decimal,
pub is_reconcilable: bool,
pub has_budget: bool,
pub budget_amount: Option<Decimal>,
pub sort_order: i32,
pub show_in_reports: bool,
pub status: AccountStatus,
pub is_system: bool,
pub notes: Option<String>,
pub source_id: Option<Uuid>,
pub is_cloned: bool,
pub chart_code: Option<String>,
pub chart_version: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountSummary {
pub id: AccountId,
pub name: String,
pub status: AccountStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountRef {
pub id: AccountId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct AccountingPostId(pub Uuid);
impl AccountingPostId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for AccountingPostId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<AccountingPostId> for Uuid {
fn from(id: AccountingPostId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountingPostDto {
pub id: AccountingPostId,
pub branch_id: Option<Uuid>,
pub source_type: PostingSourceType,
pub source_id: Uuid,
pub source_reference: Option<String>,
pub journal_id: Option<Uuid>,
pub posting_type: PostingType,
pub posting_status: PostingStatus,
pub currency: String,
pub total_debit: Decimal,
pub total_credit: Decimal,
pub scheduled_at: Option<DateTime<Utc>>,
pub posted_at: Option<DateTime<Utc>>,
pub failed_at: Option<DateTime<Utc>>,
pub retry_count: i32,
pub max_retries: i32,
pub next_retry_at: Option<DateTime<Utc>>,
pub error_code: Option<String>,
pub error_message: Option<String>,
pub reverses_post_id: Option<Uuid>,
pub reversed_by_post_id: Option<Uuid>,
pub posted_by: Option<Uuid>,
pub notes: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountingPostSummary {
pub id: AccountingPostId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountingPostRef {
pub id: AccountingPostId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct CostCenterId(pub Uuid);
impl CostCenterId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for CostCenterId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<CostCenterId> for Uuid {
fn from(id: CostCenterId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostCenterDto {
pub id: CostCenterId,
pub code: String,
pub name: String,
pub description: Option<String>,
pub parent_id: Option<Uuid>,
pub level: i32,
pub is_group: bool,
pub branch_id: Option<Uuid>,
pub status: CostCenterStatus,
pub sort_order: i32,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostCenterSummary {
pub id: CostCenterId,
pub name: String,
pub status: CostCenterStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostCenterRef {
pub id: CostCenterId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct EmvQrConfigId(pub Uuid);
impl EmvQrConfigId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for EmvQrConfigId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<EmvQrConfigId> for Uuid {
fn from(id: EmvQrConfigId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmvQrConfigDto {
pub id: EmvQrConfigId,
pub merchant_name: String,
pub merchant_city: String,
pub country_code: String,
pub mcc: String,
pub gui: String,
pub merchant_identifier: String,
pub currency: String,
pub initiation_method: String,
pub bank_account_id: Option<Uuid>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmvQrConfigSummary {
pub id: EmvQrConfigId,
pub merchant_name: String,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmvQrConfigRef {
pub id: EmvQrConfigId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct BankCheckSequenceId(pub Uuid);
impl BankCheckSequenceId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for BankCheckSequenceId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<BankCheckSequenceId> for Uuid {
fn from(id: BankCheckSequenceId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BankCheckSequenceDto {
pub id: BankCheckSequenceId,
pub bank_account_id: Uuid,
pub numbering_mode: String,
pub next_number: i64,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BankCheckSequenceSummary {
pub id: BankCheckSequenceId,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BankCheckSequenceRef {
pub id: BankCheckSequenceId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PrintedCheckId(pub Uuid);
impl PrintedCheckId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PrintedCheckId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PrintedCheckId> for Uuid {
fn from(id: PrintedCheckId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrintedCheckDto {
pub id: PrintedCheckId,
pub bank_account_id: Uuid,
pub payment_id: Uuid,
pub payment_number: Option<String>,
pub check_number: String,
pub amount: Decimal,
pub payee_name: Option<String>,
pub status: String,
pub printed_at: DateTime<Utc>,
pub printed_by: Option<Uuid>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrintedCheckSummary {
pub id: PrintedCheckId,
pub payee_name: Option<String>,
pub status: String,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrintedCheckRef {
pub id: PrintedCheckId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct TaxTagRepairRunId(pub Uuid);
impl TaxTagRepairRunId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for TaxTagRepairRunId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<TaxTagRepairRunId> for Uuid {
fn from(id: TaxTagRepairRunId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaxTagRepairRunDto {
pub id: TaxTagRepairRunId,
pub date_from: NaiveDate,
pub date_to: NaiveDate,
pub rules: serde_json::Value,
pub lines_examined: i64,
pub lines_retagged: i64,
pub dry_run: bool,
pub overridden_closed_periods: serde_json::Value,
pub actor: Option<Uuid>,
pub reason: String,
pub ran_at: DateTime<Utc>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaxTagRepairRunSummary {
pub id: TaxTagRepairRunId,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaxTagRepairRunRef {
pub id: TaxTagRepairRunId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct FinancialStatementId(pub Uuid);
impl FinancialStatementId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for FinancialStatementId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<FinancialStatementId> for Uuid {
fn from(id: FinancialStatementId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FinancialStatementDto {
pub id: FinancialStatementId,
pub statement_number: String,
pub statement_type: StatementType,
pub name: String,
pub fiscal_period_id: Option<Uuid>,
pub fiscal_year: i32,
pub fiscal_month: Option<i32>,
pub as_of_date: NaiveDate,
pub period_start: Option<NaiveDate>,
pub period_end: Option<NaiveDate>,
pub is_comparative: bool,
pub comparative_period_id: Option<Uuid>,
pub comparative_as_of_date: Option<NaiveDate>,
pub status: StatementStatus,
pub total_current_assets: Option<Decimal>,
pub total_non_current_assets: Option<Decimal>,
pub total_assets: Option<Decimal>,
pub total_current_liabilities: Option<Decimal>,
pub total_non_current_liabilities: Option<Decimal>,
pub total_liabilities: Option<Decimal>,
pub total_equity: Option<Decimal>,
pub balance_check: bool,
pub balance_difference: Option<Decimal>,
pub total_revenue: Option<Decimal>,
pub total_cogs: Option<Decimal>,
pub gross_profit: Option<Decimal>,
pub gross_profit_margin: Option<Decimal>,
pub total_operating_expenses: Option<Decimal>,
pub operating_income: Option<Decimal>,
pub operating_margin: Option<Decimal>,
pub total_other_income: Option<Decimal>,
pub total_other_expenses: Option<Decimal>,
pub income_before_tax: Option<Decimal>,
pub tax_expense: Option<Decimal>,
pub net_income: Option<Decimal>,
pub net_profit_margin: Option<Decimal>,
pub cash_from_operations: Option<Decimal>,
pub cash_from_investing: Option<Decimal>,
pub cash_from_financing: Option<Decimal>,
pub net_cash_change: Option<Decimal>,
pub beginning_cash: Option<Decimal>,
pub ending_cash: Option<Decimal>,
pub total_debits: Option<Decimal>,
pub total_credits: Option<Decimal>,
pub trial_balance_check: bool,
pub line_items: serde_json::Value,
pub comparative_data: serde_json::Value,
pub variance_data: serde_json::Value,
pub notes: serde_json::Value,
pub management_notes: Option<String>,
pub generated_at: Option<DateTime<Utc>>,
pub generated_by: Option<Uuid>,
pub generation_parameters: serde_json::Value,
pub reviewed_at: Option<DateTime<Utc>>,
pub reviewed_by: Option<Uuid>,
pub approved_at: Option<DateTime<Utc>>,
pub approved_by: Option<Uuid>,
pub published_at: Option<DateTime<Utc>>,
pub pdf_url: Option<String>,
pub excel_url: Option<String>,
pub currency: String,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FinancialStatementSummary {
pub id: FinancialStatementId,
pub name: String,
pub status: StatementStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FinancialStatementRef {
pub id: FinancialStatementId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct FiscalPeriodId(pub Uuid);
impl FiscalPeriodId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for FiscalPeriodId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<FiscalPeriodId> for Uuid {
fn from(id: FiscalPeriodId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FiscalPeriodDto {
pub id: FiscalPeriodId,
pub period_code: String,
pub name: String,
pub period_type: PeriodType,
pub start_date: NaiveDate,
pub end_date: NaiveDate,
pub fiscal_year: i32,
pub fiscal_quarter: Option<i32>,
pub fiscal_month: Option<i32>,
pub parent_id: Option<Uuid>,
pub level: i32,
pub status: PeriodStatus,
pub is_current: bool,
pub opening_balance_set: bool,
pub opening_balance_date: Option<DateTime<Utc>>,
pub opening_balance_by: Option<Uuid>,
pub closing_started_at: Option<DateTime<Utc>>,
pub closing_started_by: Option<Uuid>,
pub closed_at: Option<DateTime<Utc>>,
pub closed_by: Option<Uuid>,
pub locked_at: Option<DateTime<Utc>>,
pub locked_by: Option<Uuid>,
pub lock_reason: Option<String>,
pub reopened_at: Option<DateTime<Utc>>,
pub reopened_by: Option<Uuid>,
pub reopen_reason: Option<String>,
pub allow_adjustments: bool,
pub adjustment_deadline: Option<NaiveDate>,
pub total_debits: Decimal,
pub total_credits: Decimal,
pub journal_count: i32,
pub total_revenue: Decimal,
pub total_expenses: Decimal,
pub net_income: Decimal,
pub total_assets: Decimal,
pub total_liabilities: Decimal,
pub total_equity: Decimal,
pub balance_sheet_generated: bool,
pub income_statement_generated: bool,
pub statements_generated_at: Option<DateTime<Utc>>,
pub notes: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FiscalPeriodSummary {
pub id: FiscalPeriodId,
pub name: String,
pub status: PeriodStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FiscalPeriodRef {
pub id: FiscalPeriodId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct JournalId(pub Uuid);
impl JournalId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for JournalId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<JournalId> for Uuid {
fn from(id: JournalId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JournalDto {
pub id: JournalId,
pub journal_number: String,
pub reference_number: Option<String>,
pub journal_type: JournalType,
pub branch_id: Option<Uuid>,
pub transaction_date: NaiveDate,
pub posting_date: Option<NaiveDate>,
pub fiscal_period_id: Option<Uuid>,
pub fiscal_year: Option<i32>,
pub fiscal_month: Option<i32>,
pub description: String,
pub notes: Option<String>,
pub currency: String,
pub total_debit: Decimal,
pub total_credit: Decimal,
pub line_count: i32,
pub source: JournalSource,
pub source_type: Option<String>,
pub source_id: Option<Uuid>,
pub source_reference: Option<String>,
pub is_reversed: bool,
pub reversed_by_id: Option<Uuid>,
pub reversed_at: Option<DateTime<Utc>>,
pub reversal_reason: Option<String>,
pub reverses_id: Option<Uuid>,
pub is_reversing: bool,
pub auto_reverse: bool,
pub auto_reverse_date: Option<NaiveDate>,
pub status: JournalStatus,
pub requires_approval: bool,
pub approval_threshold: Option<Decimal>,
pub submitted_at: Option<DateTime<Utc>>,
pub submitted_by: Option<Uuid>,
pub approved_at: Option<DateTime<Utc>>,
pub approved_by: Option<Uuid>,
pub rejected_at: Option<DateTime<Utc>>,
pub rejected_by: Option<Uuid>,
pub rejection_reason: Option<String>,
pub posted_at: Option<DateTime<Utc>>,
pub posted_by: Option<Uuid>,
pub is_voided: bool,
pub voided_at: Option<DateTime<Utc>>,
pub voided_by: Option<Uuid>,
pub void_reason: Option<String>,
pub attachments: serde_json::Value,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JournalSummary {
pub id: JournalId,
pub status: JournalStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JournalRef {
pub id: JournalId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct JournalLineId(pub Uuid);
impl JournalLineId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for JournalLineId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<JournalLineId> for Uuid {
fn from(id: JournalLineId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JournalLineDto {
pub id: JournalLineId,
pub journal_id: Uuid,
pub branch_id: Option<Uuid>,
pub party_type: Option<PartyType>,
pub party_id: Option<Uuid>,
pub line_number: i32,
pub account_id: Uuid,
pub account_number: String,
pub account_name: String,
pub debit_amount: Decimal,
pub credit_amount: Decimal,
pub currency: String,
pub exchange_rate: Decimal,
pub base_debit_amount: Decimal,
pub base_credit_amount: Decimal,
pub description: Option<String>,
pub cost_center_id: Option<Uuid>,
pub project_id: Option<Uuid>,
pub department_id: Option<Uuid>,
pub dimensions: Option<serde_json::Value>,
pub source_type: Option<String>,
pub source_id: Option<Uuid>,
pub source_reference: Option<String>,
pub is_tax_line: bool,
pub tax_rate: Option<Decimal>,
pub tax_base_amount: Option<Decimal>,
pub related_line_id: Option<Uuid>,
pub has_quantity: bool,
pub quantity: Option<Decimal>,
pub unit: Option<String>,
pub unit_price: Option<Decimal>,
pub is_reconciled: bool,
pub reconciliation_id: Option<Uuid>,
pub reconciled_at: Option<DateTime<Utc>>,
pub full_reconcile_id: Option<Uuid>,
pub is_posted: bool,
pub ledger_id: Option<Uuid>,
pub posted_at: Option<DateTime<Utc>>,
pub tags: serde_json::Value,
pub data: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JournalLineSummary {
pub id: JournalLineId,
pub account_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JournalLineRef {
pub id: JournalLineId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct LedgerId(pub Uuid);
impl LedgerId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for LedgerId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<LedgerId> for Uuid {
fn from(id: LedgerId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LedgerDto {
pub id: LedgerId,
pub account_id: Uuid,
pub account_number: String,
pub account_name: String,
pub account_type: AccountType,
pub normal_balance: NormalBalance,
pub journal_id: Uuid,
pub journal_number: String,
pub journal_line_id: Uuid,
pub transaction_date: NaiveDate,
pub posting_date: NaiveDate,
pub fiscal_period_id: Option<Uuid>,
pub fiscal_year: i32,
pub fiscal_month: i32,
pub description: String,
pub reference: Option<String>,
pub currency: String,
pub debit_amount: Decimal,
pub credit_amount: Decimal,
pub balance_before: Decimal,
pub balance_after: Decimal,
pub balance_change: Decimal,
pub sequence_number: i32,
pub branch_id: Option<Uuid>,
pub party_type: Option<PartyType>,
pub party_id: Option<Uuid>,
pub cost_center_id: Option<Uuid>,
pub project_id: Option<Uuid>,
pub department_id: Option<Uuid>,
pub dimensions: Option<serde_json::Value>,
pub source_type: Option<String>,
pub source_id: Option<Uuid>,
pub source_reference: Option<String>,
pub is_reconciled: bool,
pub reconciliation_id: Option<Uuid>,
pub reconciled_at: Option<DateTime<Utc>>,
pub is_opening_balance: bool,
pub is_closing_entry: bool,
pub is_adjustment: bool,
pub is_reversed: bool,
pub reversed_by_id: Option<Uuid>,
pub reverses_id: Option<Uuid>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LedgerSummary {
pub id: LedgerId,
pub account_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LedgerRef {
pub id: LedgerId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct ReconciliationId(pub Uuid);
impl ReconciliationId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for ReconciliationId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<ReconciliationId> for Uuid {
fn from(id: ReconciliationId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReconciliationDto {
pub id: ReconciliationId,
pub reconciliation_number: String,
pub account_id: Uuid,
pub account_number: String,
pub account_name: String,
pub reconciliation_type: ReconciliationType,
pub period_start: NaiveDate,
pub period_end: NaiveDate,
pub statement_date: NaiveDate,
pub opening_book_balance: Decimal,
pub opening_statement_balance: Decimal,
pub previous_reconciliation_id: Option<Uuid>,
pub closing_book_balance: Decimal,
pub closing_statement_balance: Decimal,
pub total_matched_debits: Decimal,
pub total_matched_credits: Decimal,
pub matched_count: i32,
pub total_unmatched_book_debits: Decimal,
pub total_unmatched_book_credits: Decimal,
pub unmatched_book_count: i32,
pub total_unmatched_statement_debits: Decimal,
pub total_unmatched_statement_credits: Decimal,
pub unmatched_statement_count: i32,
pub outstanding_deposits: Decimal,
pub outstanding_checks: Decimal,
pub deposits_in_transit: Decimal,
pub bank_charges: Decimal,
pub bank_interest: Decimal,
pub nsf_checks: Decimal,
pub other_adjustments: Decimal,
pub adjusted_book_balance: Option<Decimal>,
pub adjusted_statement_balance: Option<Decimal>,
pub difference: Decimal,
pub is_balanced: bool,
pub status: ReconciliationStatus,
pub started_at: Option<DateTime<Utc>>,
pub started_by: Option<Uuid>,
pub completed_at: Option<DateTime<Utc>>,
pub completed_by: Option<Uuid>,
pub reviewed_at: Option<DateTime<Utc>>,
pub reviewed_by: Option<Uuid>,
pub has_adjusting_entries: bool,
pub adjusting_journal_ids: serde_json::Value,
pub statement_source: Option<String>,
pub statement_file_url: Option<String>,
pub import_date: Option<DateTime<Utc>>,
pub notes: Option<String>,
pub discrepancy_notes: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReconciliationSummary {
pub id: ReconciliationId,
pub account_name: String,
pub status: ReconciliationStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReconciliationRef {
pub id: ReconciliationId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct ReconciliationItemId(pub Uuid);
impl ReconciliationItemId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for ReconciliationItemId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<ReconciliationItemId> for Uuid {
fn from(id: ReconciliationItemId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReconciliationItemDto {
pub id: ReconciliationItemId,
pub reconciliation_id: Uuid,
pub item_number: i32,
pub source: String,
pub ledger_id: Option<Uuid>,
pub journal_id: Option<Uuid>,
pub book_date: Option<NaiveDate>,
pub book_reference: Option<String>,
pub book_description: Option<String>,
pub book_debit: Decimal,
pub book_credit: Decimal,
pub statement_date: Option<NaiveDate>,
pub statement_reference: Option<String>,
pub statement_description: Option<String>,
pub statement_debit: Decimal,
pub statement_credit: Decimal,
pub status: ReconciliationItemStatus,
pub matched_with_id: Option<Uuid>,
pub match_date: Option<DateTime<Utc>>,
pub match_method: Option<String>,
pub match_confidence: Option<Decimal>,
pub has_difference: bool,
pub difference_amount: Decimal,
pub difference_reason: Option<String>,
pub requires_adjustment: bool,
pub adjustment_type: Option<String>,
pub adjustment_journal_id: Option<Uuid>,
pub adjusted_at: Option<DateTime<Utc>>,
pub is_written_off: bool,
pub write_off_reason: Option<String>,
pub write_off_approved_by: Option<Uuid>,
pub is_outstanding: bool,
pub outstanding_type: Option<String>,
pub expected_clear_date: Option<NaiveDate>,
pub notes: Option<String>,
pub data: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReconciliationItemSummary {
pub id: ReconciliationItemId,
pub status: ReconciliationItemStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReconciliationItemRef {
pub id: ReconciliationItemId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct FullReconcileId(pub Uuid);
impl FullReconcileId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for FullReconcileId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<FullReconcileId> for Uuid {
fn from(id: FullReconcileId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FullReconcileDto {
pub id: FullReconcileId,
pub exchange_total: Decimal,
pub reconciled_at: DateTime<Utc>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub metadata: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FullReconcileSummary {
pub id: FullReconcileId,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FullReconcileRef {
pub id: FullReconcileId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PartialReconcileId(pub Uuid);
impl PartialReconcileId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PartialReconcileId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PartialReconcileId> for Uuid {
fn from(id: PartialReconcileId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PartialReconcileDto {
pub id: PartialReconcileId,
pub debit_move_id: Uuid,
pub credit_move_id: Uuid,
pub full_reconcile_id: Option<Uuid>,
pub exchange_move_id: Option<Uuid>,
pub amount: Decimal,
pub debit_amount_currency: Option<Decimal>,
pub credit_amount_currency: Option<Decimal>,
pub currency: String,
pub max_date: NaiveDate,
pub origin: ReconcileOrigin,
pub source_type: Option<String>,
pub source_id: Option<Uuid>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub metadata: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PartialReconcileSummary {
pub id: PartialReconcileId,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PartialReconcileRef {
pub id: PartialReconcileId,
}