Sistema de metas y objetivos para equipos y usuarios individuales. Permite definir OKRs, KPIs, metas de ventas, y trackear progreso en tiempo real. Se integra con Sales para metas comerciales y con Commissions para bonos por cumplimiento.
-- Definiciones de metas
CREATETABLEgoals.definitions(idUUIDPRIMARYKEYDEFAULTgen_random_uuid(),tenant_idUUIDNOTNULLREFERENCEStenants.tenants(id),-- Info basica
nameVARCHAR(200)NOTNULL,descriptionTEXT,categoryVARCHAR(100),-- Tipo de meta
typegoals.goal_typeNOTNULL,metricgoals.metric_typeNOTNULL,-- Objetivo
target_valueDECIMAL(15,2)NOTNULL,unitVARCHAR(50),-- 'USD', 'units', '%', etc.
-- Periodo
periodgoals.period_typeNOTNULL,starts_atDATENOTNULL,ends_atDATENOTNULL,-- Fuente de datos (para tracking automatico)
sourcegoals.data_source,source_configJSONBDEFAULT'{}',-- {
-- module: 'sales',
-- entity: 'opportunities',
-- filter: { status: 'won' },
-- aggregation: 'sum',
-- field: 'amount'
-- }
-- Hitos
milestonesJSONBDEFAULT'[]',-- [{ percentage: 25, notify: true }, { percentage: 50, notify: true }]
-- Estado
statusgoals.goal_statusNOTNULLDEFAULT'draft',-- Metadata
tagsJSONBDEFAULT'[]',created_atTIMESTAMPTZDEFAULTNOW(),updated_atTIMESTAMPTZDEFAULTNOW(),created_byUUIDREFERENCESusers.users(id));-- Asignaciones de metas
CREATETABLEgoals.assignments(idUUIDPRIMARYKEYDEFAULTgen_random_uuid(),tenant_idUUIDNOTNULLREFERENCEStenants.tenants(id),definition_idUUIDNOTNULLREFERENCESgoals.definitions(id),-- Asignado a
assignee_typegoals.assignee_typeNOTNULL,user_idUUIDREFERENCESusers.users(id),team_idUUID,-- Si hay modulo de teams
-- Objetivo personalizado (override)
custom_targetDECIMAL(15,2),-- Progreso
current_valueDECIMAL(15,2)DEFAULT0,progress_percentageDECIMAL(5,2)DEFAULT0,last_updated_atTIMESTAMPTZ,-- Estado
statusgoals.assignment_statusNOTNULLDEFAULT'active',achieved_atTIMESTAMPTZ,-- Metadata
notesTEXT,created_atTIMESTAMPTZDEFAULTNOW(),updated_atTIMESTAMPTZDEFAULTNOW());-- Historial de progreso
CREATETABLEgoals.progress_log(idUUIDPRIMARYKEYDEFAULTgen_random_uuid(),assignment_idUUIDNOTNULLREFERENCESgoals.assignments(id),-- Valores
previous_valueDECIMAL(15,2),new_valueDECIMAL(15,2)NOTNULL,change_amountDECIMAL(15,2),-- Fuente del cambio
sourcegoals.progress_sourceNOTNULL,source_referenceVARCHAR(200),-- ID de la transaccion origen
notesTEXT,logged_atTIMESTAMPTZDEFAULTNOW(),logged_byUUIDREFERENCESusers.users(id));-- Notificaciones de hitos
CREATETABLEgoals.milestone_notifications(idUUIDPRIMARYKEYDEFAULTgen_random_uuid(),assignment_idUUIDNOTNULLREFERENCESgoals.assignments(id),milestone_percentageINTEGERNOTNULL,achieved_valueDECIMAL(15,2)NOTNULL,notified_atTIMESTAMPTZDEFAULTNOW());-- Enums
CREATETYPEgoals.goal_typeASENUM('target','limit','maintain');CREATETYPEgoals.metric_typeASENUM('number','currency','percentage','boolean','count');CREATETYPEgoals.period_typeASENUM('daily','weekly','monthly','quarterly','yearly','custom');CREATETYPEgoals.data_sourceASENUM('manual','sales','billing','commissions','custom');CREATETYPEgoals.goal_statusASENUM('draft','active','paused','completed','cancelled');CREATETYPEgoals.assignee_typeASENUM('user','team','tenant');CREATETYPEgoals.assignment_statusASENUM('active','achieved','failed','cancelled');CREATETYPEgoals.progress_sourceASENUM('manual','automatic','import','api');
GoalFilters - Filtros por periodo/estado/categoria
Hooks
useGoals - CRUD metas
useAssignments - CRUD asignaciones
useMyGoals - Metas del usuario actual
useProgress - Historial de progreso
useGoalReports - Reportes
Integraciones
Tracking Automatico
// Configuracion de fuente de datos
interfaceSourceConfig{module:'sales'|'billing'|'commissions';entity: string;filter: Record<string,any>;aggregation:'sum'|'count'|'avg';field: string;}// Ejemplo: Meta de ventas
{module:'sales',entity:'opportunities',filter:{status:'won'},aggregation:'sum',field:'amount'}
Notificaciones
// Eventos de notificacion
-goal.milestone_reached(25%,50%,75%,100%)-goal.achieved-goal.at_risk(<50%progresoen>75%tiempo)-goal.failed
Dependencias
Modulos Requeridos
SAAS-001 Auth
SAAS-002 Tenants
SAAS-003 Users
SAAS-007 Notifications
Modulos Opcionales
SAAS-018 Sales (fuente de datos)
SAAS-004 Billing (fuente de datos)
SAAS-020 Commissions (bonos por cumplimiento)
Criterios de Aceptacion
CRUD de metas con todos los tipos
Asignacion a usuarios y equipos
Tracking automatico funcional
Actualizacion manual de progreso
Notificaciones de hitos
Dashboard con progreso visual
Reportes de cumplimiento
Tests unitarios (>70% coverage)
Estimacion
Componente
SP
DDL + Entities
2
Backend Services
4
Controllers + DTOs
2
Frontend Pages
3
Frontend Components
2
Tests
1
Total
13
Ultima actualizacion: 2026-01-24
Autor: Claude Opus 4.5