Crítica — no se recorreFlexible — se puede moverHechaResumen — se calcula de los pasos· Arrastra ⠿ para reordenar · el borde de la columna para ensancharla
Planeación
Borrador visual — arrastra bloques para bocetar tu trimestre
—
Tarea
Nombre de la tarea *
Delegado a
Semana de inicio
Duración (semanas)
Repetir
Las fechas se calculan de los pasos: la barra abarca del primero al último.
Tipo
Mover a otra fase
Orden dentro de la fase
Pasos — para tareas de varias partes
Sin pasos: la tarea usa sus propias fechas. Agrega pasos si conlleva varias etapas (ej. guionizar → grabar → editar → publicar).
Editar bloque
⟳Parámetros de COGS actualizados — precios recalculados
Línea de servicio
Imagen
Fotografía corporativa
Video
Video corporativo
Presencia
Programa mensual
Tipo de producción
📷 Fotografía
Sesión fotográfica
COGS ×1.00
🎬 Video
Producción de video
COGS ×1.30
📷+🎬 Combinado
Foto + Video
COGS ×1.20
🎤 Evento
Cobertura en vivo
COGS ×1.10
Duración / complejidad
Media jornada
COGS × 1
Jornada completa
COGS × 1.5
Prod. extendida
COGS × 2
Zona de traslado
Multiplicadores de complejidad · encarecen el costo realHonorario Andrea
$0
Fijos + honorario
$—
Impacto / sesión
+$—
Validador de COGS
▼
COGS base categoría$—
× Duración / tipo producción×1
COGS ajustado$—
Drone+$—
Rush+$—
Locaciones+$—
Talento+$—
Edición extra+$—
COGS total sesión$—
Extras
Drone
$800 × VUELO
1 × $800 = $800
Entrega urgente — Rush
+50% SOBRE COGS BASE
Locaciones adicionales
$500 × LOCACIÓN EXTRA
1 extra · $500
Talento / modelos
TARIFA VARIABLE
$1,500
Viáticos / traslado
PASS-THROUGH — NO CUENTA EN MARGEN
$500
Edición adicional extendida
$350/H
2h · $700
Sesiones simultáneas
8
Escalera de negociación
Costo base por sesión
$—
COGS + fijos + honorario
Para cubrir fijos del mes necesitas
— sesiones
al PL
Paso
Tipo
Costo base
Precio
Precio de salida
60% · 12M
PL
—
$—
Primera concesión
40% · 12M
T1
—
$—
Segunda concesión
25% · 12M
T2
—
$—
Si piden plazo largo
40% · 24M
T3
—
$—
Último recurso
25% · 24M
T4
—
$—
Guardar cotización
Cliente
Vincular a prospecto (opcional)
Tipo elegido
Cotización para
—
Selecciona un tipo de precio arriba
Tipo de producción del PDF
— selecciona tipo en la pestaña Cotizar —
Constructor de fases
Total construido
$0
—
Datos del PDF
Nombre completo del cliente
Empresa / organización
Ciudad / contexto
Descripción del alcance
Número de cotización
Validez (días)
Forma de pago
Condición de pago personalizada
Plazo de entrega
Nota adicional en términos (opcional)
Términos y condiciones
Edita directamente los párrafos que aparecerán en el PDF. Se guardan como preestablecidos para la próxima cotización.
Párrafo 1 — Pago y cancelación
Párrafo 2 — Plazo y alcance
Párrafo 3 — Validez y adicionales
Párrafo 4 — Portafolio y confidencialidad
Nota final al pie del PDF
Tablero — arrastra las tarjetas entre columnas
—
El periodo manda sobre todos los indicadores. Enviadas y Negociando solo aparecen en el periodo en curso: una oportunidad abierta vive hoy, no en un mes ya cerrado.
EmbudoPor qué se pierdenAntigüedad del pipeline
Prospectos
Cargando...
Resumen
Mes actual
💰 Realizado (real)
$0
dinero de cotizaciones cerradas
📊 Potencial (proyección)
$0
pipeline ponderado por hit rate
Realizado = dinero confirmado de cotizaciones marcadas como cerradas. Potencial = lo que las cotizaciones aún abiertas podrían traer, ajustado por tu tasa histórica de cierre.
Año completo · cubrir vs vendido
Lo que vendiste vs lo que necesitas cubrir cada mes
Vendido (real)Meta a cubrir
Forecast — proyección de cierre
Cotizaciones enviadas vs. punto de equilibrio
Sin cotizaciones enviadas aún
Velocidad del pipeline
Tiempo promedio entre pasos
Enviadas
—
pendientes
Valor pipeline
$—
si todas cierran
Conversión est.
—
basado en hit rate
—
Simulador de escenario
¿Qué pasa si cierras este mes...?
4
$8,500
Historial: cargando...
Resumen del mes
Basado en cotizaciones guardadas este mes
Cotizaciones totales
0
enviadas + cerradas + perdidas
Monto cotizado
$0
total propuesto este mes
Cerradas
0
$0 facturado
Perdidas
0
$0 perdido
Hit rate
—
de proyectos con resultado
Le debes al negocio
$—
Resultado vs fijos
$—
Margen de negociación
—
Lo que ya cerraste este mes
Cotizaciones cerradas — desglose
Sin cierres este mes aún
Recuperación del equipo
$248,191 — ritmo real de recuperación
$00%$248,191
Recuperado
$0
ganancia acumulada
Restante
$248,191
por recuperar
A este ritmo
—
meses para recuperar
—
Patrón de cierre por categoría · histórico global
En qué tipo sueles cerrar
Necesitas al menos 3 cierres
Análisis de erosión de precio · histórico global
Precio promedio real vs. precio de salida
Necesitas cotizaciones cerradas
Costo de oportunidad
Lo que se fue
Sin cotizaciones perdidas aún
Pendientes de respuesta
Estado de resultados
—
—
Composición de cada peso vendido
Registro de ingresos — venta por venta
Mes a mes
Estado de resultados
Supuestos
IVA trasladado (%)
Provisión de ISR sobre utilidad (%)
El IVA y los viáticos no son tuyos: entran y salen. Por eso se restan antes de medir rentabilidad.
Motor de costos
Base, multiplicadores, inventario y fijos · alimentan el cotizador en vivo
Estructura de costo y precio · P&L por sesión
Todo lo de abajo se reparte entre las sesiones que te propones vender al mes. El piso no es negociable: es lo que debes cubrir para no perder. Lo único que se mueve al bajar de escalón es el markup.
Meta de sesiones / mes
Markup objetivo (%)
ISR sobre utilidad (%)
A qué precio puedes cerrar y qué te queda
Absorción real vs meta
Inversión activa
$391,521
55 items
Fijos mensuales totales
$—
fijos + depreciación
Periodo de recuperación del equipo
Cuántos meses para recuperar el equipo. Más meses = depreciación mensual menor = precios más competitivos.
24 meses
Depreciación / mes
$16,313
PL Comercial · 8 ses
$—
Inventario de equipo
El total activo alimenta la depreciación
Gastos fijos del negocio
Gastos mensuales fijos del negocio
Total fijos/mes$7,568
Bloque 1 · Base del P&L
Define el piso de una sesión estándar y por lo tanto tu estado de resultados. Mover algo aquí mueve todos los precios.
Costo base por jornada
Costo directo de producir una jornada base: transporte, comida, consumibles, desgaste y entregables. Ya no depende de la categoría de servicio — esa describe qué vendes, no cuánto cuesta producirlo. Lo que encarece es el tiempo y la logística.
$1,200
Cómo se calcula el COGS base
Sueldos y honorarios
Lo que el negocio paga al mes en sueldos y honorarios fijos. Entra al piso igual que los gastos fijos.
$0
Por sesión
$—
% del piso
—
Márgenes objetivo por escalón
Cada escalón de la escalera se define por el margen neto que quieres dejar, no por un multiplicador arbitrario. El precio se despeja solo: precio = piso ÷ (1 − margen). PL es tu precio de lista; el último escalón es tu piso comercial: nunca negocies por debajo.
Bloque 2 · Referencias del cotizador
Encarecen una cotización en particular según su complejidad. No mueven el P&L base ni el piso de la sesión estándar.
Multiplicadores por tipo de producción
El video requiere más equipo y edición. Se aplica sobre la base por jornada.
×1.00
×1.30
×1.20
×1.10
Multiplicadores de complejidad · los tuyos
Aparecen como casillas en el cotizador. Actívalos cuando el proyecto lo amerite y encarecen el costo real.
Impacto en precios de salida
PL con la config actual · 8 sesiones/mes
Agregar equipo
Nombre del equipo *
Segmento
Costo unitario (MXN) *
Cantidad
Respaldo local
Respaldos automáticos (últimos 3 días)
—
Google Sheets — sincronización bidireccional
Sin sincronizar aún
Cómo funciona: Al abrir el CRM se descargan automáticamente los cambios del Sheet. Si tú y Andrea editan lo mismo, gana la versión más reciente. Tus cambios se suben solos al guardar.
Script para Google Apps Script
// ════════════════════════════════════════════
// .3 VISUAL CRM — Sync Apps Script v2 (two-way)
// Guarda TODO el estado como JSON en una celda.
// Soporta lectura (doGet) y escritura (doPost).
// ════════════════════════════════════════════
function doPost(e){
try{
const ss=SpreadsheetApp.getActiveSpreadsheet();
const data=JSON.parse(e.postData.contents);
let sheet=ss.getSheetByName('p3_data');
if(!sheet){sheet=ss.insertSheet('p3_data');sheet.getRange(1,1).setValue('JSON_BACKUP');}
// Guardar el blob completo en A2 + timestamp en B2
sheet.getRange(2,1).setValue(JSON.stringify(data.payload||{}));
sheet.getRange(2,2).setValue(new Date().toISOString());
// Tabla legible para Andrea (hoja separada)
escribirTablaLegible(ss,data.payload);
return ContentService.createTextOutput(JSON.stringify({ok:true,saved:new Date().toISOString()})).setMimeType(ContentService.MimeType.JSON);
}catch(err){
return ContentService.createTextOutput(JSON.stringify({ok:false,error:String(err)})).setMimeType(ContentService.MimeType.JSON);
}
}
function doGet(e){
try{
const ss=SpreadsheetApp.getActiveSpreadsheet();
const sheet=ss.getSheetByName('p3_data');
if(!sheet){return ContentService.createTextOutput(JSON.stringify({ok:true,payload:null})).setMimeType(ContentService.MimeType.JSON);}
const blob=sheet.getRange(2,1).getValue();
const ts=sheet.getRange(2,2).getValue();
const payload=blob?JSON.parse(blob):null;
return ContentService.createTextOutput(JSON.stringify({ok:true,payload:payload,updated:ts})).setMimeType(ContentService.MimeType.JSON);
}catch(err){
return ContentService.createTextOutput(JSON.stringify({ok:false,error:String(err)})).setMimeType(ContentService.MimeType.JSON);
}
}
// Tabla legible de cotizaciones y prospectos para Andrea
function escribirTablaLegible(ss,payload){
if(!payload)return;
// COTIZACIONES
if(Array.isArray(payload.cotizaciones)){
let sh=ss.getSheetByName('Cotizaciones')||ss.insertSheet('Cotizaciones');
sh.clear();
sh.appendRow(['ID','Fecha','Cliente','Categoría','Tipo Prod','Escalón','Precio','Ganancia','Estado','Nota']);
payload.cotizaciones.forEach(c=>sh.appendRow([c.id,c.fecha||'',c.cliente||'',c.catLabel||'',c.tipoProdLabel||'',c.tipo||'',c.precio||0,c.margen||0,c.status||'',c.nota||'']));
sh.getRange(1,1,1,10).setFontWeight('bold');
}
// PROSPECTOS
if(Array.isArray(payload.prospectos)){
let sh=ss.getSheetByName('Prospectos')||ss.insertSheet('Prospectos');
sh.clear();
sh.appendRow(['ID','Nombre','Persona','Ciudad','Tel','Mail','Rubro','Ticket','Contactado','Urgente','Próximo Contacto','Nota']);
payload.prospectos.forEach(p=>sh.appendRow([p.id,p.nombre||'',p.persona||'',p.ciudad||'',p.tel||'',p.mail||'',p.rubro||'',p.ticket||'',p.contactado?'Sí':'No',p.hot?'Sí':'',p.proximoContacto||'',p.nota||'']));
sh.getRange(1,1,1,12).setFontWeight('bold');
}
}
Zona de riesgo
Score de salud del negocio
—
Calculando...
Agregar cliente
Nombre / empresa *
Persona de contacto
Rubro / categoría
Ticket estimado
Nota / contexto
Teléfono / WhatsApp
Correo electrónico
Instagram / redes
Ubicación / dirección
Sitio web
Razón social
RFC
Régimen fiscal
Uso de CFDI
Código postal fiscal
Email para facturación
Timeline de contactos
Fecha de primer contacto
Fecha del último trabajo realizado
Próximo contacto programado
Últimas negociaciones / notas de seguimiento
Historial con este cliente
Cerrar venta
—
—
¿En cuánto cerraste? (MXN)
Escalón en el que cerró
¿Por qué se perdió?
Fecha real del cierre
Esta fecha manda para "Este mes": si cotizaste en julio y cerraste en agosto, factura en agosto.