Paso a paso
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ó.
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.
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.
Al menos un Ejecutivo activo en tu empresa con el rol exacto Ejecutivo — el Ejecutivo Avanzado no cuenta, ver el paso 2.
Un minuto para escribir los montos. El guardado, verificado en este manual, no termina de funcionar.
Entra directamente a la URL /sales-goals — no hay ningún enlace de
menú que te lleve ahí.
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./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.Ya dentro, revisa la lista: son los Ejecutivos de tu empresa, con su correo y su cargo.
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.Escribe un monto en el campo numérico de un Ejecutivo, a la derecha de su fila.
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.
Pulsa Asignar y mira la tabla: las cinco filas quedan con el mismo monto.
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.Si un Ejecutivo necesita algo distinto del resto, edita su fila a mano después de la asignación masiva.
Pulsa Actualizar para guardar.
sales-goals.component.ts:108).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.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.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:
/dashboard) lo tuvo y se lo quitaron.
En dashboard.component.ts:157-159 queda el rastro en un comentario: «Se eliminan
los cálculos de las propiedades no utilizadas de 'totals': assignedOC, provOCcreated, margin,
provOCapproved, salesGoal, remaining, fulfillment, projection». El objeto
totals sigue existiendo, pero ninguna de esas cuatro propiedades — meta, saldo
pendiente, cumplimiento y proyección — se calcula ni se pinta en ningún lado del
dashboard actual.salesGoals. El cálculo de comisión sale de
las OC de Convenio Marco y sus tramos configurados, no de la meta que se le puso a nadie. Para
consultar comisiones ganadas, el manual es
Consultar tus comisiones ganadas y proyectadas; para
aprobarlas y pagarlas, Pago de Comisiones — ninguno de
los dos habla de metas.salesGoal en todo functions/src: no aparece una sola vez. Nada recalcula
avance, nada dispara una alerta al llegar al 70 % ni al superar el 100 %.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:
comisionAsociada del
modelo que describe la documentación no existe en el código: las comisiones se calculan aparte,
sobre las OC ganadas, sin mirar nunca si hubo una meta ni si se cumplió.Math.abs(...) si el guardado funcionara) y no tiene tope superior.maxPeriod, un año hacia adelante): la propiedad existe en el código pero no está
enlazada a ningún atributo del campo <input type="month">, así que en la
práctica puedes elegir cualquier mes, pasado o futuro, sin aviso.| Lo que ves | Qué 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 alguna | Tu 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 escribir | Cambiar
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. |