Consultation PLD/AML
Configure automatic inquiries to control lists to meet anti-washing regulations.
Available lists
PEP Mexico
Politically exposed persons in Mexico: public officials, families and close partners.
OFAC NSA
U.S. Treasury Special Designated Nationals list
UN sanctions
Consolidated list of Security Council sanctions.
EU Penalties
Consolidated list of restrictive measures by the European Union.
List 69-B SAT
Contributors issuing invoices for nonexistent operations.
Local lists
Company's own lists or internal blacklists.
1. Individual consultation
Consultation an individual or an undertaking against all monitoring lists:
// Consulta de persona física
const result = await jaak.aml.screen({
type: 'individual',
data: {
name: 'Juan Pérez García',
dateOfBirth: '1985-03-15',
nationality: 'MX',
curp: 'PEGJ850315HDFRRL09', // Opcional
country: 'MX'
},
lists: ['pep_mx', 'ofac', 'un', 'eu', 'sat_69b'],
matchThreshold: 0.85 // Umbral de coincidencia (0-1)
});
console.log(result);
// {
// "screeningId": "scr_abc123",
// "status": "clear", // clear, potential_match, confirmed_match
// "matchCount": 0,
// "matches": [],
// "checkedLists": ["pep_mx", "ofac", "un", "eu", "sat_69b"],
// "timestamp": "2025-01-09T10:30:00Z"
// }// Consulta de empresa
const result = await jaak.aml.screen({
type: 'company',
data: {
legalName: 'Empresa Ejemplo SA de CV',
rfc: 'EEJ201015ABC',
country: 'MX'
},
lists: ['ofac', 'un', 'eu', 'sat_69b']
});2. Coincidences management
When there are potential coincidences, the answer includes details:
{
"screeningId": "scr_xyz789",
"status": "potential_match",
"matchCount": 1,
"matches": [
{
"list": "pep_mx",
"matchScore": 0.92,
"matchedName": "Juan Pérez García",
"listEntry": {
"name": "Juan Pérez García",
"position": "Subsecretario de Hacienda",
"institution": "SHCP",
"startDate": "2020-01-01",
"endDate": null,
"category": "current_pep",
"level": "federal"
},
"matchedFields": ["name", "country"],
"requiresReview": true
}
],
"recommendation": "manual_review"
}Important: The matching with PEP they are not automatically rejected. They require increased due diligence as LFPIORPI.
3. Mass consultations
To check multiple logs at once:
const batchResult = await jaak.aml.screenBatch({
records: [
{
id: 'customer_001',
type: 'individual',
data: { name: 'Juan Pérez', dateOfBirth: '1985-03-15' }
},
{
id: 'customer_002',
type: 'individual',
data: { name: 'María García', dateOfBirth: '1990-07-22' }
},
// ... hasta 1000 registros por batch
],
lists: ['pep_mx', 'ofac', 'un'],
webhookUrl: 'https://tuapp.com/webhooks/aml-batch'
});
// El resultado se envía vía webhook cuando termina
console.log(batchResult.batchId); // batch_abc123
console.log(batchResult.estimatedTime); // "~5 minutes"4. Continuous monitoring
Configure automatic monitoring to get alerts as your customers appear on lists:
// Agregar persona al monitoreo continuo
await jaak.aml.monitor.add({
entityId: 'customer_001', // Tu ID interno
type: 'individual',
data: {
name: 'Juan Pérez García',
dateOfBirth: '1985-03-15',
curp: 'PEGJ850315HDFRRL09'
},
lists: ['pep_mx', 'ofac', 'un', 'eu'],
notifyOn: ['new_match', 'status_change'], // Cuándo notificar
metadata: {
segment: 'premium',
riskLevel: 'medium'
}
});
// Listar entidades monitoreadas
const monitored = await jaak.aml.monitor.list({
limit: 100,
status: 'active'
});
// Remover del monitoreo
await jaak.aml.monitor.remove('customer_001');{
"event": "aml.alert",
"timestamp": "2025-01-15T08:00:00Z",
"data": {
"alertId": "alert_xyz",
"entityId": "customer_001",
"alertType": "new_match",
"list": "pep_mx",
"match": {
"name": "Juan Pérez García",
"position": "Director General de PEMEX",
"effectiveDate": "2025-01-14"
},
"previousStatus": "clear",
"newStatus": "potential_match",
"recommendedAction": "enhanced_due_diligence"
}
}Integration into onboarding flow
async function onboardCustomer(customerData) {
// 1. Verificar en listas AML
const amlResult = await jaak.aml.screen({
type: 'individual',
data: customerData,
lists: ['pep_mx', 'ofac', 'un']
});
if (amlResult.status === 'confirmed_match') {
// Rechazar automáticamente
return { approved: false, reason: 'aml_match' };
}
if (amlResult.status === 'potential_match') {
// Marcar para revisión manual
await createReviewTask(customerData, amlResult);
return { approved: false, reason: 'pending_review' };
}
// 2. Continuar con verificación KYC
const kycResult = await jaak.verification.create({...});
// 3. Agregar a monitoreo continuo
await jaak.aml.monitor.add({
entityId: customerData.id,
type: 'individual',
data: customerData
});
return { approved: true };
}