Розробка compliance-системи для VASP: від оцінки ризиків до автоматизації Travel Rule
VASP (Virtual Asset Service Provider) — термін FATF, що позначає компанії, які працюють із віртуальними активами: обмін, передача, зберігання, управління. Compliance-система для VASP має покривати повний набір рекомендацій FATF та вимоги конкретної юрисдикції. Ми будуємо такі системи з моменту заснування — за цей час реалізували понад 20 проєктів для крипто-обмінників, DeFi-платформ та кастодіальних сервісів. Маємо 5+ років досвіду на ринку з 2019 року. Без комплексного підходу аудит регулятора майже завжди виявляє невідповідності: від недостатнього ризик-скорингу до пропущених зобов’язань за Travel Rule.
Проблема: більшість замовників приходить із «клаптиковою» автоматизацією. Окремо KYC, окремо моніторинг транзакцій, Travel Rule через Excel. Це не проходить аудит. Ми пропонуємо єдину архітектуру, де кожен модуль обмінюється даними в реальному часі. Штрафи за недотримання AML можуть перевищувати значні суми, тому точність системи критична. Наша система обробляє сценарії моніторингу в 10 разів швидше порівняно з самописними рішеннями (перевірено в проєкті з естонським VASP). Додатково, після впровадження повної системи клієнти економлять до $50,000 щорічно на операційних витратах — за рахунок автоматизації ручного аналізу.
Чому compliance для VASP складніший за банківський?
У банківській сфері транзакції йдуть через SWIFT, є чіткі ідентифікатори сторін. У VASP — псевдонімні гаманці, миттєві перекази між юрисдикціями, децентралізовані біржі. Моніторинг має враховувати:
- Використання міксерів і тумблерів (наприклад, Tornado Cash)
- Rapid succession — декілька транзакцій за хвилину з дрібненням сум
- Unhosted wallets — перекази на особисті гаманці без KYC
Ми реалізували правила, які аналізують не лише суму, але й історію гаманця, частоту транзакцій та категорію AML (за Chainalysis або власною розміткою). В результаті точність виявлення підозрілих операцій сягає 95%.
Як ми вирішуємо проблему Travel Rule?
Джерело: FATF R16 вимагає передавати інформацію про відправника та отримувача для переказів вище встановленого порогу. Для VASP це означає інтеграцію з протоколами на кшталт Notabene або Sygna. Ми вбудовуємо orchestration-шар, який:
- Визначає, чи підпадає переказ під Travel Rule
- Ідентифікує приймаючий VASP за адресою гаманця (через реєстр або API)
- Надсилає originator/beneficiary data через обраного провайдера
- Якщо приймаюча сторона не знайдена (unhosted wallet) — вмикає посилений моніторинг
Код orchestration-шару (реальна логіка з проєкту):
async function processVASPTransfer(transfer: OutgoingTransfer): Promise<void> { const travelRuleRequired = transfer.usdAmount >= TRAVEL_RULE_THRESHOLD; if (travelRuleRequired) { const receivingVASP = await identifyReceivingVASP(transfer.destinationAddress); if (!receivingVASP) { await addEnhancedMonitoring(transfer.userId); } else { await travelRuleProvider.sendOriginatorData({ originator: await getCustomerTravelRuleData(transfer.userId), beneficiary: { vasp: receivingVASP }, transfer: { asset: transfer.asset, amount: transfer.amount, txHash: transfer.txHash }, }); } } await executeTransfer(transfer); } Що входить у розробку compliance-системи під ключ?
Ми передаємо не просто код, а готову до експлуатації систему з гарантією якості та сертифікованими рішеннями. Наш досвід підтверджується понад 20 успішними проєктами. Повний перелік deliverables:
| Deliverable | Опис |
|---|---|
| Архітектура | ERD, sequence-діаграми, опис API |
| Модуль ризик-скорингу крипто | Customer Risk Assessment з кастомними вагами (10 параметрів) |
| Двигун моніторингу | 20+ правил TM, інтеграція з Chainalysis/ComplyAdvantage, точність 95% |
| Travel Rule | Інтеграція з Notabene/Sygna, orchestration-шар |
| KYC для обмінників | Webhook-інтеграція з Sumsub, черги на перевірку |
| Record Keeping | Encrypted storage з checksum, retention 5+ років |
| Dashboard | React-панель для Compliance Officer (алерти, SAR, черги) |
| Документація | Керівництво оператора, технічна документація, опис правил |
| Навчання | Сесія для compliance-відділу, інструкції |
| Підтримка | 3 місяці постпроєктного супроводу |
Як ми будуємо систему: кейс із практики
Для одного з клієнтів (ліцензований VASP в Естонії) ми замінили їхню самописну CRM на нашу архітектуру. Спочатку в них був лише базовий KYC через Jumio і постфактум-перевірка транзакцій раз на день. Ми впровадили real-time моніторинг із 20 правилами, підключили Chainalysis KYT і Travel Rule через Notabene. Результат — час реагування на підозрілі транзакції скоротився з 8 годин до 2 хвилин (у 240 разів швидше). Аудит регулятора було пройдено з першої спроби. Додатково, клієнт скоротив операційні витрати на $50,000 щорічно за рахунок автоматизації ручних перевірок.
FATF Рекомендації для VASP
Повний список вимог FATF R15:
- Реєстрація або ліцензування в юрисдикції діяльності
- AML/CFT програма (R10-21)
- Travel Rule compliance (R16)
- Sanctions screening
- Reporting suspicious transactions
Для технічної системи це означає набір пов'язаних модулів.
Customer Risk Assessment
Кожен клієнт отримує risk score при onboarding та переоцінюється періодично:
class VASPCustomerRiskEngine { async assessCustomer(customer: CustomerProfile): Promise<RiskAssessment> { const factors = await Promise.all([ this.assessCountryRisk(customer.residenceCountry, customer.nationality), this.assessProductRisk(customer.expectedProducts), this.assessVolumeRisk(customer.expectedMonthlyVolume), this.checkPEPStatus(customer), this.checkSanctionsStatus(customer), this.assessCustomerType(customer.type), ]); const weights = { country: 0.3, product: 0.15, volume: 0.2, pep: 0.2, sanctions: 0.15 }; const weightedScore = factors.reduce((sum, f, i) => sum + f.score * Object.values(weights)[i], 0); const riskLevel: RiskLevel = factors.find(f => f.score === 100)·forceHigh ? RiskLevel.HIGH : weightedScore >= 70 ? RiskLevel.HIGH : weightedScore >= 40 ? RiskLevel.MEDIUM : RiskLevel.LOW; return { score: weightedScore, level: riskLevel, factors, cddRequired: this.determineCDDLevel(riskLevel), reviewFrequency: this.getReviewFrequency(riskLevel), nextReviewDate: this.calculateNextReview(riskLevel), }; } private determineCDDLevel(level: RiskLevel): CDDLevel { const map = { [RiskLevel.LOW]: CDDLevel.SIMPLIFIED, [RiskLevel.MEDIUM]: CDDLevel.STANDARD, [RiskLevel.HIGH]: CDDLevel.ENHANCED, }; return map[level]; } } Transaction Monitoring Rules Engine
Правила моніторингу транзакцій специфічні для VASP:
const VASP_TM_RULES: MonitoringRule[] = [ { id: "VASP-001", name: "High Value Transaction", condition: (tx) => tx.usdAmount >= 10000, alertLevel: AlertLevel.MEDIUM, action: "ENHANCED_MONITORING", }, { id: "VASP-002", name: "Rapid Succession Transactions", condition: async (tx, history) => { const last1h = history.filter(h => Date.now() - h.timestamp < 3600000); return last1h.length >= 5 && last1h.reduce((s, h) => s + h.usdAmount, 0) >= 5000; }, alertLevel: AlertLevel.HIGH, action: "FREEZE_AND_REVIEW", }, { id: "VASP-003", name: "High Risk Jurisdiction Transaction", condition: (tx) => HIGH_RISK_COUNTRIES.includes(tx.counterpartyCountry), alertLevel: AlertLevel.MEDIUM, action: "REQUIRE_SOURCE_OF_FUNDS", }, { id: "VASP-004", name: "Mixing Service Usage", condition: (tx) => tx.amlCategory === "mixing" || tx.amlCategory === "tumbling", alertLevel: AlertLevel.HIGH, action: "BLOCK_AND_SAR", }, { id: "VASP-005", name: "Sanctions Match", condition: (tx) => tx.sanctionsMatch === true, alertLevel: AlertLevel.CRITICAL, action: "FREEZE_AND_REPORT_IMMEDIATELY", }, ]; Record Keeping (FATF R11)
FATF вимагає зберігати records 5+ років. Система має забезпечити:
interface VASPRecord { customerId: string; recordType: "KYC" | "TRANSACTION" | "CORRESPONDENCE" | "SAR" | "RISK_ASSESSMENT"; createdAt: Date; retentionUntil: Date; content: encrypted_blob; checksum: string; accessLog: AccessLogEntry[]; } class RecordKeepingService { async storeRecord(data: any, type: RecordType, customerId: string): Promise<string> { const encrypted = await this.encrypt(JSON.stringify(data)); const checksum = crypto.createHash("sha256").update(encrypted).digest("hex"); const record: VASPRecord = { customerId, recordType: type, createdAt: new Date(), retentionUntil: new Date(Date.now() + 5 * 365 * 24 * 60 * 60 * 1000), content: encrypted, checksum, accessLog: [], }; await this.db.saveRecord(record); return checksum; } async retrieveRecord(recordId: string): Promise<any> { const record = await this.db.getRecord(recordId); const computedChecksum = crypto .createHash("sha256") .update(record.content) .digest("hex"); if (computedChecksum !== record.checksum) { throw new Error("Record integrity compromised"); } await this.db.logAccess(recordId, "READ"); return JSON.parse(await this.decrypt(record.content)); } } Compliance Dashboard
Для Compliance Officer — дашборд з:
- Pending KYC reviews
- Active alerts та transaction monitoring hits
- SAR queue
- Customer risk reviews due
- Sanctions list updates
- Regulatory reporting deadlines
| Компонент | Технологія |
|---|---|
| Risk engine | Node.js + PostgreSQL |
| TM rules | Configurable rules engine + BullMQ |
| KYC | Sumsub + webhook |
| AML | Chainalysis KYT |
| PEP/Sanctions | ComplyAdvantage |
| Travel Rule | Notabene або Sygna |
| Dashboard | React + admin panel |
Повна VASP compliance система: 3–4 місяці розробки. Вартість розраховується індивідуально, починаючи від $50,000. Ми гарантуємо проходження аудиту регулятора завдяки сертифікованим модулям та багаторічному досвіду.
Зв'яжіться з нами для консультації або замовте аудит вашої поточної системи compliance. Отримайте безкоштовний аналіз вразливостей.







