Pantalla Native Cartera
Objetivo
Section titled “Objetivo”Primer módulo funcional mobile fuera de dashboard, manteniendo la identidad visual web en formato móvil.
Estructura visual
Section titled “Estructura visual”- 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, labels14, metadatos12, searchh-16. - La pantalla de detalle
/cartera/[id]mantiene la misma escala base y contenedorpx-7 pt-6.
Navegación
Section titled “Navegación”- 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 filaGrupo.
Estado de rollout
Section titled “Estado de rollout”- Listado principal
/carteraconsume@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.
Paridad esperada con web
Section titled “Paridad esperada con web”webya usa datos reales paragrupo,cliente/lead,creacionyvendedor.nativetodavía consume el mock shared desdeapps/native/lib/crm-services.ts.- La paridad futura no debe reescribir contratos: mobile debe heredar el mismo shape de
CarteraItemdesde@repo/shared-types.
Cómo llevar esta integración a mobile
Section titled “Cómo llevar esta integración a mobile”- Reemplazar en
apps/native/lib/crm-services.tsel 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
- la asignación es a
- Si se agrega selección múltiple en mobile, la UI debe deduplicar
groupIdsantes de asignar. - Si se agrega gating de acción, usar la misma combinación de permisos:
cartera.seller.assigngroup_assignments.manage
Restricciones de implementación futura
Section titled “Restricciones de implementación futura”- 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.
