feat(frontend): render Vocero screens and controls with React
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import type { Reports } from "./contracts";
|
||||
|
||||
/** Keep the original report-based conversation suggestions in the debug sidebar. */
|
||||
export function reportSuggestions(reports: Reports) {
|
||||
const labels = reports.entries
|
||||
.map((entry) => entry.sourceScheduleLabel?.trim())
|
||||
.filter((label): label is string => !!label);
|
||||
const first = labels[0];
|
||||
if (!first) {
|
||||
return [];
|
||||
}
|
||||
const second = labels[1] ?? first;
|
||||
const third = labels[2] ?? first;
|
||||
const templates: [RegExp, (label: string) => string][] = [
|
||||
[
|
||||
/riesgo|mortalidad|porcentaje|kpi/i,
|
||||
(label) => `Dame un resumen ejecutivo de los riesgos operativos y KPIs del reporte de ${label}.`,
|
||||
],
|
||||
[/diari[oa]|informe/i, (label) => `Cuéntame los puntos clave del informe diario más reciente (${label}).`],
|
||||
[/métrica|metrica|medici[oó]n/i, (label) => `Compara las métricas de la última semana del reporte ${label}.`],
|
||||
[/producto|servicio/i, (label) => `¿Qué hay de nuevo en productos y servicios según el reporte ${label}?`],
|
||||
[
|
||||
/supply|cadena|log[ií]stica|env[ií]o|chile|latin/i,
|
||||
(label) => `¿Hay novedades en la cadena de suministro o logística en el reporte ${label}?`,
|
||||
],
|
||||
[
|
||||
/synapse|ejecuci[oó]n|calendario/i,
|
||||
(label) => `¿Qué ejecuciones del calendario Synapse TI están reportadas? (${label}).`,
|
||||
],
|
||||
[/podcast|briefing|mañana|matutino|morning/i, (label) => `Lee el podcast briefing matutino de hoy (${label}).`],
|
||||
[
|
||||
/financier|finanza|costo|presupuesto|venta/i,
|
||||
(label) => `Análisis financiero: costos, presupuesto y ventas del reporte ${label}.`,
|
||||
],
|
||||
[
|
||||
/ejecutivo|ceo|reuni[oó]n|semanal/i,
|
||||
(label) => `Puntos de agenda para la reunión ejecutiva semanal según el reporte ${label}.`,
|
||||
],
|
||||
];
|
||||
const contextual = templates.flatMap(([pattern, text]) => {
|
||||
const label = labels.find((label) => pattern.test(label));
|
||||
return label ? [text(label)] : [];
|
||||
});
|
||||
return [
|
||||
...contextual,
|
||||
`¿Qué highlights hay en el reporte más reciente «${first}»?`,
|
||||
`Resume los 3 hallazgos principales de los reportes de hoy (${String(reports.count)} disponibles).`,
|
||||
...(reports.count >= 2 ? [`Compara ${first} vs ${second} y dime cuál tiene mayor prioridad.`] : []),
|
||||
...(reports.count >= 3 ? [`Plan de acción sugerido con base en ${first}, ${second} y ${third}.`] : []),
|
||||
].slice(0, 4);
|
||||
}
|
||||
Reference in New Issue
Block a user