Volver a documentación
Guía25 min

Verificación empresarial (KYB)

Verifica personas morales, identifica beneficiarios finales y valida representantes legales conforme a LFPIORPI.

Qué incluye la verificación KYB

Datos de la empresa

  • • RFC y situación fiscal (SAT)
  • • Acta constitutiva
  • • Registro Público de Comercio
  • • Domicilio fiscal

Estructura corporativa

  • • Accionistas y porcentajes
  • • Beneficiarios finales (UBO)
  • • Representantes legales
  • • Poderes notariales

Listas de control

  • • PEP (Personas Políticamente Expuestas)
  • • Sanciones OFAC
  • • Listas ONU
  • • Listas negras locales

Verificación de personas

  • • KYC de representantes legales
  • • KYC de beneficiarios finales
  • • Validación de poderes
  • • Comparación de firmas

1. Crear verificación empresarial

POST /v1/kyb/verifications
const kybSession = await jaak.kyb.create({
  // Datos básicos de la empresa
  company: {
    rfc: 'ABC123456XYZ',
    legalName: 'Empresa Ejemplo SA de CV',
    tradeName: 'Ejemplo Corp', // Nombre comercial (opcional)
    incorporationDate: '2020-01-15'
  },

  // Qué verificar
  checks: {
    // Validaciones fiscales
    sat: {
      enabled: true,
      validateRfc: true,
      getFiscalStatus: true,
      getConstancia: true
    },

    // Registro Público de Comercio
    rpc: {
      enabled: true,
      validateIncorporation: true
    },

    // Estructura accionaria
    ownership: {
      enabled: true,
      identifyUbo: true, // Beneficiarios finales
      uboThreshold: 25   // Porcentaje mínimo para UBO
    },

    // Listas de control
    watchlists: {
      enabled: true,
      pep: true,
      ofac: true,
      un: true,
      localBlacklists: true
    },

    // KYC de personas relacionadas
    relatedPersons: {
      enabled: true,
      verifyLegalReps: true,      // Representantes legales
      verifyUbos: true,           // Beneficiarios finales
      verificationConfig: {
        documentTypes: ['ine'],
        livenessCheck: true,
        faceMatch: true
      }
    }
  },

  // Documentos a solicitar
  requiredDocuments: [
    'acta_constitutiva',
    'poder_notarial',
    'comprobante_domicilio',
    'constancia_fiscal'
  ],

  metadata: {
    applicationId: 'app_123',
    source: 'onboarding'
  },

  webhookUrl: 'https://tuapp.com/webhooks/kyb'
});

2. Subir documentos

Sube los documentos corporativos para su validación:

// Subir acta constitutiva
await jaak.kyb.uploadDocument(kybSession.id, {
  type: 'acta_constitutiva',
  file: fs.readFileSync('./acta_constitutiva.pdf'),
  mimeType: 'application/pdf'
});

// Subir poder notarial
await jaak.kyb.uploadDocument(kybSession.id, {
  type: 'poder_notarial',
  file: fs.readFileSync('./poder_notarial.pdf'),
  mimeType: 'application/pdf',
  metadata: {
    notaryNumber: '123',
    notaryName: 'Lic. Juan Notario',
    date: '2023-06-15'
  }
});

// Verificar estado de documentos
const docs = await jaak.kyb.getDocuments(kybSession.id);
console.log(docs);

3. Verificar personas relacionadas

Inicia la verificación KYC de representantes legales y beneficiarios finales:

// Agregar representante legal
const legalRep = await jaak.kyb.addPerson(kybSession.id, {
  role: 'legal_representative',
  name: 'Juan Pérez García',
  email: 'juan@empresa.com',
  phone: '+525512345678',
  position: 'Apoderado General',

  // Referencia al poder notarial
  powerOfAttorneyRef: 'poder_notarial_001'
});

// Agregar beneficiario final
const ubo = await jaak.kyb.addPerson(kybSession.id, {
  role: 'ubo', // Ultimate Beneficial Owner
  name: 'María García López',
  email: 'maria@email.com',
  ownershipPercentage: 51,
  isDirectOwner: true
});

// Enviar invitaciones para KYC
await jaak.kyb.sendVerificationInvites(kybSession.id);

// O obtener URLs manualmente
const persons = await jaak.kyb.getPersons(kybSession.id);
persons.forEach(person => {
  console.log(`${person.name}: ${person.verificationUrl}`);
});

4. Consultar resultados

Webhook: kyb.completed
{
  "event": "kyb.completed",
  "data": {
    "sessionId": "kyb_abc123",
    "status": "approved", // approved, rejected, pending_review

    "company": {
      "rfc": "ABC123456XYZ",
      "legalName": "Empresa Ejemplo SA de CV",
      "fiscalStatus": "active",
      "incorporationDate": "2020-01-15",
      "registeredAddress": "Av. Reforma 123, CDMX"
    },

    "satValidation": {
      "status": "valid",
      "regime": "General de Ley Personas Morales",
      "obligations": ["ISR", "IVA"],
      "constanciaUrl": "https://evidence.jaak.ai/sat_xxx.pdf"
    },

    "ownership": {
      "shareholders": [
        { "name": "María García López", "percentage": 51, "isUbo": true },
        { "name": "Pedro Sánchez", "percentage": 30, "isUbo": true },
        { "name": "Inversiones XYZ SA", "percentage": 19, "isUbo": false }
      ],
      "ubosIdentified": 2
    },

    "watchlists": {
      "pep": { "matches": 0 },
      "ofac": { "matches": 0 },
      "un": { "matches": 0 },
      "localBlacklists": { "matches": 0 }
    },

    "persons": [
      {
        "name": "Juan Pérez García",
        "role": "legal_representative",
        "kycStatus": "approved",
        "verificationId": "ver_123"
      },
      {
        "name": "María García López",
        "role": "ubo",
        "kycStatus": "approved",
        "verificationId": "ver_456"
      }
    ],

    "riskScore": 15, // 0-100
    "riskLevel": "low" // low, medium, high
  }
}

Niveles de riesgo

0-30Bajo: Aprobación automática recomendada
31-70Medio: Revisión manual recomendada
71-100Alto: Due diligence reforzado obligatorio