Sistema de Onboarding

El sistema de onboarding de Cannahub gestiona el proceso completo de registro y activación de nuevos miembros, desde la verificación inicial hasta la aprobación final. Este proceso asegura el cumplimiento regulatorio y la validación de documentación médica.

Flujo General del Onboarding

El proceso de onboarding se divide en dos fases principales: registro inicial (completado por el miembro) y activación de cuenta (gestionado por el club).

Loading diagram...

Estados del Onboarding

El sistema gestiona múltiples estados para rastrear el progreso de cada miembro:

Estados de Progreso

  • Name
    PhoneVerification
    Type
    inicial
    Description

    Esperando verificación de teléfono por SMS.

  • Name
    HasReprocann
    Type
    en progreso
    Description

    Selección si el usuario tiene REPROCANN.

  • Name
    ReprocannProcess
    Type
    en progreso
    Description

    Proceso de obtención de REPROCANN (sin REPROCANN).

  • Name
    PersonalInformation
    Type
    en progreso
    Description

    Datos personales incompletos.

  • Name
    Schedule
    Type
    en progreso
    Description

    Programar consulta médica.

  • Name
    Payment
    Type
    en progreso
    Description

    Pago de consulta pendiente.

  • Name
    RegisterPendingApproval
    Type
    esperando
    Description

    Solicitud enviada, pendiente de revisión del admin.

  • Name
    ReprocannSyncCode
    Type
    en progreso
    Description

    Sincronización de código REPROCANN.

  • Name
    MedicalConsultation
    Type
    en progreso
    Description

    Consulta médica en proceso.

  • Name
    DocumentSigning
    Type
    en progreso
    Description

    Documentos pendientes de firma.

  • Name
    Contract
    Type
    en progreso
    Description

    Firma de contrato.

  • Name
    MembershipSelection
    Type
    en progreso
    Description

    Selección de membresía.

  • Name
    Done
    Type
    activo
    Description

    Cuenta completamente activa.

Estados de Onboarding

{
  "PhoneVerification": "Verificación de teléfono",
  "HasReprocann": "Selección REPROCANN",
  "ReprocannProcess": "Proceso REPROCANN",
  "PersonalInformation": "Información personal",
  "Schedule": "Programar consulta",
  "Payment": "Pago pendiente",
  "RegisterPendingApproval": "Pendiente aprobación",
  "ReprocannSyncCode": "Sincronización REPROCANN",
  "MedicalConsultation": "Consulta médica",
  "DocumentSigning": "Firma de documentos",
  "ReprocannPending": "REPROCANN pendiente",
  "Contract": "Contrato",
  "MembershipSelection": "Selección membresía",
  "Done": "Cuenta activa"
}

Endpoints de Onboarding

Verificación de Teléfono - Enviar SMS

Envía un código SMS al número proporcionado para verificación.

Request

  • Name
    phone
    Type
    string
    Description

    Número de teléfono sin código de país. Ejemplo: 1155551234

  • Name
    countryCode
    Type
    string
    Description

    Código de país. Ejemplo: +54

Response

  • Name
    success
    Type
    boolean
    Description

    Indica si el SMS fue enviado exitosamente.

  • Name
    nextStep
    Type
    string
    Description

    Siguiente paso del onboarding.

Enviar SMS

POST
/api/onboarding/phone/send
curl -X POST https://api.cannahub.tech/api/onboarding/phone/send \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "1155551234",
    "countryCode": "+54"
  }'

Response

{
  "success": true,
  "nextStep": "PhoneVerification"
}

Verificar Código SMS

Verifica el código de 6 dígitos enviado por SMS.

Request

  • Name
    phone
    Type
    string
    Description

    Número de teléfono verificado.

  • Name
    code
    Type
    string
    Description

    Código de 6 dígitos recibido por SMS.

Verificar Código

POST
/api/onboarding/phone/verify
curl -X POST https://api.cannahub.tech/api/onboarding/phone/verify \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "1155551234",
    "code": "123456"
  }'

Response Exitosa

{
  "success": true,
  "nextStep": "HasReprocann",
  "user": {
    "id": "cust_123",
    "phoneNumber": "1155551234",
    "phoneCountry": "+54"
  }
}

Establecer Estado REPROCANN

Indica si el usuario ya tiene REPROCANN o necesita obtenerlo.

Request

  • Name
    hasReprocann
    Type
    boolean
    Description

    true si el usuario ya tiene REPROCANN, false si necesita obtenerlo.

Response

  • Name
    success
    Type
    boolean
    Description

    Indica si se actualizó exitosamente.

  • Name
    nextStep
    Type
    string
    Description

    PersonalInformation si tiene REPROCANN, ReprocannProcess si no.

Set HasReprocann

POST
/api/onboarding/has-reprocann
curl -X POST https://api.cannahub.tech/api/onboarding/has-reprocann \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{
    "hasReprocann": true
  }'

Response

{
  "success": true,
  "nextStep": "PersonalInformation",
  "user": {
    "id": "cust_123",
    "hasReprocann": true
  }
}

Guardar Información Personal

Guarda los datos personales del nuevo miembro.

Request

  • Name
    firstName
    Type
    string
    Description

    Nombre del miembro.

  • Name
    lastName
    Type
    string
    Description

    Apellido del miembro.

  • Name
    document
    Type
    string
    Description

    Documento Nacional de Identidad (DNI).

  • Name
    bornDate
    Type
    string
    Description

    Fecha de nacimiento (YYYY-MM-DD).

Guardar Datos

POST
/api/onboarding/personal-info
curl -X POST https://api.cannahub.tech/api/onboarding/personal-info \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{
    "firstName": "Juan",
    "lastName": "Pérez",
    "document": "30123456",
    "bornDate": "1990-05-15"
  }'

Response

{
  "success": true,
  "nextStep": "Schedule",
  "user": {
    "id": "cust_123",
    "firstName": "Juan",
    "lastName": "Pérez",
    "bornDate": "1990-05-15",
    "document": "30123456"
  }
}

Vincular REPROCANN

Vincula el código REPROCANN del miembro con el club.

Request

  • Name
    code
    Type
    string
    Description

    Código de vinculación de REPROCANN (8-12 caracteres alfanuméricos).

  • Name
    expirationDate
    Type
    string
    Description

    Fecha de expiración del REPROCANN (YYYY-MM-DD).

Validaciones

  • El código debe tener entre 8 y 12 caracteres alfanuméricos
  • Debe estar vigente en el sistema REPROCANN
  • No debe estar vinculado a otro club

Vincular REPROCANN

POST
/api/onboarding/reprocann/link
curl -X POST https://api.cannahub.tech/api/onboarding/reprocann/link \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{
    "code": "ABC12345",
    "expirationDate": "2025-01-15"
  }'

Response Exitosa

{
  "success": true,
  "nextStep": "PersonalInformation",
  "user": {
    "id": "cust_123",
    "hasReprocann": true,
    "medicalRecord": {
      "reprocannCode": "ABC12345",
      "reprocannExpiration": "2025-01-15"
    }
  }
}

Actualizar Paso del Onboarding

Actualiza el paso actual del onboarding para el usuario.

Request

  • Name
    step
    Type
    OnboardingStep
    Description

    Nuevo paso del onboarding.

  • Name
    metadata
    Type
    object
    Description

    Metadata adicional para guardar con el paso.

Actualizar Paso

POST
/api/onboarding/step
curl -X POST https://api.cannahub.tech/api/onboarding/step \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{
    "step": "MembershipSelection"
  }'

Response

{
  "success": true,
  "nextStep": "MembershipSelection",
  "user": {
    "id": "cust_123",
    "onboardingStep": "MembershipSelection"
  }
}

Obtener Estado del Onboarding

Obtiene el estado actual del proceso de onboarding del usuario.

Response

  • Name
    currentStep
    Type
    string
    Description

    Paso actual del onboarding.

  • Name
    completedSteps
    Type
    array
    Description

    Lista de pasos completados.

  • Name
    user
    Type
    object
    Description

    Datos del usuario.

Estado del Onboarding

GET
/api/onboarding/status
curl -G https://api.cannahub.tech/api/onboarding/status \
  -H "Authorization: Bearer {token}"

Response

{
  "currentStep": "PersonalInformation",
  "completedSteps": [
    "PhoneVerification",
    "HasReprocann"
  ],
  "user": {
    "id": "cust_123",
    "firstName": "Juan",
    "phoneNumber": "1155551234",
    "hasReprocann": true
  }
}

Arquitectura del Dominio

El onboarding sigue el patrón de arquitectura de dominios:

src/
├── app/api/onboarding/           # BFF Routes
│   ├── status/route.ts
│   ├── phone/send/route.ts
│   ├── phone/verify/route.ts
│   ├── personal-info/route.ts
│   ├── reprocann/link/route.ts
│   ├── has-reprocann/route.ts
│   └── step/route.ts
├── api/medusa/SSR/onboarding.ts  # SSR Functions
├── types/custom/onboarding.ts    # Types
└── features/User/Onboarding/
    ├── services/
    │   └── onboarding.client.ts  # Client Service
    ├── hooks/
    │   ├── keys.ts               # Query Keys
    │   ├── queries.ts            # React Query Queries
    │   ├── mutations.ts          # React Query Mutations
    │   └── index.ts
    └── store/
        └── onboarding.store.ts   # Zustand Store

Errores Comunes

  • Name
    INVALID_PHONE
    Type
    400
    Description

    Formato de teléfono inválido.

  • Name
    CODE_EXPIRED
    Type
    400
    Description

    El código de verificación expiró. Solicite uno nuevo.

  • Name
    CODE_INVALID
    Type
    400
    Description

    Código de verificación incorrecto.

  • Name
    REPROCANN_INVALID
    Type
    400
    Description

    Código REPROCANN no válido (debe tener 8-12 caracteres alfanuméricos).

  • Name
    STEP_INVALID
    Type
    400
    Description

    Paso de onboarding no válido.


Próximos Pasos

Was this page helpful?