import { Authorization } from "../../../Authorization" import { Fee } from "../../Fee" import { Settlement } from "../../Settlement" import * as column from "./column" export type Complete = Record export namespace Complete { export const header = column.order export const defaultValues: Record = column.defaultValues export function from(settlement: Settlement, authorizations: Authorization[]): Complete[] { const result: Complete[] = [] for (const transaction of settlement.transactions) { const rate = typeof transaction.payout == "object" && transaction.payout.rate ? transaction.payout.rate : undefined const fee: Fee = Fee.upgrade(transaction.fee, transaction.currency) const authorization = authorizations.find(a => transaction.authorization == a.id) result.push({ "Settlement Id": settlement.reference, Merchant: settlement.merchant, Operation: transaction.type, "Tx Date": transaction.created, "Clearing Date": transaction.clearingDate ?? "", "Tx Amount": transaction.amount ? transaction.amount.toString() : transaction.gross.toString(), "Tx Currency": transaction.currency, "Gross Currency": transaction.grossCurrency ?? transaction.currency, "Authorization Id": transaction.authorization, "Authorization Number": authorization?.number, "Card Iin": authorization?.card.iin, "Card Type": transaction.card, "Card Scheme": transaction.scheme, "Scheme Reference": transaction.reference, "Issuer Country": transaction.area ?? "", "Settlement Service": transaction.nnss ?? "", "Gross Amount": transaction.gross.toString(), Interchange: fee.interchange.toString(), "Scheme Fee": fee.network != undefined ? fee.network.toString() : "0", "Intergiro Fee": fee.intergiro.toString(), "Total Fee": fee.total.toString(), Fee: fee.total.toString(), "Net Amount": transaction.net.toString(), "Fx Rate": (rate ?? "").toString(), "Fxd Net Amount": typeof transaction.payout == "object" && transaction.payout.net ? transaction.payout.net.toString() : "", "Payout Currency": typeof transaction.payout == "object" ? transaction.payout.currency : "", "Transfer Date": transaction.transferDate ?? "", Arn: transaction.arn, Processor: transaction.processor ?? settlement.processor, }) } return result } export type Csv = { header: typeof header data: Complete[] } export namespace Csv { export function from(data: Complete[]): Csv { return { header: header, data } } } }