Skip to content

Pantalla Native Cartera

Primer módulo funcional mobile fuera de dashboard, manteniendo la identidad visual web en formato móvil.

  • Topbar compartido (menu + logo + logout).
  • Search principal.
  • Título Cartera + acción de filtro.
  • Tabs segmentados: Todos, Leads, Clientes.
  • Lista de tarjetas cliente/lead con acciones rápidas.
  • Bottom-nav compartido.
  • Escala base aplicada: título módulo 19, labels 14, metadatos 12, search h-16.
  • La pantalla de detalle /cartera/[id] mantiene la misma escala base y contenedor px-7 pt-6.
  • Entrada desde drawer lateral (Cartera).
  • Entrada desde bottom-nav (ícono de cartera).
  • Usa la misma validación de sesión de dashboard.
  • El detalle de cliente se abre en /cartera/[id] desde la fila Grupo.
  • Listado principal /cartera consume @repo/crm-services (mock-first compartido).
  • Detalle /cartera/[id] conserva estructura legacy y requiere migración completa al mismo patrón.
  • Se normalizó tipografía de /cartera/[id] para mantener consistencia con dashboard/forms/cards.
  • web ya usa datos reales para grupo, cliente/lead, creacion y vendedor.
  • native todavía consume el mock shared desde apps/native/lib/crm-services.ts.
  • La paridad futura no debe reescribir contratos: mobile debe heredar el mismo shape de CarteraItem desde @repo/shared-types.
  • Reemplazar en apps/native/lib/crm-services.ts el adapter mock por una factory HTTP autenticada cuando la sesión mobile ya exponga el token correcto.
  • Reusar directamente:
    • services.cartera.getCarteraItems()
    • services.cartera.getSellerOptions()
    • services.cartera.assignSellerToGroups()
  • Mantener la misma regla de negocio que web:
    • la asignación es a group
    • no a lead
    • la propagación la resuelve backend
  • Si se agrega selección múltiple en mobile, la UI debe deduplicar groupIds antes de asignar.
  • Si se agrega gating de acción, usar la misma combinación de permisos:
    • cartera.seller.assign
    • group_assignments.manage
  • No convertir la pantalla mobile en una fuente paralela de lógica de acceso.
  • No asumir 1 group = 1 lead; eso solo puede aparecer en seeds, no en la lógica del cliente.
  • Si alguna columna sigue mockeada en web (contacto, ultimaCompra, frecuencia, agenda, interaccion), mobile debe tratarlas igual hasta que exista contrato real compartido.