import * as isoly from "isoly" import * as model from "@payfunc/model-card" import * as utilities from "../../utilities" export type Network = Partial< Record< model.Card.Scheme, { fixed?: number | (Partial> & { other: number }) percentage?: number } > > export namespace Network { export function apply( gross: number, rate: number, area?: isoly.CountryCode.Alpha2, network?: Network[model.Card.Scheme], precision = 4 ): number { const factor = network?.percentage ?? 0 const fixed = typeof network?.fixed == "object" ? (area && network.fixed[area]) ?? (area && isoly.CountryCode.Alpha2.isEEA(area) && network.fixed.eea ? network.fixed["eea"] : network.fixed["other"]) : network?.fixed ?? 0 return utilities.add( precision, utilities.multiply(precision, Math.abs(gross), factor), utilities.multiply(precision, fixed, rate) ) } }