Paso a paso
El CRM Comercial es la herramienta interna del equipo de Marko, no algo que un proveedor cliente vea. Este manual recorre la ficha de una cuenta —registrar un contacto, agendar el siguiente toque— desde darla de alta a mano cuando no viene del pipeline automático, hasta el otro extremo del embudo: configurar el plan de un cliente y generar su Acuerdo de Servicio. La bandeja del día con sus cinco contadores tiene su propio manual (Trabajar la bandeja del día del CRM); aquí sólo se cruza por ella de paso.
Saber dar de alta un inbound a mano, dejar registro de un contacto y su próxima acción, y llegar hasta configurar el plan y el Acuerdo de Servicio de un cliente.
Una cuenta de Marko con el flag staff: true (o admin: true). No se asigna desde ninguna pantalla: se escribe a mano en accounts/{uid}.
Dar de alta una cuenta y agendar su primer toque, dos minutos. Llegar hasta el Acuerdo de Servicio, tres más.
/invoices,
/bank…), StaffScopeGuard te devuelve a /crm sin avisar.Inicia sesión con una cuenta que tenga el flag staff (o admin).
OnboardingGuard no lo manda a /onboarding ni a
/dashboard, porque nunca tiene roles—. Arriba, cinco contadores
(Vencidas, Hoy, Trials ≤10d, Sin agenda, Mi cartera) y debajo la
lista mezclando leads del pipeline con empresas que ya son clientes, cada fila con su
badge de origen.Pulsa + Nueva cuenta, arriba a la derecha.
Completa Razón social y el resto de los campos que tengas. Deja el RUT vacío si el prospecto todavía no lo dio.
referido,
inbound, manual, evento y linkedin.Pulsa Crear cuenta.
sinrut-<empresa>.Pulsa cualquier fila de la lista para abrir su ficha.
crmGetAccount en vez de leer Firestore directo: así el acceso a los datos de
esa empresa queda registrado en staffAccessLog, la auditoría del rol.En Registrar toque, elige el Tipo, el Resultado y escribe qué pasó.
Pulsa Registrar toque.
leads, se crea
solaUna empresa que llega por ChileCompra o por trial puede no tener ficha de lead todavía.
El primer toque la crea de camino: ensureLead arma la ficha antes de escribir el
evento, para que la subcolección de historial nunca quede colgando de un documento que no
existe.En Próxima acción, elige fecha y tipo —o usa mañana / en una semana—.
followup, discovery,
demo, cierre, cobranza y otro. Debajo, el
Historial de toques con lo que ya registraste.Pulsa Agendar.
Cierra la ficha y búscala de nuevo en la lista.
Esto no se hace desde la ficha del CRM. Cambiar el plan de un cliente y generar su Acuerdo de Servicio vive en Configuración → Empresas, la misma pestaña que usa el administrador de plataforma — a un Staff se le recorta a sólo dos acciones por fila.
Abre Configuración en el menú lateral.
/company-settings a mano, con la sesión recién cargada, rebota primero al login y de
ahí de vuelta a /crm — el guard todavía no restauró la sesión de Firebase Auth.
Entra siempre por el enlace de Configuración del menú, no escribiendo la URL: la
navegación dentro de la app sí funciona a la primera.Busca la empresa y abre el menú de tres puntos de su fila.
Pulsa Configurar Plan.
internal y el plan no cambia. No es
un error tuyo: la función crmUpdateCompanyPlan —la que debería escribir el plan por un
camino acotado para Staff— no está desplegada en marko-devenv (comprobado con
firebase functions:list --project marko-devenv: no aparece en la lista). Para un
Administrador de plataforma, que guarda directo con el SDK, esta pantalla sí funciona. Este manual
no llegó a ver un guardado exitoso como Staff en QA.Cierra esa ventana y abre Acuerdo de Servicio en el mismo menú.
Pulsa Generar acuerdo.
Completa los términos y las Observaciones —van al Anexo A del contrato—.
Pulsa Generar y obtener enlace.
createServiceAgreement sí está desplegada en marko-devenv, pero la
versión que corre ahí todavía no reconoce el flag staff del acceso transversal de
MRKO-327 — el mismo desfase que Configurar Plan. No se generó ningún acuerdo, ni se
disparó ningún correo: la función revienta antes de escribir nada.stage, próxima acción, dueño, notas, etiquetas) y, en
Configuración → Empresas, el plan y el Acuerdo de Servicio.marko-devenv): las funciones detrás no tienen desplegado el alcance de
MRKO-327. No se pudo verificar si convemarco (producción) tiene el mismo problema.| Dato | Regla |
|---|---|
| Quién ve el CRM | Cuentas con staff: true o admin: true. Nadie más: la ruta lleva AuthenticatedGuard + StaffGuard, y el menú marca la entrada con roles: ["staff"]. |
| Dónde está | /crm, fuera del grupo «Comercial» del menú — es transversal a todas las empresas, no de la empresa activa. |
| Origen de una cuenta | lead (pipeline), trial, cliente o suspendido (estas tres, empresas ya registradas). Si está en las dos fuentes, manda el estado más avanzado del funnel. |
| Campos que el CRM puede escribir | Sólo stage, stageUpdatedAt, nextActionAt, nextActionType, ownerEmail, notes, tags, doNotContact y doNotContactReason del lead. |
| Toda escritura pasa por Cloud Function | crmCreateAccount, crmRegisterTouch, crmScheduleNextAction. Ninguna pantalla escribe leads con el SDK, y cada llamada deja un registro en staffAccessLog. |
| Cerrar el ciclo, dos acciones | Configurar Plan (plan, estado de pago, precio, fechas de trial) y Acuerdo de Servicio (generar, ver estado, descargar contrato firmado, rotar enlace, anular). Las dos viven en Configuración → Empresas, no en el CRM. |
| Qué no ve un Staff de esa empresa | Facturas, guías, banco, gastos, inventario, OC ni las credenciales de integración (maimagToken, mercadoApiKey, Fintoc, SII) — el recorte de campos lo hace una whitelist en el backend, no la pantalla. |
| Firmante del Acuerdo de Servicio | El nombre, correo y teléfono del contact guardado en la empresa. Se puede indicar otro desde el backend, pero esta pantalla no ofrece esa opción. |
| Vigencia del enlace de firma | 15 días por defecto, configurable entre 1 y 90. Pasado ese plazo, el backend rechaza la firma aunque el enlace siga abriendo. |
| Un acuerdo pendiente por empresa | No se puede generar uno nuevo mientras haya otro pendiente vigente: hay que anularlo primero. |
| Lo que ves | Qué pasa |
|---|---|
| «La razón social es obligatoria» | Es el único campo requerido del alta manual. Complétalo y vuelve a pulsar Crear cuenta. |
| «Esa cuenta ya existía; se abre su ficha» | No se creó una cuenta nueva: ya había una con ese RUT o esa razón social, y se abrió la que ya existe. |
| «Elige una fecha para la próxima acción» | Pulsaste Agendar sin fecha. El tipo trae un valor por defecto (followup), la fecha no. |
| «No se pudo cargar el historial de la cuenta» | Falló crmGetAccount. Vuelve a abrir la ficha; si persiste, revisa la conexión. |
| «Esta empresa tiene un acuerdo pendiente de firma. Anúlalo antes de generar otro.» | Ya hay un acuerdo pendiente vigente para esa empresa. El botón Generar acuerdo queda apagado hasta anularlo. |
| «No se pudo generar el acuerdo · No perteneces a esta empresa» | En QA (marko-devenv), verificado el 2026-09-02: pasa siempre con la cuenta Staff, por el desfase de despliegue descrito en el paso 17. No es un problema de la cuenta ni del formulario. |
| Toast «internal» al Guardar Cambios de Configurar Plan | La función crmUpdateCompanyPlan no está desplegada en QA. El plan no cambió. |