Feature - Criacao de Agendamento
Introducao ao documento
Describe o fluxo de criacao de agendamento via API publica.
Versionamento
- Versao do documento: 1.0.0
- Ultima atualizacao: 2026-03-17
- Responsavel: GitHub Copilot
Referencial teorico
- HTTP POST
- Validacao de entrada
- Regras de conflito temporal
Visao geral
A feature cria agendamentos vinculando colaborador (employee), cliente (quando aplicavel) e tipo de atendimento.
Atores
- Sistema consumidor da API com API key valida.
- Colaborador (employee) e cliente (client) referenciados por CPF.
- Evidencia: routes/api.php:26
- Evidencia: app/Http/Controllers/AppointmentController.php:133
- Evidencia: app/Http/Controllers/AppointmentController.php:149
Pre-condicoes
- Header Authorization presente e valido.
- employee_id (cpf) deve existir.
- Para tipos individual/group/collective, client_id (cpf) deve existir.
- Evidencia: app/Http/Middleware/ApiKeyMiddleware.php:22
- Evidencia: app/Http/Middleware/ApiKeyMiddleware.php:39
- Evidencia: app/Http/Controllers/AppointmentController.php:147
Fluxo principal
- Recebe POST /api/appointments.
- Valida payload.
- Verifica conflito de horario.
- Persiste appointment.
- Dispara e-mail (exceto tipo block).
- Invalida cache de slots.
- Evidencia: routes/api.php:28
- Evidencia: app/Http/Controllers/AppointmentController.php:161
- Evidencia: app/Http/Controllers/AppointmentController.php:172
- Evidencia: app/Http/Controllers/AppointmentController.php:196
- Evidencia: app/Http/Controllers/AppointmentController.php:198
- Evidencia: app/Http/Controllers/AppointmentController.php:210
Fluxos alternativos
- 404 quando colaborador nao existe.
- 404 quando cliente nao existe (tipos que exigem cliente).
- 409 quando ha sobreposicao de horario.
- 400 para validacao invalida.
- Evidencia: app/Http/Controllers/AppointmentController.php:137
- Evidencia: app/Http/Controllers/AppointmentController.php:153
- Evidencia: app/Http/Controllers/AppointmentController.php:176
- Evidencia: app/Http/Controllers/AppointmentController.php:223
Regras de negocio
- class_id e obrigatorio e aceita numero ou texto alfabetico.
- employee_id entra por CPF e e convertido para id interno.
- Tipos group nao bloqueiam por conflito no checkForConflicts.
- Evidencia: app/Http/Controllers/AppointmentController.php:166
- Evidencia: app/Http/Controllers/AppointmentController.php:133
- Evidencia: app/Http/Controllers/AppointmentController.php:447
Estados possiveis
- Criado (201)
- Rejeitado por validacao (400)
- Nao encontrado (404)
- Conflito (409)
Endpoints envolvidos
- POST /api/appointments (ver ../api/openapi.yaml)
Dados impactados
- appointments
- clients (lookup)
- employees (lookup)
- types (lookup)
- cache (chave de slots)
- Referencia: ../data/model.md
Pendencias
- Comentario de codigo indica pendencia de reativacao de cache no index de appointments.
- Evidencia: app/Http/Controllers/AppointmentController.php:31