Pular para o conteúdo principal

Especificação do Módulo de Tarefas

Sistema de origem: Organiza
Versão: 2.0
Finalidade deste documento: servir de referência completa (funcional + dados + APIs + regras) para reimplementar o módulo em outro projeto.

Endpoints HTTP atuais no AMPLIA: api/endpoints.md. OpenAPI: api/openapi.yaml.


Sumário

  1. Visão geral
  2. Escopo
  3. Glossário
  4. Arquitetura e multi-tenant
  5. Modelo de dados
  6. Relacionamentos
  7. Enums e catálogos
  8. Permissões e visibilidade
  9. Regras de negócio
  10. Telas e capacidades UX
  11. Contrato de APIs
  12. Armazenamento de arquivos
  13. Auditoria e logs
  14. Integrações
  15. Fluxos principais
  16. Sugestões para reimplementação
  17. Critérios de aceitação

1. Visão geral

O módulo de Tarefas permite que cada empresa (tenant) planeje, execute e acompanhe trabalho operacional.

Ciclo operacional

EtapaCapacidade
CriarTarefa unitária ou em lote
OrganizarStatus, prioridade, prazo, projeto (nome), responsável
ExecutarChecklist (passos), documentos, fluxo operacional
ColaborarComentários internos + histórico
AcompanharListagem, Kanban, dashboard, link público de projeto
ResumirResumo executivo por IA (opcional)

Princípios

PrincípioDetalhe
Multi-tenantToda tarefa tem tenant_id; isolamento obrigatório
Módulo opcionalEm white label, liga/desliga via tenant_modules.module = 'tasks'
Sem FK com CRMNão há vínculo estrutural com leads/clientes
Projeto por nometasks.project é VARCHAR (match com projects.name), não FK

2. Escopo

2.1 Dentro do escopo

  • CRUD de tarefas
  • Listagem filtrada + paginação
  • Kanban por status
  • Checklist (passos)
  • Documentos anexos
  • Fluxo operacional (etapas ordenadas)
  • Comentários e histórico da tarefa
  • Atribuição de responsável
  • Resumo por IA
  • KPIs de operação no dashboard
  • Vínculo lógico com projetos + página pública de acompanhamento

2.2 Fora do escopo (no Organiza atual)

  • Drag-and-drop no Kanban
  • FK real tarefa ↔ projeto
  • Vínculo tarefa ↔ lead/cliente
  • Enforcement da flag tarefas.block
  • Filtro distinto para tarefas.read_filtered (hoje = read_all)

3. Glossário

TermoSignificado
TarefaUnidade de trabalho (tasks)
StatusEstado do ciclo: pending / started / completed / cancelled
Prioridadelow / medium / high
PassoItem de checklist (task_steps)
DocumentoAnexo da tarefa (task_documents)
Fluxo operacionalSequência numerada de etapas (task_activity_flow_steps)
Timeline da tarefaUI derivada do status (Pendente → Iniciada → Concluída)
ProjetoCadastro separado (projects); ligado à tarefa por nome
TenantEmpresa / white label
TaskPolicyCamada de visibilidade (próprias vs todas)

4. Arquitetura e multi-tenant

4.1 Gate do módulo

ConceitoValor
Tabelatenant_modules
Chave do módulomodule = 'tasks'
Plataforma (tenant id = 1)Sempre habilitado
White labelCheckbox no CRUD de WL
Ao ligarHabilita módulo + concede permissões padrão aos admins
Ao desligarMenu/API/grupo somem; dados preservados
CREATE TABLE tenant_modules (
tenant_id INT UNSIGNED NOT NULL,
module VARCHAR(60) NOT NULL, -- 'tasks' | 'leads' | ...
enabled TINYINT(1) NOT NULL DEFAULT 0,
updated_at DATETIME NULL,
PRIMARY KEY (tenant_id, module),
CONSTRAINT fk_tenant_modules_tenant
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);

4.2 Camadas de enforcement

CamadaComportamento se módulo OFF
Páginas (tarefas.php, kanban.php)HTTP 403
APIs (api/tarefas/**, kanban, KPIs)JSON 403
Permissões tarefas.*Sempre false
SidebarLinks ocultos
DashboardAba Operação oculta

4.3 Isolamento de dados

  1. Toda query/mutação filtra por tenant_id da sessão.
  2. Filhos (steps, docs, flow, comments, history) não têm tenant_id próprio — herdam via task_id + CASCADE.
  3. Leitura adicional via TaskPolicy (próprias / todas).

5. Modelo de dados

5.1 Mapa de tabelas do módulo

TabelaPapelDependência
tasksEntidade principaltenants, users
task_stepsChecklisttasks, users
task_documentsAnexostasks, users
task_activity_flow_stepsFluxo operacionaltasks, users
task_commentsComentáriostasks, users
task_historyAuditoria da tarefatasks
projectsCadastro de projetos (satélite)tenants, clients
tenant_modulesLiga/desliga módulotenants
permissionsCatálogo de flags
user_permissionsFlags por usuáriousers, permissions
logsLog global do sistematenants

5.2 Diagrama ER

erDiagram
tenants ||--o{ users : possui
tenants ||--o{ tasks : possui
tenants ||--o{ projects : possui
tenants ||--o{ tenant_modules : configura

users ||--o{ tasks : created_by
users ||--o{ tasks : assigned_to
users ||--o{ task_steps : created_by
users ||--o{ task_documents : uploaded_by
users ||--o{ task_activity_flow_steps : created_by
users ||--o{ task_comments : user_id
users ||--o{ user_permissions : possui
permissions ||--o{ user_permissions : define

tasks ||--o{ task_steps : tem
tasks ||--o{ task_documents : tem
tasks ||--o{ task_activity_flow_steps : tem
tasks ||--o{ task_comments : tem
tasks ||--o{ task_history : registra

projects }o..o{ tasks : "vinculo logico por nome"
clients ||--o{ projects : opcional

5.3 Tabela tasks

CREATE TABLE tasks (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tenant_id INT UNSIGNED NOT NULL,
title VARCHAR(180) NOT NULL,
description TEXT NULL,
project VARCHAR(120) NULL, -- nome do projeto (NAO FK)
status ENUM('pending','started','completed','cancelled') NOT NULL DEFAULT 'pending',
previous_status ENUM('pending','started','completed','cancelled') NULL,
priority ENUM('low','medium','high') NOT NULL DEFAULT 'medium',
assigned_to INT UNSIGNED NULL,
created_by INT UNSIGNED NOT NULL,
due_date DATE NULL,
ai_summary TEXT NULL,
ai_transcription LONGTEXT NULL,
ai_summary_generated_at DATETIME NULL,
completed_at DATETIME NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL,

KEY idx_tasks_tenant (tenant_id),
KEY idx_tasks_status (status),
KEY idx_tasks_due_date (due_date),
KEY idx_tasks_assigned_to (assigned_to),
KEY idx_tasks_created_by (created_by),

CONSTRAINT fk_tasks_tenant
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE RESTRICT,
CONSTRAINT fk_tasks_assigned_to
FOREIGN KEY (assigned_to) REFERENCES users(id) ON DELETE SET NULL,
CONSTRAINT fk_tasks_created_by
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE
);
CampoTipoObrigatórioRegras
idINT UNSIGNEDPKAuto
tenant_idINT UNSIGNEDSimFK tenants, RESTRICT
titleVARCHAR(180)SimMín. 3 caracteres
descriptionTEXTNão
projectVARCHAR(120)NãoMatch textual com projects.name
statusENUMSimDefault pending
previous_statusENUMNãoUsado no toggle Kanban
priorityENUMSimDefault medium
assigned_toINT UNSIGNEDNãoFK users, SET NULL
created_byINT UNSIGNEDSimFK users, CASCADE
due_dateDATENãoDias úteis + janela (ver regras)
ai_summaryTEXTNãoPreenchido pela IA
ai_transcriptionLONGTEXTNãoExtração dos anexos
ai_summary_generated_atDATETIMENãoTimestamp da geração
completed_atDATETIMENãoSó quando status = completed
created_at / updated_atTIMESTAMP/DATETIMEAuditoria temporal

5.4 Tabela task_steps (checklist)

CREATE TABLE task_steps (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
task_id INT UNSIGNED NOT NULL,
title VARCHAR(180) NOT NULL, -- min. 2
is_done TINYINT(1) NOT NULL DEFAULT 0,
created_by INT UNSIGNED NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL,
CONSTRAINT fk_task_steps_task
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
CONSTRAINT fk_task_steps_created_by
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE
);

5.5 Tabela task_documents

CREATE TABLE task_documents (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
task_id INT UNSIGNED NOT NULL,
original_name VARCHAR(180) NOT NULL,
file_name VARCHAR(220) NOT NULL,
file_path VARCHAR(255) NOT NULL,
mime_type VARCHAR(120) NULL,
file_size INT UNSIGNED NULL,
uploaded_by INT UNSIGNED NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_task_documents_task
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
CONSTRAINT fk_task_documents_uploaded_by
FOREIGN KEY (uploaded_by) REFERENCES users(id) ON DELETE CASCADE
);

5.6 Tabela task_activity_flow_steps

CREATE TABLE task_activity_flow_steps (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
task_id INT UNSIGNED NOT NULL,
title VARCHAR(180) NOT NULL, -- min. 2
sort_order INT UNSIGNED NOT NULL DEFAULT 1, -- MAX(sort_order)+1
created_by INT UNSIGNED NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_task_activity_flow_steps_task
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
CONSTRAINT fk_task_activity_flow_steps_created_by
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE
);

5.7 Tabela task_comments

CREATE TABLE task_comments (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
task_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
user_name VARCHAR(120) NOT NULL, -- snapshot do nome
comment TEXT NOT NULL, -- min. 2
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_task_comments_task (task_id),
CONSTRAINT fk_task_comments_task
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
CONSTRAINT fk_task_comments_user
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

5.8 Tabela task_history

CREATE TABLE task_history (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
task_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NULL, -- sem FK (snapshot)
user_name VARCHAR(120) NOT NULL,
action VARCHAR(80) NOT NULL,
description VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_task_history_task (task_id),
INDEX idx_task_history_created_at (created_at),
CONSTRAINT fk_task_history_task
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
);

5.9 Tabela projects (satélite)

Usada pelo módulo de tarefas via nome, não FK.

CREATE TABLE projects (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tenant_id INT UNSIGNED NOT NULL,
client_id INT UNSIGNED NULL,
name VARCHAR(120) NOT NULL,
description TEXT NULL,
project_type VARCHAR(60) NULL,
start_date DATE NULL,
delivery_forecast DATE NULL,
contract_value DECIMAL(12,2) NULL,
billing_type ENUM('setup','mensalidade','setup_mensalidade') NULL,
setup_value DECIMAL(12,2) NULL,
monthly_value DECIMAL(12,2) NULL,
billing_due_day TINYINT UNSIGNED NULL,
status ENUM('pending','in_progress','completed','paused') NOT NULL DEFAULT 'pending',
public_token VARCHAR(80) NULL UNIQUE,
public_link_access_count INT UNSIGNED NOT NULL DEFAULT 0,
public_link_last_accessed_at DATETIME NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL,
UNIQUE KEY uniq_projects_tenant_name (tenant_id, name),
CONSTRAINT fk_projects_tenant
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE RESTRICT,
CONSTRAINT fk_projects_client
FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE SET NULL
);
Integração com tarefasRegra
ContagemCOUNT(*) WHERE tasks.project = projects.name AND same tenant
Exclusão de projetoBloqueada se task_count > 0
Renomear projetoNão atualiza tasks.project automaticamente
Link públicoprojeto-status.php?token={public_token} lista tarefas pelo nome

5.10 Tabelas de suporte (já existentes no sistema)

TabelaUso no módulo
tenantsDono dos dados
usersCriador, responsável, autor de filhos
permissionsCatálogo module = 'tarefas'
user_permissionsFlags por usuário (allowed 0/1)
logsLog global (module = 'tarefas')
clientsIndireto via projects.client_id

6. Relacionamentos

6.1 Matriz de FKs

DeParaColunaON DELETE
taskstenantstenant_idRESTRICT
tasksusersassigned_toSET NULL
tasksuserscreated_byCASCADE
task_stepstaskstask_idCASCADE
task_stepsuserscreated_byCASCADE
task_documentstaskstask_idCASCADE
task_documentsusersuploaded_byCASCADE
task_activity_flow_stepstaskstask_idCASCADE
task_activity_flow_stepsuserscreated_byCASCADE
task_commentstaskstask_idCASCADE
task_commentsusersuser_idCASCADE
task_historytaskstask_idCASCADE
projectstenantstenant_idRESTRICT
projectsclientsclient_idSET NULL
tenant_modulestenantstenant_idCASCADE

6.2 Relacionamento lógico (sem FK)

projects.name ←→ tasks.project
(mesmo tenant_id)

Recomendação para o novo projeto: migrar para tasks.project_id INT NULL FK → projects(id) ON DELETE SET NULL.

6.3 Cardinalidade

RelaçãoCardinalidade
Tenant → Tasks1:N
User → Tasks (criador)1:N
User → Tasks (responsável)1:N (nullable)
Task → Steps1:N
Task → Documents1:N (máx. 3 na regra de negócio)
Task → Flow steps1:N
Task → Comments1:N
Task → History1:N
Project ↔ TaskN:N lógico via nome (hoje); ideal 1:N via FK

7. Enums e catálogos

7.1 Status da tarefa

ValorLabel listagemLabel KanbanVisível no Kanbancompleted_at
pendingPendentePendenteSimnull
startedIniciadaEm andamentoSimnull
completedConcluídaFeitoSimpreenchido
cancelledCanceladaNãonull

previous_status: ao ir para completed, grava o status anterior; ao sair de completed para outro destino, zera.

7.2 Prioridade

ValorLabelDefault
lowBaixa
mediumMédiaSim
highAlta

7.3 Filtros de vencimento (listagem)

Código APISignificado SQL
overduedue_date < hoje e status ≠ completed
todaydue_date = hoje e status ≠ completed
weekdue_date entre hoje e +7 dias e status ≠ completed
no_duedue_date IS NULL

7.4 Badges de prazo (UI)

CondiçãoBadge
Sem prazoSem prazo
VencidaVencida
HojeHoje
≤ 3 dias úteisCurto prazo
≤ 7 diasNa semana
> 7 diasLonge

7.5 Status de projeto (satélite)

pending | in_progress | completed | paused


8. Permissões e visibilidade

8.1 Catálogo (permissions.module = 'tarefas')

FlagDescriçãoEnforcement
tarefas.readVer páginas/APIs de leituraSim
tarefas.read_ownVer apenas própriasSim (TaskPolicy)
tarefas.read_allVer todas do tenantSim
tarefas.read_filteredReservadaHoje = read_all
tarefas.createCriar (unitária + lote)Sim
tarefas.updateEditarSim
tarefas.deleteExcluirSim
tarefas.assignAtribuir a outro usuárioSim
tarefas.change_statusMudar statusSim + exige role super-admin
tarefas.steps.managePassosSim
tarefas.documents.manageDocumentosSim
tarefas.flow.manageFluxo operacionalSim
tarefas.ai_summary.manageResumo IASim
tarefas.blockBloquearNão implementado

8.2 Defaults por role (módulo ON)

RoleFlags típicas
admin (WL)read, read_own, read_all, create
editorread, read_own, create
super-adminTodas (bypass)

8.3 Matriz de visibilidade (TaskPolicy)

Flags do usuárioResultado SQL
read_all OU read_filteredTodas do tenant_id
read_ownassigned_to = eu OR created_by = eu
Nenhuma1 = 0 (vazio)

Aplicar em: listagem, detalhe, comentários, kanban, KPIs.

Atenção (legado): update/delete/steps/docs não revalidam read_own — só tenant_id + flag de mutação. No novo projeto, recomenda-se reaplicar a política também nas mutações.

8.4 Atribuição

CondiçãoCreateUpdate
Sem tarefas.assignassigned_to = Auth::id()Mantém anterior
Com tarefas.assignUsuário ativo do mesmo tenantIdem; inválido → 422

9. Regras de negócio

9.1 Título

  • Obrigatório
  • Mínimo 3 caracteres
  • Bulk: títulos < 3 são ignorados (sem erro)

9.2 Data de entrega (due_date)

RegraValor
FormatoY-m-d
Fins de semanaProibidos (sáb/dom)
Mínimo3 dias úteis a partir de hoje
Máximo+90 dias corridos
Bulk createSempre null

9.3 Status e conclusão

EventoEfeito
Status → completedcompleted_at = NOW(), grava previous_status
Status → outro (via change-status)previous_status = null
Toggle Kanban (concluir)completed ← status atual
Toggle Kanban (reabrir)volta para previous_status ou pending

9.4 Bulk create

CampoValor fixo
EntradaString com títulos separados por ;
statuspending
prioritymedium
assigned_tocriador
due_date / projectnull

9.5 Documentos

LimiteValor
Máx. por tarefa3
Tamanho10 MB
Extensõespdf, doc, docx, xls, xlsx, png, jpg, jpeg, txt, mp4, mov, avi, webm

9.6 Passos e fluxo

EntidadeTítulo mín.Ordem
Passo2Sem ordenação formal
Fluxo2sort_order = MAX + 1

9.7 Comentários

  • Mínimo 2 caracteres
  • Exige tarefas.read + visibilidade na tarefa
  • Detalhe lista últimas 50

9.8 Kanban

RegraValor
Colunaspending, started, completed
CanceladasExcluídas
Limite200
Drag-and-dropNão
Change statusFlag change_status e role super-admin

9.9 IA

ItemDetalhe
Pré-requisitoFlag + OPENAI_API_KEY
EntradaMetadados da tarefa + anexos
ÁudioTranscrição (mp4, webm, m4a, mp3, wav, ogg)
PDF/imagemAnálise
TXTAté 8000 chars
SaídaResumo PT (objetivo, pontos, pendências, próximos passos)
Persistênciaai_summary, ai_transcription, ai_summary_generated_at

9.10 Invariantes obrigatórios

  1. Toda tarefa tem tenant_id.
  2. Mutações usam id + tenant_id.
  3. Filhos CASCADE com a tarefa.
  4. Módulo OFF → 403 + flags negadas.
  5. Tenant plataforma sempre com módulo ON.
  6. Sem FK com leads/clientes.
  7. Exclusão de projeto bloqueada se houver tarefas com o mesmo nome.

10. Telas e capacidades UX

10.1 Inventário de telas

TelaArquivo origemGateFunção
Listagemtarefas.phpmódulo + tarefas.readCRUD + detalhe (leitura) + IA
Kanbankanban.phpmódulo + tarefas.readBoard + detalhe editável + status (SA)
Dashboard Operaçãodashboard/_operacao.phpmódulo ONKPIs / gráficos / últimas
Projetosprojetos.phpsuper-adminCRUD projetos + link público
Status públicoprojeto-status.phptoken públicoAcompanhamento externo

10.2 Menu

Seção Operação:

ItemVisível se
Dashboard → aba OperaçãohasTasksModule
Tarefasmódulo + tarefas.read
Kanbanmódulo + tarefas.read

Busca global do header → tarefas.php?search=....

10.3 Listagem (tarefas.php)

CapacidadeDetalhe
Filtrossearch, status, due
Paginaçãopage, per_page (5–50, default 10)
LayoutTabela desktop + cards mobile
Ordenaçãodue_date ASC (com prazo primeiro), depois created_at DESC
Criar únicaFormulário completo
Criar loteTítulos separados por ;
DetalheRead-only em passos/docs/fluxo; IA + comentários + histórico
Preview docsImagem, vídeo, PDF, link

10.4 Kanban (kanban.php)

CapacidadeDetalhe
ColunasPendente / Em andamento / Feito
BuscaTítulo/descrição
MobileTabs + scroll snap
AtividadesModal com toggle concluir/reabrir (super-admin)
DetalhePassos/docs/fluxo editáveis; sem IA

10.5 Dashboard Operação

ElementoConteúdo
KPIsConcluídas, Pendentes, Iniciadas, Canceladas
GráficosDonut por status + barras de volume
ListaÚltimas tarefas (respeitando TaskPolicy)

10.6 Página pública do projeto

ElementoDetalhe
AuthNenhuma (token)
ConteúdoProgresso + lista de tarefas (sem canceladas)
DetalhePassos, fluxo, histórico, comentários, docs (metadados)
BrandingIdentidade do tenant

11. Contrato de APIs

11.1 Guard comum

Todas as rotas de api/tarefas/**:

  1. Autenticação
  2. Módulo tasks ON
  3. Tenant::requireId()
  4. Flag específica + (quando leitura) TaskPolicy

11.2 CRUD e operações

MétodoEndpointPermissãoFunção
GET/api/tarefastarefas.readListagem
POST/api/tarefastarefas.createCriar
POST/api/tarefas/updatetarefas.updateAtualizar
POST/api/tarefas/deletetarefas.deleteExcluir
POST/api/tarefas/bulk-createtarefas.createLote
POST/api/tarefas/change-statuschange_status + super-adminStatus
GET/api/kanbantarefas.readBoard

GET /api/tarefas — query

ParamTipoDefaultNotas
pageint1≥ 1
per_pageint105–50
searchstringtitle/description LIKE
statusenumpending/started/completed/cancelled
dueenumoverdue/today/week/no_due

POST /api/tarefas — body

CampoObrigatórioNotas
titleSim≥ 3
descriptionNão
projectNãostring nome
statusNãodefault pending
priorityNãodefault medium
due_dateNãoregras de janela
assigned_toNãosó com assign

POST /api/tarefas/bulk-create — body

{ "items": "Tarefa A; Tarefa B; Tarefa C" }

POST /api/tarefas/change-status — body

{ "id": 123, "status": "completed" }

11.3 Detalhes

EndpointPermissãoBody/QueryFunção
GET/POST detalhes/showread + visibilityidPayload completo + can_manage_*
detalhes/step-createsteps.managetask_id, titleNovo passo
detalhes/step-togglesteps.manageid, is_doneToggle
detalhes/document-uploaddocuments.managemultipart task_id, documentUpload
detalhes/flow-step-createflow.managetask_id, titleNova etapa
detalhes/flow-step-deleteflow.manageidRemover etapa
detalhes/comment-createread + visibilitytask_id, commentComentário
detalhes/ai-summaryai_summary.managetask_idGerar resumo

11.4 Payload sugerido do detalhe

{
"task": { "...campos de tasks...", "assigned_name": "..." },
"steps": [],
"documents": [],
"flow_steps": [],
"comments": [],
"history": [],
"can_manage_steps": true,
"can_manage_documents": true,
"can_manage_flow": true,
"can_manage_ai_summary": false
}

11.5 Meta da listagem

{
"can_assign": true,
"assignable_users": [{ "id": 1, "name": "..." }],
"current_user_id": 1,
"pagination": { "page": 1, "per_page": 10, "total": 42 }
}

11.6 Dashboard / gestão

EndpointGateFunção
GET /api/dashboard/kpismódulo + TaskPolicyContagens + últimas
GET /api/gestao/kpisplatform adminKPIs cross-tenant

11.7 Projetos públicos

EndpointAuthFunção
GET /api/projetos/public/show?token=PúblicoProjeto + tarefas
GET /api/projetos/public/task?token=&task_id=PúblicoDetalhe da tarefa

12. Armazenamento de arquivos

ItemValor
Diretóriopublic/uploads/task-documents/
Nome físicotask-{taskId}-{random}.{ext}
Metadadosoriginal_name, file_name, file_path, mime_type, file_size
ExclusãoCASCADE no DB; garantir limpeza física no novo projeto

13. Auditoria e logs

13.1 Histórico da tarefa (task_history.action)

ActionQuando
created_taskCreate / bulk item
updated_taskUpdate
changed_task_statusChange status
created_task_stepNovo passo
updated_task_stepToggle passo
uploaded_task_documentUpload
created_task_activity_flow_stepNova etapa fluxo
deleted_task_activity_flow_stepRemove etapa fluxo
created_task_commentComentário

13.2 Log global (logs.module = 'tarefas')

ActionEndpoint
created_taskcreate
bulk_created_tasksbulk
updated_taskupdate
deleted_taskdelete
changed_task_statuschange-status
created_task_step / updated_task_stepsteps
uploaded_task_documentupload
created_task_activity_flow_step / deleted_task_activity_flow_stepflow
generated_task_ai_summaryIA

14. Integrações

IntegraçãoComo
DashboardAba Operação + KPIs
Gestão da plataformaTotais cross-tenant
ProjetosContagem, bloqueio exclusão, link público
PermissõesGrupo do módulo tarefas
White labelToggle tasks + seed admin
WhatsAppScript diário: pendentes com vencimento ≤ 3 dias úteis
OpenAIResumo de tarefa
NavbarBusca → listagem
Leads/ComercialSem integração estrutural

15. Fluxos principais

15.1 Navegação

flowchart LR
subgraph Operacao
T[Listagem]
K[Kanban]
D[Dashboard]
end

T --> CRUD[Criar / Editar / Excluir]
T --> DetL[Detalhe leitura + IA + comentarios]
K --> Board[Board por status]
Board --> DetK[Detalhe editavel]
Board --> SA[Toggle status super-admin]
D --> KPI[KPIs]

P[Projetos] -.->|nome| T
P --> Pub[Link publico]

15.2 Ciclo de status

stateDiagram-v2
[*] --> pending
pending --> started
pending --> completed
pending --> cancelled
started --> completed
started --> cancelled
started --> pending
completed --> pending: reabrir via previous_status
completed --> started: reabrir
cancelled --> pending
cancelled --> started

15.3 Três conceitos no detalhe

flowchart TB
Task[Tarefa]
Timeline[Timeline UI derivada do status]
Steps[Passos / checklist task_steps]
Flow[Fluxo operacional task_activity_flow_steps]
Docs[Documentos task_documents]
Comments[Comentarios]
History[Historico]

Task --> Timeline
Task --> Steps
Task --> Flow
Task --> Docs
Task --> Comments
Task --> History

16. Sugestões para reimplementação

Ao refazer em outro projeto, recomenda-se:

TemaMelhoria
ProjetoUsar project_id FK em vez de string
KanbanDrag-and-drop com optimistic UI
DetalheUnificar capacidades (IA + edição) numa única tela/modal
VisibilidadeReaplicar read_own também em mutações
read_filteredDefinir regra real ou remover a flag
blockImplementar ou remover
ArquivosApagar do disco ao deletar registro/tarefa
Rename projetoPropagar ou bloquear rename com tarefas
Change-statusDecidir se é só admin/SA ou qualquer um com flag
APIREST consistente (PATCH/DELETE) + paginação cursor se escala

16.1 Stack mínima sugerida (independente de linguagem)

  • Auth + tenant context
  • Tabela de módulos por tenant
  • RBAC por flags
  • Policy de visibilidade
  • Storage de arquivos
  • Job/script opcional de lembretes
  • Provider de IA opcional (feature flag)

16.2 Ordem de implementação sugerida

  1. Schema + migrations (tasks + filhos + tenant_modules)
  2. Permissions seed
  3. CRUD + TaskPolicy
  4. Listagem + filtros + paginação
  5. Detalhe (steps → docs → flow → comments → history)
  6. Kanban
  7. Dashboard KPIs
  8. Bulk create
  9. Projetos + link público (se necessário)
  10. IA
  11. Notificações (WhatsApp/e-mail)

17. Critérios de aceitação

  • Módulo OFF: menu some, APIs 403, flags tarefas.* negadas
  • Módulo ON: tarefas.read acessa listagem e kanban
  • read_own restringe listagem/detalhe/KPIs
  • Create valida título (≥3) e due_date (dias úteis + janela)
  • Sem assign, responsável = criador
  • Bulk gera só títulos válidos (pending/medium/criador)
  • Comentários respeitam visibilidade
  • Steps/docs/fluxo exigem flags *.manage
  • Upload: máx. 3 arquivos, 10 MB, extensões permitidas
  • IA exige flag + chave e persiste ai_*
  • Kanban oculta canceladas; change-status só para perfil autorizado
  • Excluir projeto com tarefas vinculadas é bloqueado
  • Link público mostra progresso sem login
  • Excluir tarefa remove filhos (CASCADE)
  • Dashboard reflete KPIs coerentes com a visibilidade

Apêndice A — Referência no Organiza (origem)

ÁreaCaminhos
Páginaspublic/tarefas.php, public/kanban.php, public/projetos.php, public/projeto-status.php, public/dashboard/_operacao.php
APIsapi/tarefas/**, api/kanban/index.php
Coreapp/Core/TaskPolicy.php, TaskHistory.php, ProjectPublicLink.php
Schemadatabase/schema.sql (blocos tasks*, projects, tenant_modules)
Regras.cursor/rules/tarefas-negocio.mdc

Apêndice B — Checklist de portabilidade

Copiar/adaptar nesta ordem:

  1. DDL das 6 tabelas de tarefa + índice/tenant_modules
  2. Seed das 14 permissions
  3. Policy de leitura (own/all)
  4. Validador de due_date (dias úteis)
  5. Endpoints CRUD + detalhes
  6. UI listagem + kanban + detalhe
  7. Storage de documentos
  8. (Opcional) IA, WhatsApp, projetos públicos