Marko Manual de uso · Comercial

Paso a paso

Definir una meta de ventas y seguir su cumplimiento

Metas de Ejecutivos es la pantalla donde un Manager escribe, mes a mes, cuánto espera que venda cada Ejecutivo. Es sencilla: un monto por persona, un botón para guardar. Pero antes de que la uses con tu equipo, este manual tiene que decirte dos cosas que la documentación de Marko no dice: hoy no se puede guardar, y aunque se pudiera, ninguna otra pantalla de Marko muestra después si esa meta se cumplió.

Qué vas a conseguir

Escribir un monto de venta mensual para cada Ejecutivo de tu empresa, uno por uno o con asignación masiva. Guardarlo es otra historia — sigue leyendo.

Para quién

La pantalla está pensada para Manager. No tiene entrada en el menú ni exige ningún rol para abrirla: cualquier cuenta autenticada puede entrar escribiendo la URL.

Qué necesitas antes

Al menos un Ejecutivo activo en tu empresa con el rol exacto Ejecutivo — el Ejecutivo Avanzado no cuenta, ver el paso 2.

Cuánto toma

Un minuto para escribir los montos. El guardado, verificado en este manual, no termina de funcionar.

Antes de seguir: el botón Actualizar no guarda nada Lo comprobamos en vivo, varias veces: se escriben los montos, se pulsa Actualizar, la pantalla muestra un aviso — a veces de éxito, casi siempre de error — pero al recargar la página todos los montos vuelven a $0. La causa está en el código, no es un problema de esta demostración: lo explicamos con el detalle técnico en el paso 7 y en Cuando algo no sale. Si necesitas fijar metas de verdad hoy, repórtalo a soporte antes de darlas por escritas.

Los pasos

  1. Entra directamente a la URL /sales-goals — no hay ningún enlace de menú que te lleve ahí.

    Menú Comercial desplegado con nueve entradas, ninguna llamada Metas, sesión de un Manager
    Qué deberías verCon tu cuenta de Manager abre el grupo Comercial del menú lateral: verás nueve entradas — Mis Clientes, Cotizaciones, Cotizar Compra Ágil, Cotizar Convenio Marco, Post Venta, Oportunidades Compra Ágil, Análisis Mercado, Gestionar Catálogo CM y Contactos de Adquisiciones — y ninguna se llama «Metas». No es que te falte permiso: la pantalla existe y funciona, pero nadie la enlazó desde ningún menú de la aplicación (comprobado en nav.service.ts, revisado entero). La única forma de llegar es escribir /sales-goals en la barra de direcciones, a mano o desde un marcador que guardes tú mismo.
    Tampoco pide un rol concreto La ruta /sales-goals sólo exige estar autenticado (app-routing.module.ts: [AuthenticatedGuard, OnboardingGuard], sin nada de rol). En la práctica, cualquier cuenta de tu empresa —un Ejecutivo, alguien de bodega— puede entrar por la URL y ver los nombres, correos y cargos de todo el equipo comercial, aunque no pueda guardar cambios (ver el paso 7). Trátala como una pantalla de Manager aunque el sistema no la proteja como tal.
  2. Ya dentro, revisa la lista: son los Ejecutivos de tu empresa, con su correo y su cargo.

    Metas de ejecutivos con la tabla de Ejecutivos en cero, mes 2026-09 seleccionado
    Qué deberías verUn selector Mes con el mes en curso ya elegido, un campo Monto con un botón Asignar al lado, y debajo una tabla con columnas Nombre, Correo, Cargo y un campo numérico por fila, todos en 0 si nunca se guardó nada para este mes.
    Al Ejecutivo Avanzado no lo vas a encontrar aquí La consulta que arma esta tabla (sales-goals.component.ts, método load()) filtra cuentas cuyo rol sea exactamente EXECUTIVE (roles.<tu_empresa> array-contains 'EXECUTIVE'). Un Ejecutivo Avanzado tiene el rol EXECUTIVE_ADVANCED — un valor distinto, nunca los dos a la vez — así que nunca aparece en esta lista, aunque venda y aunque tenga cotizaciones y OC ganadas como cualquier otro ejecutivo. Si tu equipo tiene ejecutivos avanzados, hoy no hay forma de definirles una meta desde esta pantalla.
  3. Escribe un monto en el campo numérico de un Ejecutivo, a la derecha de su fila.

    Fila del primer ejecutivo con un monto de ejemplo escrito, el resto en cero
    Qué deberías verEl número que escribas queda en ese campo, sin validar nada: acepta cualquier valor mientras sea numérico, incluye decimales y no hay tope. Los montos de esta captura son un ejemplo para el manual — ningún dato de venta real.
  4. Para poner el mismo monto a todo el equipo de una vez, escríbelo en el campo Monto de la cabecera, junto al botón Asignar.

    Campo Monto de la cabecera con un valor de ejemplo, antes de pulsar Asignar
    Qué deberías verNada cambia todavía en la tabla: el campo Monto sólo guarda el valor en memoria hasta que pulses Asignar.
  5. Pulsa Asignar y mira la tabla: las cinco filas quedan con el mismo monto.

    Todas las filas de la tabla con el mismo monto tras pulsar Asignar
    Qué deberías verAsignar sobrescribe todas las filas con el número que escribiste, sin pedir confirmación — si ya habías escrito montos distintos a mano en el paso 3, se pierden.
    No hay «meta compuesta», ni trimestral, ni por equipo Pese a lo que promete docs/01-ventas/09-metas-ventas.md, lo único que existe hoy es esto: un monto de venta en pesos, por Ejecutivo, por mes calendario. No hay metas de cotizaciones, OC ganadas, clientes nuevos ni ticket promedio; no hay metas de equipo, trimestrales ni anuales; no hay pesos relativos ni «meta compuesta». Todo eso es descripción conceptual del documento, no código.
  6. Si un Ejecutivo necesita algo distinto del resto, edita su fila a mano después de la asignación masiva.

    Todas las filas con el mismo monto salvo la primera, editada a un valor distinto
    Qué deberías verPuedes seguir editando cualquier fila para dejarla distinta: el campo Monto de la cabecera no vuelve a tocarlas a menos que pulses Asignar otra vez.
  7. Pulsa Actualizar para guardar.

    Aviso rojo No se pudieron actualizar las metas, tras pulsar Actualizar
    Detalle del aviso rojo No se pudieron actualizar las metas
    Qué deberías ver, en teoríaEl botón se apaga un momento y, si todo va bien, un aviso verde «Metas actualizadas» (sales-goals.component.ts:108).
    Lo que vimos de verdad, repetidas veces El botón queda apagado 2 a 3 segundos —guarda cada ejecutivo uno por uno, en una vuelta await secuencial— y luego aparece el aviso rojo «No se pudieron actualizar las metas.» (sales-goals.component.ts:106). Recargamos la página después de cada intento — cambio masivo, cambio individual, con y sin ajuste — y siempre volvieron los ejecutivos a $0: nada quedó escrito en la base.
    La causa: la regla de Firestore, no un error de red update() escribe directo contra accounts/<id_del_ejecutivo> (sales-goals.component.ts:100, db.collection('accounts').doc(e.id).update(...)), sin pasar por ninguna Cloud Function. Y firestore.rules:67 dice allow write: if isOwner(userId) || isAdmin(); — sólo el dueño de la cuenta o alguien con el flag de plataforma admin puede escribir ahí. Un Manager de empresa no es ninguna de las dos cosas sobre la cuenta de otra persona, así que Firestore rechaza la escritura para los cinco ejecutivos, uno por uno. La pantalla se construyó para que la usara un Manager y, tal como está escrita hoy, ningún Manager puede guardar nada en ella.

¿Y el seguimiento del cumplimiento?

Suponiendo que el guardado funcionara: no hay ninguna pantalla en Marko, hoy, que muestre cuánto lleva vendido un Ejecutivo frente a la meta que se le puso. Lo buscamos en los tres sitios donde tendría sentido que viviera:

En resumen Hoy, «definir una meta de ventas» y «seguir su cumplimiento» son, en el mejor de los casos, la misma pantalla haciendo sólo la primera mitad — y comprobado que ni eso guarda. La segunda mitad del título de este manual no tiene ningún lugar en la aplicación donde ocurra.

Lo que todavía no hace

Contrastado contra docs/01-ventas/09-metas-ventas.md, que describe un módulo mucho más grande que el que existe en el código:

Cuando algo no sale

Lo que vesQué pasa
«No se pudieron actualizar las metas.»Es el resultado normal, verificado en este manual: Firestore rechaza la escritura a la cuenta del ejecutivo porque quien guarda (Manager) no es su dueño ni tiene el flag de plataforma admin. No es un problema de tu conexión ni de los datos que escribiste — reintentar no lo arregla.
«Metas actualizadas» (verde)Es el mensaje que el código muestra si las cinco escrituras de esa vuelta tuvieran éxito. No lo vimos aparecer ni una vez en las pruebas de este manual — repórtalo si te llega a salir, sería una señal de que la regla cambió o de que entraste con una cuenta con el flag admin.
La tabla queda vacía, sin fila algunaTu empresa no tiene ninguna cuenta activa con el rol exacto Ejecutivo (un Ejecutivo Avanzado no cuenta, ver el paso 2). Sin filas, tampoco aparecen el campo Monto ni los botones Asignar y Actualizar.
Cambias de mes y se te borran montos que acababas de escribirCambiar el Mes vuelve a pedir la lista completa de ejecutivos a Firestore ((ngModelChange)="load()"), no sólo a recalcular: cualquier monto que hayas escrito y no hayas guardado se pierde. Como el guardado no funciona (ver el paso 7), en la práctica cualquier cambio de mes hoy borra lo que llevabas escrito.