REF-501-05: Service Spec
ADR: ADR-501 — Service DeliveryEscopo: Service lifecycle states (project mode), field reference, auto-criação via Entitlement, naming convention
1. Lifecycle States (Project Mode)
Quando lifecycle = project, o Service segue uma state machine com 7 estados:
| Estado | Significado | Transições permitidas |
|---|---|---|
proposal | Serviço proposto, aguardando aprovação | -> approved, cancelled |
approved | Aprovado pelo cliente, aguardando início | -> in_progress, cancelled |
in_progress | Trabalho em andamento | -> on_hold, delivered, cancelled |
on_hold | Temporariamente pausado (bloqueio externo) | -> in_progress, cancelled |
delivered | Entregas concluídas, aguardando aceite cliente | -> closed, in_progress (ajustes solicitados) |
closed | Aceite do cliente recebido, serviço encerrado | Estado terminal |
cancelled | Cancelado | Estado terminal |
Transições de estado registram timestamp e responsável para trilha de auditoria. Quando lifecycle = ongoing, o Service permanece active indefinidamente (sem state machine de projeto).
2. Service Field Reference
| Campo | Tipo | Descrição |
|---|---|---|
service_id | auto-increment | Identificador interno |
entitlement_id | FK | Entitlement pai (classe SVC) — obrigatório |
organization_id | FK | Organization proprietária |
service_type | enum | service, lab, development |
lifecycle | enum | ongoing ou project |
title | string | Nome do projeto/serviço |
description | text | Descrição detalhada |
status | enum | Estados conforme tabela acima (project) ou active (ongoing) |
priority | enum | low, normal, high, urgent |
start_date | date (nullable) | Data de início efetivo |
estimated_end | date (nullable) | Data estimada de conclusão (project mode) |
actual_end | date (nullable) | Data real de conclusão |
contract_id | FK (nullable) | Contract de SLA/jurídico vinculado |
jira_project_key | string (nullable) | Chave do projeto Jira (ex: PROJ) |
assigned_team | string (nullable) | Referência interna de equipe |
metadata | JSON | Extensível para dados adicionais |
3. Auto-Criação via Entitlement
Quando um Entitlement de classe SVC é provisionado (a partir de aceitação de Quote), o sistema cria automaticamente um Service com status proposal. O admin revisa e transiciona para approved quando pronto para início. ServiceRequests são criadas sob o Service conforme necessário.
4. Naming Convention
A classe de orquestração do domínio Service no namespace Middag\Account\Domain\Service\ é nomeada ProjectService (em vez de ServiceService) para evitar colisão com o padrão de sufixo "Service" da convenção DDD usada neste codebase.