Marko Manual de uso · Configuración

Paso a paso

Gestionar una cuenta y cerrar su Acuerdo de Servicio

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.

Qué vas a conseguir

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.

Qué necesitas antes

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}.

Cuánto toma

Dar de alta una cuenta y agendar su primer toque, dos minutos. Llegar hasta el Acuerdo de Servicio, tres más.

Este rol no ve lo mismo que el resto de la empresa Un Staff puro no pertenece a ninguna empresa cliente: al entrar, la barra lateral sólo trae CRM comercial y Configuración — nada de Inicio, Comercial, Operaciones ni Financiero. Si escribes a mano la URL de una pantalla operativa (/invoices, /bank…), StaffScopeGuard te devuelve a /crm sin avisar.

Los pasos

Parte 1 · Entrar al CRM

  1. Inicia sesión con una cuenta que tenga el flag staff (o admin).

    Captura: paso-01-crm-landing
    Qué deberías verAterrizas directo en CRM Comercial —a un Staff puro 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.
    Los nombres de esta captura son inventadosLa bandeja mezcla leads reales del equipo comercial de Marko. Para este manual se sustituyeron nombre de empresa, contacto, correo y monto de cada fila por datos ficticios antes de capturar; la forma de la pantalla es real, el contenido no. El detalle de los cinco contadores y cómo se prioriza la lista está en el manual de la bandeja del día.

Parte 2 · Alta manual de una cuenta

  1. Pulsa + Nueva cuenta, arriba a la derecha.

    Captura: paso-02-nueva-cuenta-vacia
    Qué deberías verLa ventana Nueva cuenta, con Razón social (obligatoria), RUT (opcional), Contacto, Origen, Correo y Teléfono.
    Para qué es esta pantallaSirve para los inbound y referidos que no vienen del pipeline automático de Compra Ágil: alguien que escribió por WhatsApp, un contacto de un evento. Si el prospecto viene de ese pipeline, ya tiene ficha y no hace falta crearla a mano.
  2. 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.

    Captura: paso-03-nueva-cuenta-llena
    Qué deberías verEl aviso bajo el RUT: «Opcional. Si el prospecto todavía no lo dio, déjalo vacío: la cuenta se crea con un identificador provisional y queda marcada para completar el RUT después.» Origen ofrece referido, inbound, manual, evento y linkedin.
    El RUT malo cruza mal para siempreSi lo escribes, se usa para cruzar contra BigQuery y contra las empresas ya registradas. Un RUT mal tecleado no se detecta aquí: mejor dejarlo vacío que arriesgarse a escribirlo mal.
  3. Pulsa Crear cuenta.

    Captura: paso-04-cuenta-creada-en-lista
    Qué deberías verUn aviso de éxito y la ficha de la cuenta nueva se abre sola. Búscala por su nombre y la verás con el badge RUT pendiente si la dejaste sin RUT, y un identificador provisional del tipo sinrut-<empresa>.
    Si la cuenta ya existía, no se duplicaEl alta comprueba antes de crear: si ya hay una cuenta con ese RUT o esa razón social, la ventana avisa «Esa cuenta ya existía; se abre su ficha» y te lleva directo a la que ya estaba, en vez de crear una segunda.

Parte 3 · La ficha de la cuenta

  1. Pulsa cualquier fila de la lista para abrir su ficha.

    Captura: paso-05-ficha-inicial
    Qué deberías verCuatro bloques a la izquierda —Contacto, Actividad en ChileCompra (12 meses) y Cuenta en Marko— y a la derecha Registrar toque y Próxima acción. En una cuenta recién creada, ChileCompra dice «Sin datos de compras al Estado» y Marko, «Todavía no se ha registrado en Marko».
    Por qué se pide por función y no por SDKLa ficha llama a 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.
  2. En Registrar toque, elige el Tipo, el Resultado y escribe qué pasó.

    Captura: paso-06-registrar-toque-lleno
    Qué deberías verTipo ofrece Llamada, WhatsApp, Correo enviado, Respuesta recibida, Reunión agendada, Reunión hecha y Nota. Resultado —Sin respuesta, Conversado, Agendado, Rechazo— sólo aparece si el tipo no es Nota: una nota al margen no tiene resultado. Mover a estado es opcional.
    El «qué pasó» es lo que de verdad quedaEs el único campo de texto libre del toque: lo que escribas ahí es lo que se lee después en el historial, junto al resultado elegido.
  3. Pulsa Registrar toque.

    Captura: paso-07-toque-registrado
    Qué deberías verEl badge de estado, junto al nombre, cambia al que elegiste —aquí, de sin contactar a contactado—. El formulario se vacía, listo para el próximo toque, y en el Historial de toques aparecen dos filas nuevas: el toque en sí y, si moviste el estado, un evento Cambio de estado aparte.
    Si la cuenta no tenía ficha en 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.
  4. En Próxima acción, elige fecha y tipo —o usa mañana / en una semana—.

    Captura: paso-08-proxima-accion-lista
    Qué deberías verEl panel amarillo de sin próxima acción agendada mientras esté vacío. Tipo ofrece followup, discovery, demo, cierre, cobranza y otro. Debajo, el Historial de toques con lo que ya registraste.
    Por esto existe este panelDe 414 leads medidos al construir el CRM, uno solo tenía la próxima acción agendada. La bandeja del día se construye entera sobre esta fecha: sin ella, una cuenta viva no aparece como cayéndose aunque lleve semanas sin que nadie la toque.
  5. Pulsa Agendar.

    Captura: paso-09-accion-agendada
    Qué deberías verEl panel deja de estar en amarillo y el texto cambia a «acción en N días» (o «acción para hoy», «vencida hace N días» según la fecha). El historial suma un evento Agenda con el tipo y la fecha comprometida.
  6. Cierra la ficha y búscala de nuevo en la lista.

    Captura: paso-10-lista-actualizada
    Qué deberías verLa fila con el estado y la próxima acción ya al día, sin recargar la página: la ficha escribe sobre la misma cuenta que está en la lista, así que el cambio se ve de inmediato.

Parte 4 · Cerrar el ciclo: plan y Acuerdo de Servicio

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.

  1. Abre Configuración en el menú lateral.

    Captura: paso-11-empresas-tab
    Qué deberías verUna sola pestaña, Empresas, con un candado junto al nombre. Las otras catorce pestañas del hub —Mi Empresa, Cuentas, Integraciones…— no se te muestran: configuran una empresa activa que un Staff no tiene.
    Por URL directa te vuelve a dejar entrarAbrir /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.
  2. Busca la empresa y abre el menú de tres puntos de su fila.

    Captura: paso-12-dropdown-empresa
    Qué deberías verSólo dos acciones: Configurar Plan y Acuerdo de Servicio. Al administrador de plataforma el mismo menú le trae siete: Editar, Configurar compras ágiles, Cargar créditos, Migrar a BigQuery, Configurar indicadores operativos y las dos que ve el Staff.
  3. Pulsa Configurar Plan.

    Captura: paso-13-configurar-plan
    Qué deberías verUn formulario con Plan, Estado del Pago, Precio Licencia (UF), Inicio Prueba Gratis y Fin del Trial. Elige un plan y pulsa Guardar Cambios.
    🔴 Verificado el 2026-09-02: en QA esto fallaCon la cuenta Staff, guardar responde con el toast crudo 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.
  4. Cierra esa ventana y abre Acuerdo de Servicio en el mismo menú.

    Captura: paso-14-acuerdo-vacio
    Qué deberías verEl nombre de la empresa bajo el título y, si todavía no tiene ninguno, «Esta empresa todavía no tiene acuerdos generados» con el botón Generar acuerdo. Si ya tuviera acuerdos, aquí saldría la tabla con su estado, plan, versión y fecha.
  5. Pulsa Generar acuerdo.

    Captura: paso-15-form-acuerdo-vacio
    Qué deberías verEl formulario: Id del plan, Nombre del plan, Modalidad (Mensual/Anual), Tarifa en UF, Implementación en UF, Vigencia del enlace (días) —15 por defecto— y Servicios adicionales, con un botón para agregarlos de a uno.
    Los montos van sin IVAEl propio formulario lo recuerda: «Los valores van en UF y sin IVA, según la cláusula TERCERO del contrato: se facturan al valor de la UF del día de emisión.»
  6. Completa los términos y las Observaciones —van al Anexo A del contrato—.

    Captura: paso-16-form-acuerdo-lleno
    Qué deberías verEl formulario relleno, listo para el botón Generar y obtener enlace. El firmante no se elige aquí: por debajo, la función toma el nombre, correo y teléfono del contacto que ya tiene guardada la empresa —el mismo que se ve en Configuración → Empresas—, no algo que se escriba en esta ventana.
  7. Pulsa Generar y obtener enlace.

    Captura: paso-17-acuerdo-error-qa
    Qué deberías ver, en un ambiente donde esto funcionaUn aviso «Acuerdo generado. Copia el enlace y envíaselo al cliente.» y un panel Enlace de firma con el texto «Cópialo ahora y envíaselo al cliente por WhatsApp. No se guarda en claro: si lo pierdes, tendrás que generar un enlace nuevo.» junto a un campo de sólo lectura con la URL y un botón Copiar. Marko no manda ese enlace por ti: ni por correo ni por WhatsApp — lo copias y lo envías tú.
    🔴 Verificado el 2026-09-02: en QA esto también falla, y con un mensaje que puede confundirCon la cuenta Staff, el intento responde «No se pudo generar el acuerdo · No perteneces a esta empresa» — un mensaje que suena a que hay que estar adentro de la empresa, y un Staff nunca lo está por diseño. La función 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.

Lo que todavía no hace

Para consultar después

DatoRegla
Quién ve el CRMCuentas 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 cuentalead (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 escribirSólo stage, stageUpdatedAt, nextActionAt, nextActionType, ownerEmail, notes, tags, doNotContact y doNotContactReason del lead.
Toda escritura pasa por Cloud FunctioncrmCreateAccount, crmRegisterTouch, crmScheduleNextAction. Ninguna pantalla escribe leads con el SDK, y cada llamada deja un registro en staffAccessLog.
Cerrar el ciclo, dos accionesConfigurar 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 empresaFacturas, 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 ServicioEl 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 firma15 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 empresaNo se puede generar uno nuevo mientras haya otro pendiente vigente: hay que anularlo primero.

Cuando algo no sale

Lo que vesQué 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 PlanLa función crmUpdateCompanyPlan no está desplegada en QA. El plan no cambió.