get_business_status
Check current business status with alerts and KPIs using real-time financial data to monitor performance and identify operational insights.
Instructions
Estado general actual del negocio con alertas y KPIs basado en datos reales
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | summary |
Implementation Reference
- src/business/calculator.js:883-919 (handler)Core implementation of getBusinessStatus(): loads financial, business, and domos data; calculates key metrics, alerts, and overall status; formats comprehensive report with KPIs and recommendations.async getBusinessStatus() { validator.log('info', 'Obteniendo estado general del negocio'); try { // Cargar todos los datos necesarios const financialData = await dataLoader.loadFinancialData(); const businessData = await dataLoader.loadBusinessStatus(); const domosStatus = await dataLoader.loadDomosStatus(); // Validar que tenemos datos mínimos if (!financialData && !businessData) { return validator.generateInsufficientDataResponse( 'datos del estado del negocio', 'No se pudo acceder a los datos financieros ni de estado del negocio' ); } // Calcular métricas principales const metrics = this.calculateBusinessMetrics(financialData, businessData, domosStatus); const alerts = this.checkBusinessAlerts(metrics); const overallStatus = this.determineOverallStatus(metrics); return { content: [{ type: 'text', text: this.formatBusinessStatus(metrics, alerts, overallStatus) }] }; } catch (error) { validator.log('error', `Error obteniendo estado del negocio: ${error.message}`); return validator.generateInsufficientDataResponse( 'estado del negocio', 'Error interno en la consulta. Contacta al administrador.' ); } }
- server.js:232-258 (registration)MCP tool registration for 'get_business_status': defines schema (optional format param), wrapper handler with logging/error handling that calls businessCalculator.getBusinessStatus()server.registerTool( 'get_business_status', { title: 'Estado del negocio', description: 'Estado general actual del negocio con alertas y KPIs basado en datos reales', inputSchema: z.object({ format: z.string().optional().default('summary') }), }, async () => { validator.log('info', 'Iniciando consulta de estado general del negocio'); try { const result = await businessCalculator.getBusinessStatus(); validator.log('info', 'Estado del negocio obtenido exitosamente'); return result; } catch (error) { validator.log('error', `Error crítico obteniendo estado del negocio: ${error.message}`); return validator.generateInsufficientDataResponse( 'estado del negocio', 'Error interno del sistema. Contacta al administrador.' ); } } );
- server.js:234-240 (schema)Input schema definition using Zod: optional 'format' string defaulting to 'summary'{ title: 'Estado del negocio', description: 'Estado general actual del negocio con alertas y KPIs basado en datos reales', inputSchema: z.object({ format: z.string().optional().default('summary') }), },
- src/business/calculator.js:924-951 (helper)Helper method to compute key business metrics (revenue, profit, margin, occupancy, domos status) used by getBusinessStatuscalculateBusinessMetrics(financialData, businessData, domosStatus) { const revenue = financialData?.ingresos_total || 0; const expenses = financialData?.gastos_total || 0; const profit = revenue - expenses; const margin = revenue > 0 ? (profit / revenue * 100).toFixed(1) : 0; const occupancy = businessData?.occupancy || 0; const reservations = financialData?.reservas_totales || 0; // Métricas de domos si están disponibles let domosMetrics = null; if (domosStatus) { domosMetrics = this.calculateOccupancyMetrics(domosStatus); } return { revenue, expenses, profit, margin: parseFloat(margin), occupancy, reservations, domosMetrics, // Metas del negocio revenueGoal: 6000000, profitGoal: 2000000, occupancyGoal: 70 }; }
- src/business/calculator.js:956-989 (helper)Helper method to generate business alerts based on metrics thresholds (profit, margin, occupancy, maintenance, revenue)checkBusinessAlerts(metrics) { const alerts = []; // Alertas financieras if (metrics.profit < 1000000) { alerts.push('🔴 Utilidad por debajo del mínimo operativo'); } if (metrics.margin < 20) { alerts.push('⚠️ Margen de utilidad bajo (< 20%)'); } // Alertas de ocupación if (metrics.occupancy < 50) { alerts.push('🔴 Ocupación crítica (< 50%)'); } // Alertas de domos si están disponibles if (metrics.domosMetrics) { if (metrics.domosMetrics.maintenance > metrics.domosMetrics.total / 2) { alerts.push('⚠️ Muchos domos en mantención'); } if (metrics.domosMetrics.available === 0 && metrics.domosMetrics.occupied === 0) { alerts.push('🔴 Todos los domos fuera de servicio'); } } // Alertas de ingresos if (metrics.revenue < metrics.revenueGoal * 0.5) { alerts.push('🔴 Ingresos muy por debajo de la meta'); } return alerts;