dc5a2d89ae
Novo módulo de logística do lab (doc/AGENDA-COLETA-LAB): - protese_coleta: agendamento de coleta (lab busca) / entrega (lab leva), com data/hora, endereço, responsável, status. Ligado à OS. - POST /protese/os/:id/coleta (agendar), GET /protese/lab/agenda (cronológica), POST /protese/coleta/:id/status. 'realizada' MOVE a custódia automaticamente (coleta→laboratorio, entrega→clinica) — fonte única do movimento físico. GET detalhe traz coletas[]. - UI: tela AGENDA (lab-agenda) agrupada por dia com "marcar realizada"; seção Coleta/entrega na aba Monitoramento da OS (clínica e lab). Validado em DEV: agenda coleta → realizada → custódia=laboratorio; lab vê na agenda. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
# Agenda & Coleta do laboratório
|
|
|
|
> Desenho + implementação (24/jun/2026). Gap apontado na auditoria: o lab não tem agenda de
|
|
> produção nem coleta logística (só "próximas entregas" por prazo e custódia de posse).
|
|
|
|
## Conceito
|
|
- **Coleta** = o lab **busca** o trabalho na clínica (trabalho vai p/ o laboratório).
|
|
- **Entrega** = o lab **leva** o trabalho de volta (trabalho volta p/ a clínica).
|
|
- Cada agendamento tem data/hora, endereço, responsável, observação e status
|
|
(`agendada | realizada | cancelada`). Ligado a uma OS.
|
|
- **Integra com a custódia:** ao marcar `realizada`, a custódia muda automaticamente
|
|
(coleta→`laboratorio`, entrega→`clinica`) e entra no histórico da OS. Sem dado duplicado.
|
|
|
|
## Modelo
|
|
```sql
|
|
CREATE TABLE protese_coleta (
|
|
id TEXT PRIMARY KEY,
|
|
os_id TEXT NOT NULL,
|
|
clinica_id TEXT,
|
|
laboratorio_id TEXT,
|
|
protetico_id TEXT,
|
|
tipo TEXT NOT NULL, -- coleta | entrega
|
|
data_hora TIMESTAMPTZ,
|
|
endereco TEXT,
|
|
responsavel TEXT,
|
|
observacao TEXT,
|
|
status TEXT DEFAULT 'agendada', -- agendada | realizada | cancelada
|
|
created_by TEXT,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
```
|
|
|
|
## Endpoints
|
|
- `POST /api/protese/os/:id/coleta` — agenda (clínica ou lab).
|
|
- `GET /api/protese/lab/agenda` — coletas/entregas do lab (cronológica) + próximas entregas por prazo.
|
|
- `POST /api/protese/coleta/:id/status` — `realizada` (move a custódia) | `cancelada`.
|
|
- GET detalhe da OS passa a trazer `coletas[]`.
|
|
|
|
## UI
|
|
- **Lab — tela Agenda** (`lab-agenda`, novo item de menu): linha do tempo de coletas/entregas
|
|
agendadas + entregas previstas (prazo da OS), com ação "marcar realizada".
|
|
- **OS (aba Monitoramento)** — agendar coleta/entrega ao lado da custódia (mesmo contexto físico).
|
|
|
|
## Decisões
|
|
- 1 coleta por OS (MVP). Agrupar várias OS numa rota/motoboy fica como evolução.
|
|
- `realizada` é a fonte única do movimento físico (atualiza custódia) — evita registrar custódia
|
|
e coleta em separado.
|