Разработка системы PEP (Politically Exposed Persons) проверки
PEP проверка — требование FATF R12 и большинства AML законодательств. Политически значимые лица (государственные чиновники, руководители госкорпораций, политики, военные командиры высшего ранга) считаются high-risk клиентами из-за повышенного риска коррупции. Это не означает блокировку, но требует Enhanced Due Diligence.
Что такое PEP
Domestic PEP: высокопоставленный чиновник в стране обслуживания клиента.
Foreign PEP: чиновник другой страны — обычно более высокий риск.
International organization PEP: руководители крупных международных организаций (ООН, МВФ, Мировой Банк).
RCA (Relatives and Close Associates): супруги, дети, родители PEP, бизнес-партнёры.
Источники PEP данных
Коммерческие провайдеры:
- ComplyAdvantage: 10M+ записей, REST API, покрытие RCA
- Refinitiv World-Check: крупнейшая база, используется банками
- Dow Jones Risk & Compliance: enterprise grade
- Acuris Risk Intelligence
Особенность: нет единого официального государственного PEP реестра. Провайдеры собирают данные из открытых источников (правительственные сайты, Wikileaks, журналисты).
Интеграция ComplyAdvantage API
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 };
// Фильтруем по DOB если есть
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; // Head of state, government ministers
if (types.includes("pep-class-2")) return 2; // Parliament members, senior judiciary
if (types.includes("pep-class-3")) return 3; // Senior military, state-owned enterprise heads
if (types.includes("pep-class-4")) return 4; // Local government, lower-risk positions
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 требует Enhanced Due Diligence
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 требует senior approval
enhancedOngoingMonitoring: true,
annualReview: true,
};
await requestEDD(userId, eddRequired);
await notifyComplianceOfficer(userId, result);
}
Continuous PEP monitoring
PEP статус может появиться у существующего клиента (назначение на должность):
// Еженедельный rescreening всех активных клиентов
@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 workflow и periodic rescreening — 2-3 недели разработки.







