REF-501-06: Environment Spec
ADR: ADR-501 — Service DeliveryEscopo: Environment types, platform types, lifecycle states, field reference, monitoramento, portal visibility
1. Relação 1:1 com Entitlement
Cada Environment possui exatamente UM Entitlement de classe ENV. A relação é 1:1 e obrigatória. Mesmo cliente com ambientes de produção e homologação recebe dois registros Environment separados, cada um com seu próprio código Entitlement (ex: ENV-2026040001 para prod, ENV-2026040002 para homolog).
2. Environment Types
| Tipo | Descrição |
|---|---|
production | Ambiente de produção do cliente |
staging | Ambiente de homologação/staging |
development | Ambiente de desenvolvimento |
sandbox | Ambiente sandbox para testes e demonstrações |
3. Platform Types
| Plataforma | Descrição |
|---|---|
moodle | Moodle LMS (linha MIDDAG Pro) |
wordpress | WordPress (sites, portais, e-commerce) |
custom | Plataforma custom ou outra tecnologia |
4. Lifecycle States
| Estado | Significado | Transições permitidas |
|---|---|---|
provisioning | Ambiente sendo criado/configurado | -> active |
active | Ambiente operacional | -> maintenance, suspended, decommissioned |
maintenance | Em manutenção programada | -> active |
suspended | Suspenso (pagamento atrasado, ação administrativa) | -> active, decommissioned |
decommissioned | Desativado permanentemente | Estado terminal |
5. Environment Field Reference
| Campo | Tipo | Descrição |
|---|---|---|
environment_id | auto-increment | Identificador interno |
entitlement_id | FK (unique) | Entitlement classe ENV — obrigatório, 1:1 |
organization_id | FK | Organization proprietária |
environment_name | string | Nome descritivo (ex: "Moodle Produção - Cliente A") |
environment_type | enum | production, staging, development, sandbox |
platform | enum | moodle, wordpress, custom |
platform_version | string | Versão (ex: "Moodle 4.3.2", "WordPress 6.7") |
status | enum | Estados conforme tabela acima |
url_primary | string | URL principal (ex: "https://lms.cliente.com.br") |
url_admin | string (nullable) | URL de admin se diferente |
url_staging | string (nullable) | URL de staging |
server_provider | string | Provedor (ex: "AWS", "DigitalOcean") |
server_region | string | Região (ex: "sa-east-1") |
server_ip | string (nullable) | IP do servidor (dado sensível — não expor ao cliente) |
server_specs | JSON | Detalhes de CPU, RAM, storage |
backup_schedule | string | Agendamento (ex: "daily_03am", "weekly_sunday") |
backup_retention_days | int (default 30) | Dias de retenção de backups |
last_backup_at | datetime (nullable) | Atualizado por cron ou webhook |
ssl_expires_at | date (nullable) | Data de expiração do certificado SSL |
dns_provider | string (nullable) | Provedor DNS (ex: "Cloudflare", "Route53") |
contract_id | FK (nullable) | Contract de SLA/hosting vinculado |
notes | text (nullable) | Notas internas (não visíveis ao cliente) |
metadata | JSON | Extensível para dados adicionais |
6. Monitoramento Básico
Environment armazena dados de monitoramento que disparam alertas automáticos:
| Dado | Mecanismo |
|---|---|
last_backup_at | Atualizado por cron ou webhook. Alerta se backup exceder janela. |
ssl_expires_at | Alertas automáticos 30, 15, e 7 dias antes da expiração do SSL. |
platform_version | Tracking para alertas de atualização de plataforma. |
Monitoramento avançado (uptime, tempo de resposta) está fora de escopo — tratado por ferramentas externas (ex: UptimeRobot, StatusCake). Environment apenas armazena URL de referência de monitoramento se aplicável.
7. Portal Visibility
O cliente visualiza: nome, tipo, plataforma, versão, status, URLs (primary, staging), data do último backup, status SSL, ServiceRequests vinculadas, e botão "Solicitar Serviço" para criar SR standalone.
O cliente NÃO visualiza: IP do servidor, detalhes do provedor, notas internas, specs do servidor.