UNPKG

@accounter/server

Version:
197 lines (179 loc) 5.39 kB
import type { currency, document_type, IGetAllDocumentsResult } from '../documents/types.js'; import type { IGetTransactionsByIdsResult } from '../transactions/types.js'; /** * Transaction interface matching the database schema * Uses the complete type from transactions module */ export type Transaction = IGetTransactionsByIdsResult; /** * Document interface matching the database schema * Uses the complete type from documents module */ export type Document = IGetAllDocumentsResult; /** * Represents a single charge match with its confidence score */ export interface ChargeMatchProto { /** UUID of the matched charge */ chargeId: string; /** Confidence score between 0.00 and 1.00 (two decimal precision) */ confidenceScore: number; } /** * Result of finding matches for a single charge */ export interface ChargeMatchesResult { /** Array of up to 5 matches, ordered by confidence score (highest first) */ matches: ChargeMatchProto[]; } /** * Represents a charge that was successfully merged during auto-match */ export interface MergedCharge { /** UUID of the deleted/merged-away charge */ chargeId: string; /** Confidence score that triggered the merge (≥0.95) */ confidenceScore: number; } /** * Result of the auto-match operation */ export interface AutoMatchChargesResult { /** Total number of charges that were successfully matched and merged */ totalMatches: number; /** Array of charges that were merged, with their confidence scores */ mergedCharges: MergedCharge[]; /** Array of charge UUIDs that had multiple high-confidence matches and were skipped */ skippedCharges: string[]; /** Array of error messages encountered during the operation */ errors: string[]; } /** * Aggregated transaction data for matching purposes */ export interface AggregatedTransaction { /** Sum of all transaction amounts */ amount: number; /** Common currency across all transactions */ currency: currency; /** Single non-null business ID (or null if all are null) */ businessId: string | null; /** Earliest event_date among transactions */ date: Date; /** Earliest debit_date/debit_timestamp (for receipt matching) */ debitDate: Date | null; /** Concatenated source_description values */ description: string; } /** * Aggregated document data for matching purposes */ export interface AggregatedDocument { /** Sum of all normalized document amounts */ amount: number; /** Common currency across all documents */ currency: currency; /** Single non-null business ID (or null if all are null) */ businessId: string | null; /** Latest document date */ date: Date; /** Concatenated serial numbers and identifiers */ description: string; /** Document type (for date matching logic) */ type: document_type; /** Whether the business is on the creditor side */ businessIsCreditor: boolean; } /** * Individual confidence scores for different matching factors */ export interface ConfidenceScores { /** Amount confidence (0.0 - 1.0) */ amount: number; /** Currency confidence (0.0 - 1.0) */ currency: number; /** Business confidence (0.0 - 1.0) */ business: number; /** Date confidence (0.0 - 1.0) */ date: number; } /** * Complete confidence calculation result */ export interface ConfidenceResult { /** Overall weighted confidence score */ overall: number; /** Individual component scores */ scores: ConfidenceScores; } /** * Charge classification for matching purposes */ export enum ChargeType { /** Charge has transactions but no accounting documents */ TRANSACTION_ONLY = 'TRANSACTION_ONLY', /** Charge has accounting documents but no transactions */ DOCUMENT_ONLY = 'DOCUMENT_ONLY', /** Charge has both transactions and accounting documents */ MATCHED = 'MATCHED', } /** * Charge with its associated data for matching */ export interface ChargeWithData { /** Charge UUID */ chargeId: string; /** Owner UUID */ ownerId: string; /** Charge classification */ type: ChargeType; /** Charge description */ description?: string; /** Associated transactions (if any) */ transactions: Transaction[]; /** Associated documents (if any) */ documents: Document[]; } /** * Candidate charge for matching with aggregated data */ export interface MatchCandidate { /** Charge UUID */ chargeId: string; /** Aggregated transaction data (if transaction charge) */ transactionData?: AggregatedTransaction; /** Aggregated document data (if document charge) */ documentData?: AggregatedDocument; } /** * Match score result with confidence and components */ export interface MatchScore { /** Charge ID being scored */ chargeId: string; /** Overall confidence score (0.0 - 1.0) */ confidenceScore: number; /** Individual confidence component scores */ components: ConfidenceScores; /** Whether client gentle scoring was applied (for tie-breakers) */ gentleMode?: boolean; } /** * Transaction charge for matching */ export interface TransactionCharge { /** Charge UUID */ chargeId: string; /** Array of transactions in the charge */ transactions: Transaction[]; } /** * Document charge for matching */ export interface DocumentCharge { /** Charge UUID */ chargeId: string; /** Array of documents in the charge */ documents: Document[]; } export type * from './__generated__/types.js';