# Modulo 9 Operacion (Proyectos y Tareas Colaborativas)

## Alcance inicial
- Tableros colaborativos por tenant (`project_boards`).
- Estados por tablero tipo kanban (`project_columns`).
- Tareas con prioridad, estado, fechas, progreso y estimacion (`project_tasks`).
- Responsables multiples por tarea (`project_task_assignees`).
- Subtareas (`project_task_subtasks`).
- Comentarios y auditoria funcional (`project_task_comments`, `project_task_history`).

## Preparacion
- Ejecutar migracion:
- `020_projects_tasks_collaboration.sql`
- `021_projects_enterprise_hardening.sql`
- `022_projects_closure_hardening.sql`

## Modelo operativo base
1. Crear/usar un tablero por proyecto.
2. Definir columnas de flujo (todo, doing, review, done).
3. Registrar tareas con fecha de inicio/vencimiento y prioridad.
4. Asignar responsables (uno primario, opcionalmente adicionales).
5. Dividir tareas en subtareas para seguimiento fino.
6. Mantener comentarios e historial para trazabilidad.

## Tablas clave
- `project_boards`
- `project_board_members`
- `project_columns`
- `project_tasks`
- `project_task_assignees`
- `project_task_subtasks`
- `project_task_comments`
- `project_task_history`

## Seed demo
La migracion crea para tenant `demo`:
- Tablero `Proyecto Demo`.
- Columnas:
- `todo` (Por hacer)
- `doing` (En curso)
- `review` (En revision)
- `done` (Hecho)

## Siguiente paso recomendado
- Implementar `ProjectService` + rutas web/API para:
- CRUD tablero/columnas/tareas
- drag and drop por columna (`sort_order`)
- operaciones de subtareas y asignaciones

## Endpoints disponibles (fase base)
- Web:
- `POST /projects/board/create?tenant={slug}`
- `POST /projects/task/create?tenant={slug}`
- `POST /projects/task/move?tenant={slug}`
- `POST /projects/subtask/add?tenant={slug}`
- `POST /projects/subtask/status?tenant={slug}`
- API:
- `GET /api/v1/projects/boards?tenant={slug}`
- `GET /api/v1/projects/board?tenant={slug}&board_id={id}`
- `GET /api/v1/projects/kpis?tenant={slug}&board_id={id}`
- `POST /api/v1/projects/boards?tenant={slug}`
- `POST /api/v1/projects/columns?tenant={slug}`
- `POST /api/v1/projects/tasks?tenant={slug}`
- `POST /api/v1/projects/tasks/move?tenant={slug}`
- `POST /api/v1/projects/subtasks?tenant={slug}`
- `POST /api/v1/projects/subtasks/status?tenant={slug}`

## Cierre enterprise (15 mejoras implementadas en 022)
1. Archivado logico para tableros y columnas (`project_boards`, `project_columns`).
2. Metadatos de ciclo de vida de tareas (inicio real, primer/ultimo movimiento, finalizacion por usuario).
3. Indices de alto impacto para board, SLA, carga y ordenamiento de tareas.
4. Regla DB para un unico responsable primario por tarea (`project_task_assignees`).
5. Gobernanza de estado por columna (`project_column_status_rules`).
6. Integridad de dependencias con check anti self-reference e indices reversos.
7. Historial de movimientos de tarea (`project_task_movements`).
8. Trazabilidad SLA extendida por tarea (`sla_warning_at`, `sla_breached_at`, `sla_resolved_at`).
9. Cola de notificaciones internas (`project_notifications`).
10. Versionado de plantillas (`project_templates.version`, `project_template_versions`).
11. Observadores de tarea (`project_task_watchers`).
12. Permisos granulares por accion (`project_board_permission_actions`).
13. Snapshots avanzados de analitica (`project_analytics_snapshots`).
14. Registro de scheduling y ejecuciones de jobs (`project_job_schedules`, `project_job_runs`).
15. Framework de calidad de datos (`project_data_quality_checks`, `project_data_quality_issues`).

## Endpoints API enterprise activos
- `POST /api/v1/projects/tasks/status?tenant={slug}`
- `GET|POST /api/v1/projects/dependencies?tenant={slug}`
- `GET|POST /api/v1/projects/checklist?tenant={slug}`
- `POST /api/v1/projects/checklist/status?tenant={slug}`
- `GET|POST /api/v1/projects/sla-rules?tenant={slug}`
- `POST /api/v1/projects/sla/monitor?tenant={slug}`
- `GET|POST /api/v1/projects/tags?tenant={slug}`
- `POST /api/v1/projects/task-tags?tenant={slug}`
- `GET|POST /api/v1/projects/comments?tenant={slug}`
- `GET|POST /api/v1/projects/attachments?tenant={slug}`
- `POST /api/v1/projects/duplicates/scan?tenant={slug}`
- `POST /api/v1/projects/snapshots/daily?tenant={slug}`
- `POST /api/v1/projects/snapshots/workload?tenant={slug}`

## Cron de operacion de proyectos
- `POST /cron/projects-sla?tenant={slug}`
- `POST /cron/projects-snapshot?tenant={slug}`
- `POST /cron/projects-workload?tenant={slug}`
- `POST /cron/projects-duplicates?tenant={slug}`
