Розробка системи перевірки PEP (Політично наражені особи)
Перевірка PEP — вимога FATF R12 та більшості законодавства про AML. Політично значущі особи (державні чиновники, керівники державних корпорацій, політики, військові командири вищого рангу) вважаються клієнтами високого ризику через підвищений ризик корупції. Це не означає блокування, але вимагає посиленої належної перевірки.
Що таке PEP
Внутрішній PEP: високопоставлений державний чиновник у країні обслуговування клієнта.
Іноземний PEP: чиновник іншої країни — зазвичай вищий ризик.
PEP міжнародної організації: керівники великих міжнародних організацій (ООН, МВФ, Світовий банк).
RCA (Родичі та близькі партнери): подружжя, діти, батьки PEP, ділові партнери.
Джерела даних PEP
Комерційні постачальники:
- ComplyAdvantage: 10M+ записів, REST API, покриття RCA
- Refinitiv World-Check: найбільша база даних, використовується банками
- Dow Jones Risk & Compliance: рівень підприємства
- Acuris Risk Intelligence
Особливість: немає єдиного офіційного державного реєстру PEP. Постачальники збирають дані з відкритих джерел (урядові веб-сайти, Wikileaks, журналісти).
Інтеграція API ComplyAdvantage
class PEPScreeningService {
async screenPerson(params: {
firstName: string;
lastName: string;
dateOfBirth?: string;
nationality?: string;
}): Promise<PEPScreenResult> {
const response = await this.complyAdvantage.search({
search_term: `${params.firstName} ${params.lastName}`,
fuzziness: 0.7,
filters: {
types: ["pep", "pep-class-1", "pep-class-2", "pep-class-3", "pep-class-4"],
},
});
const matches = response.content.data.hits;
if (matches.length === 0) return { isPEP: false, isRCA: false };
// Фільтруємо за датою народження, якщо є
const strongMatches = params.dateOfBirth
? matches.filter(m => this.dobMatches(m, params.dateOfBirth!))
: matches;
if (strongMatches.length === 0) {
return { isPEP: false, possibleMatches: matches.slice(0, 3) };
}
const match = strongMatches[0];
return {
isPEP: match.doc.types.some(t => t.startsWith("pep")),
isRCA: match.doc.types.includes("relative-close-associate"),
pepClass: this.extractPEPClass(match.doc.types),
positions: match.doc.fields?.filter(f => f.tag === "position") ?? [],
country: match.doc.fields?.find(f => f.tag === "country_names")?.value,
matchScore: match.score,
entity: match.doc,
};
}
private extractPEPClass(types: string[]): number {
if (types.includes("pep-class-1")) return 1; // Глава держави, міністри уряду
if (types.includes("pep-class-2")) return 2; // Члени парламенту, вищої судової влади
if (types.includes("pep-class-3")) return 3; // Вищі військові, керівники державних підприємств
if (types.includes("pep-class-4")) return 4; // Місцева влада, посади нижчого рівня ризику
return 0;
}
}
Логіка обробки результатів PEP
async function handlePEPResult(userId: string, result: PEPScreenResult): Promise<void> {
if (!result.isPEP && !result.isRCA) {
await db.setUserRiskFactor(userId, "pep", false);
return;
}
// PEP вимагає посиленої належної перевірки
await db.setUserRiskFactor(userId, "pep", true);
await db.updateUserRiskLevel(userId, RiskLevel.HIGH);
const eddRequired: EDDRequirement = {
sourceOfFunds: true,
sourceOfWealth: true,
seniorManagementApproval: result.pepClass <= 2, // клас 1-2 вимагає затвердження керівництва
enhancedOngoingMonitoring: true,
annualReview: true,
};
await requestEDD(userId, eddRequired);
await notifyComplianceOfficer(userId, result);
}
Постійний моніторинг PEP
PEP статус може з'явитися у існуючого клієнта (призначення на посаду):
// Щотижневе переоцінювання всіх активних клієнтів
@Cron("0 2 * * 0") // кожної неділі о 2:00
async weeklyPEPRescreening() {
const activeCustomers = await db.getActiveCustomers();
for (const customer of activeCustomers) {
const result = await this.pepService.screenPerson(customer);
const previousStatus = customer.pepStatus;
if (result.isPEP && !previousStatus) {
// Новий PEP — негайне повідомлення
await this.handleNewPEPDetection(customer.id, result);
}
}
}
Система перевірки PEP з інтеграцією ComplyAdvantage, робочим процесом EDD та періодичним переоцінюванням — 2-3 тижні розробки.







