@accounter/server
Version:
Accounter GraphQL server
154 lines (153 loc) • 3.43 kB
TypeScript
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>;
}