export type CounterpartyRoleHint = "ordinary_counterparty" | "bank_or_financial_institution"; const FINANCIAL_INSTITUTION_PATTERNS: RegExp[] = [ /(?:^|[\s"«(,-])банк(?:$|[\s"»),.-])/u, /сбербанк/u, /(?:^|[\s"«(,-])сбер(?:$|[\s"»),.-])/u, /(?:^|[\s"«(,-])втб(?:$|[\s"»),.-])/u, /альфа[\s-]*банк/u, /тинькофф/u, /(?:^|[\s"«(,-])т[\s-]*банк(?:$|[\s"»),.-])/u, /газпромбанк/u, /росбанк/u, /райффайзен/u, /совкомбанк/u, /промсвязьбанк/u, /(?:^|[\s"«(,-])псб(?:$|[\s"»),.-])/u, /(?:^|[\s"«(,-])мкб(?:$|[\s"»),.-])/u, /ак[\s-]*барс/u, /уралсиб/u, /юникредит/u, /почта[\s-]*банк/u, /(?:^|[\s"«(,-])открытие(?:$|[\s"»),.-])/u, /кредитн(?:ая|ый|ое|ые)\s+организац/u ]; function normalizeCounterpartyRoleText(value: unknown): string { return String(value ?? "") .toLowerCase() .replace(/ё/g, "е") .replace(/[._]+/g, " ") .replace(/\s+/g, " ") .trim(); } export function isLikelyFinancialInstitutionCounterparty(value: unknown): boolean { const normalized = normalizeCounterpartyRoleText(value); if (!normalized) { return false; } return FINANCIAL_INSTITUTION_PATTERNS.some((pattern) => pattern.test(normalized)); } export function counterpartyRoleHintForName(value: unknown): CounterpartyRoleHint { return isLikelyFinancialInstitutionCounterparty(value) ? "bank_or_financial_institution" : "ordinary_counterparty"; }