Volver a documentación
Guía15 min

Consultas PLD/AML

Configura consultas automáticas a listas de control para cumplir con regulación antilavado.

Listas disponibles

PEP México

Personas Políticamente Expuestas en México: funcionarios públicos, familiares y asociados cercanos.

OFAC SDN

Lista de Nacionales Especialmente Designados del Departamento del Tesoro de EE.UU.

Sanciones ONU

Lista consolidada de sanciones del Consejo de Seguridad de Naciones Unidas.

UE Sanciones

Lista consolidada de medidas restrictivas de la Unión Europea.

Lista 69-B SAT

Contribuyentes que emiten facturas por operaciones inexistentes.

Listas locales

Listas propias de la empresa o listas negras internas.

1. Consulta individual

Consulta una persona o empresa contra todas las listas de control:

POST /v1/aml/screen
// 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 persona moral
// 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. Manejo de coincidencias

Cuando hay coincidencias potenciales, la respuesta incluye detalles:

{
  "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"
}

Importante: Las coincidencias con PEP no son automáticamente rechazos. Requieren due diligence reforzado según LFPIORPI.

3. Consultas masivas

Para verificar múltiples registros de una vez:

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. Monitoreo continuo

Configura monitoreo automático para recibir alertas cuando tus clientes aparezcan en listas:

// 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');
Webhook: aml.alert
{
  "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"
  }
}

Integración en flujo de onboarding

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 };
}