import type { LedgerRecord } from '../demo-fixtures/validators/types.js';
import type { financial_account_type } from '../modules/financial-accounts/types.js';
import type { CountryCode, Currency } from '../shared/enums.js';
/**
 * Tax Category Mapping for Financial Accounts
 */
export interface TaxCategoryMapping {
    taxCategoryId: string;
    currency: Currency;
    ownerId: string;
}
/**
 * Business Entity Fixture
 */
export interface BusinessFixture {
    id: string;
    name: string;
    country: CountryCode;
    canSettleWithReceipt: boolean;
    ownerId: string;
}
/**
 * Tax Category Fixture
 */
export interface TaxCategoryFixture {
    id: string;
    name: string;
    ownerId: string;
}
/**
 * Financial Account Fixture
 */
export interface FinancialAccountFixture {
    id: string;
    accountNumber: string;
    type: financial_account_type;
    currency: Currency;
    taxCategoryMappings?: TaxCategoryMapping[];
    ownerId: string;
}
/**
 * Charge Fixture
 */
export interface ChargeFixture {
    id: string;
    ownerId: string;
    userDescription: string;
}
/**
 * Transaction Fixture
 */
export interface TransactionFixture {
    id: string;
    chargeId: string;
    businessId: string;
    amount: string;
    currency: Currency;
    eventDate: string;
    debitDate: string;
    accountNumber: string;
    ownerId: string;
}
/**
 * Document Fixture
 */
export interface DocumentFixture {
    id: string;
    chargeId: string;
    creditorId: string;
    debtorId: string;
    serialNumber: string;
    type: string;
    date: string;
    totalAmount: string;
    currencyCode: Currency;
    ownerId: string;
}
/**
 * Tag Fixture (Optional)
 */
export interface TagFixture {
    id: string;
    name: string;
    description?: string;
    ownerId: string;
}
/**
 * Fixture Collection for a Use-Case
 */
export interface FixtureSpec {
    businesses: BusinessFixture[];
    taxCategories: TaxCategoryFixture[];
    financialAccounts: FinancialAccountFixture[];
    charges: ChargeFixture[];
    transactions: TransactionFixture[];
    documents: DocumentFixture[];
    tags?: TagFixture[];
}
/**
 * Use-Case Metadata
 */
export interface UseCaseMetadata {
    author: string;
    createdAt: string;
    updatedAt: string;
    volumeMultiplier?: number;
}
/**
 * Ledger Expectations for Validation
 */
export interface UseCaseExpectations {
    ledgerRecordCount: number;
    totalDebitILS?: string;
    totalCreditILS?: string;
}
/**
 * Use-Case Category
 */
export type UseCaseCategory = 'expenses' | 'income' | 'equity' | 'payroll' | 'other';
/**
 * Complete Use-Case Specification
 */
export interface UseCaseSpec {
    id: string;
    name: string;
    description: string;
    category: UseCaseCategory;
    fixtures: FixtureSpec;
    metadata: UseCaseMetadata;
    expectations?: UseCaseExpectations;
}
/**
 * Fixture Collection for a Use-Case
 */
export interface ExtendedFixtureSpec {
    businesses: BusinessFixture[];
    taxCategories: TaxCategoryFixture[];
    financialAccounts: FinancialAccountFixture[];
    charges: ChargeFixture[];
    transactions: TransactionFixture[];
    documents: DocumentFixture[];
    meta?: {
        id: string;
        description?: string;
        version?: string;
        [key: string]: unknown;
    };
    tags?: TagFixture[];
    expectations?: UseCaseExpectations & {
        ledger?: LedgerRecord[];
    };
    placeholders?: Record<string, string>;
}
