import { getInvoice, invoiceMatches, searchInvoices, type SearchInvoicesInput } from './invoices.ts' import { type PayPalAuthInput } from './paypal-helpers.ts' import { searchTransactions } from './transactions.ts' export type ReimbursementSearchInput = PayPalAuthInput & { invoiceId?: string invoiceNumber?: string recipientEmail?: string amount?: string | number currencyCode?: string query?: string startDate?: string | Date endDate?: string | Date includeRaw?: boolean } /** * Search PayPal invoices and transaction activity together for reimbursement investigations. * Callers pass recipient, amount, and dates — this package has no baked-in people or templates. */ export async function searchInvoicesForReimbursement(input: ReimbursementSearchInput = {}) { const invoiceResults = input.invoiceId ? { items: [await getInvoice({ ...input, id: input.invoiceId })].filter(Boolean), match: null } : await searchInvoices({ ...input, invoiceNumber: input.invoiceNumber, recipientEmail: input.recipientEmail, amount: input.amount, currencyCode: input.currencyCode, pageSize: 20, } satisfies SearchInvoicesInput) const invoices = (invoiceResults.items as Array).filter((item) => invoiceMatches(input.includeRaw ? item.summary : item, input), ) const shouldSearchTransactions = Boolean( input.startDate || input.endDate || input.amount || input.recipientEmail || input.query, ) const transactions = shouldSearchTransactions ? await searchTransactions({ ...input, email: input.recipientEmail, amount: input.amount, currencyCode: input.currencyCode, query: input.query, direction: 'incoming', }) : null return { criteria: { invoiceId: input.invoiceId ?? null, invoiceNumber: input.invoiceNumber ?? null, recipientEmail: input.recipientEmail ?? null, amount: input.amount ?? null, currencyCode: input.currencyCode ?? null, query: input.query ?? null, }, invoices, transactions, likely_matches: { invoice: invoices[0] ?? null, transaction: transactions?.matches?.[0] ?? null, }, } } export default searchInvoicesForReimbursement