Fase 24: Saúde Territorial e Monitoramento
Duração: 5 semanas (35 dias úteis)
Prioridade: 🟡 ALTA (Soberania territorial e autonomia comunitária)
Depende de: Fase 9 (Perfil de Usuário)
Integra com: Fase 42 (Gamificação) - pode ser desenvolvido em paralelo
Estimativa Total: 200 horas
Status: ⏳ Pendente
Nota: Renumerada de Fase 18 para Fase 24 (Onda 5: Conformidade e Soberania). Fase 18 agora é Hospedagem Territorial.
Trilha TI (2026-07): alertas enriquecidos, confirmação comunitária, mutirões a partir de sinal e memória territorial ganham implementação via TI-3…TI-6 (World Monitor + revisão humana). Observações/sensores locais desta fase complementam (não substituem) sinais externos. Ver REALINHAMENTO_INTELIGENCIA_TERRITORIAL · TI3–TI6.
Corpos d'água (2026-08): rios, córregos, nascentes e fontes são entidades curáveis do território (não campos de
Territory). Fundação documentada em CORPOS_DAGUA_TERRITORIO; implementação canônica na tarefa 24.0 abaixo. Spec draft:water-bodies-curation.
🎯 Objetivo
Implementar sistema completo de saúde territorial e monitoramento que:
- Permite comunidades cadastrarem e curarem corpos d'água (rios, nascentes, fontes) como entidades do território
- Permite comunidades monitorarem a saúde do seu território (água, ar, solo, biodiversidade, resíduos)
- Facilita observações colaborativas de saúde vinculadas a esses recursos hídricos
- Integra sensores físicos para monitoramento automatizado
- Calcula indicadores de saúde territorial
- Organiza ações territoriais (mutirões, plantio, coleta, manutenção de mata ciliar / limpeza de rio)
- Gamifica atividades territoriais (integração com Fase 42)
- Gera moeda territorial por atividades (integração com Fase 22)
Princípios:
- ✅ Colaboração Comunitária: Observações e ações são comunitárias
- ✅ Transparência: Dados de saúde são públicos (ou para moradores)
- ✅ Ação Local: Foco em ações que melhoram o território
- ✅ Cuidado da água: o rio/nascente é entidade viva do mapa comunitário, não abstração
- ✅ Territory neutro: lógica social e curadoria ficam fora da entidade Territory
- ✅ Gamificação Harmoniosa: Atividades geram contribuições e moeda (Fase 42)
- ✅ Autonomia: Comunidades decidem o que monitorar e como agir
📋 Contexto e Requisitos
Estado Atual
- ✅ MER prevê estrutura completa (
HEALTH_OBSERVATION,TERRITORY_ACTION,SENSOR_DEVICE, etc.) - ✅
TerritoryAsset/MapEntitypermitem recursos naturais genéricos (ex.: nascente); sem tipagem hídrica rica nem geometria de rio - ✅
HealthServicebásico (apenas alertas simples) - ✅
HealthAlertdomain model básico - ❌ Não existe entidade de domínio rica para rios / cursos d'água (
RIVER/WATERCOURSE_DETAILS) - ❌ Não existe sistema completo de observações de saúde
- ❌ Não existe sistema de sensores
- ❌ Não existe sistema de indicadores
- ❌ Não existe sistema de ações territoriais
- ❌ Não existe gamificação de atividades territoriais
Requisitos Funcionais
0. Corpos d'água curáveis (fundação)
- ✅ Cadastro de rio, córrego, nascente, cachoeira, poço, ponto de água potável como NaturalAsset (ou evolução tipada de TerritoryAsset)
- ✅ Geometria: ponto (fonte/nascente) ou polilinha (curso do rio)
- ✅ Curadoria: sugestão comunitária → validação por Curator → confirmações
- ✅ Sensibilidade/acesso para nascentes e captações vulneráveis
- ✅ Vínculo a posts, pins de mapa, observações
WATERe ações de manutenção - ✅ Nunca vendável; nunca embutido em
Territory - 📄 Detalhes: CORPOS_DAGUA_TERRITORIO
1. Sistema de Observações de Saúde
- ✅ Criar observação de saúde (água, ar, solo, biodiversidade, resíduos, segurança, mobilidade, bem-estar)
- ✅ Georreferenciamento (localização precisa)
- ✅ Severidade: INFO, WARNING, URGENT
- ✅ Visibilidade: PUBLIC, RESIDENT_ONLY
- ✅ Status: OPEN, UNDER_REVIEW, CONFIRMED, RESOLVED, REJECTED
- ✅ Confirmações colaborativas (outros usuários podem confirmar)
- ✅ Relacionamento com recursos naturais (
NATURAL_ASSET) - ✅ Gamificação: Observação confirmada gera contribuição (Fase 42)
2. Sistema de Sensores
- ✅ Registrar sensores físicos (pluviômetro, qualidade do ar, nível de água, etc.)
- ✅ Tipos: RAIN_GAUGE, WATER_LEVEL, AIR_QUALITY, WATER_QUALITY, WEATHER
- ✅ Status: ACTIVE, MAINTENANCE, RETIRED
- ✅ Leituras automáticas (via API externa ou manual)
- ✅ Relacionamento com métricas de saúde
- ✅ Gamificação: Leitura confirmada gera contribuição (Fase 42)
3. Indicadores de Saúde Territorial
- ✅ Calcular indicadores agregados (diário, semanal, mensal)
- ✅ Métodos: AVG, MAX, INDEX_FORMULA
- ✅ Visualização de tendências
- ✅ Alertas automáticos quando indicadores pioram
- ✅ Dashboard de saúde territorial
4. Ações Territoriais
- ✅ Criar ação territorial (mutirão, manutenção, educação, restauração, monitoramento)
- ✅ Organizar ação (data, hora, localização)
- ✅ Participação de usuários
- ✅ Status: PLANNED, IN_PROGRESS, DONE, CANCELLED
- ✅ Relacionamento com observações (ação responde a observação)
- ✅ Gamificação: Participação gera contribuição (Fase 42)
- ✅ Moeda: Participação pode gerar moeda territorial (Fase 22)
5. Atividades Específicas
- ✅ Coleta de Resíduos: Reportar coleta (tipo, volume, localização)
- ✅ Plantio: Reportar plantio (espécie, quantidade, localização)
- ✅ Manutenção de Recursos Naturais: Reportar manutenção (tipo, recurso)
- ✅ Gamificação: Cada atividade gera contribuição e pontos (Fase 42)
- ✅ Moeda: Cada atividade pode gerar moeda territorial (Fase 22)
📋 Tarefas Detalhadas
Semana 0–1: Fundação hídrica (antes das observações)
24.0 Cadastro curável de corpos d'água (NaturalAsset hídrico)
Estimativa: 32 horas (4 dias)
Status: 🟡 Em andamento (WA-N1 / 24.0a — ponto)
Spec: water-bodies-curation · CORPOS_DAGUA_TERRITORIO
Tarefas:
- Estender MER/
NaturalAssetcom tipos hídricos de ponto (SPRING,WATERFALL,POTABLE_WATER;WELLemwater_type)-
RIVER,STREAM(+ WATERCOURSE_DETAILS) — 24.0b
-
- Criar
WATERCOURSE_DETAILS(LineString GeoJSON ≤500 vértices, WGS84, intersecta território; regime; uso; notas) - Alinhar
WATER_POINT_DETAILSmínimo (lat/lng, water_type WELL|TAP, notas/teste) — sensibilidade deferida - Fluxo de curadoria NaturalAsset:
PENDING→PUBLISHED(API publish Curator)- TerritoryAsset ponte: alinhar vocabulário documental PENDING/VALIDATED
- WorkItem de curadoria (reusar padrão AssetCuration)
- Autorização de leitura para
HIGH/RESTRICTEDem list/get/mapa/pins (server-side) - API: criar/listar/obter/publish por
territoryId(paginação) — bbox deferido - Referência de conteúdo:
naturalAssetIdem Post/HealthObservation (mesmo territoryId) - Mapa/Flutter via BFF: pin e filtro canônico NaturalAsset (ponte WA-E2/E4 permanece)
- Invariante: Territory sem campos hídricos; NaturalAsset nunca marketplace (AC-WA-6)
- Ponte opcional: migrar/alias de TerritoryAssets
naturalexistentes (nascentes) - Testes domínio + API (AC-WA-1/2 ponto + AC-WA-6); sensibilidade/LineString pendentes (AC-WA-3…5)
- Documentação: CHANGELOG / STATUS / CORPOS / spec (AC-WA-1/2/6 covered no escopo ponto)
Arquivos previstos (orientação — ajustar à Clean Architecture dos módulos Assets/Map/Health):
- Domínio NaturalAsset / WatercourseDetails / WaterPointDetails (módulo Assets ou Health compartilhado)
- Application services + repositórios + controllers
- Contratos BFF + pins Flutter (
MAPA_PINS)
Critérios de Sucesso:
- ✅ Comunidade cadastra e cura ponto hídrico (nascente/cachoeira/água potável) no território (WA-N1)
- ⏳ Rio/córrego (LineString), mapa canônico NaturalAsset, sensibilidade HIGH/RESTRICTED (24.0b+)
- ✅ Pronto para evoluir a
RelatedNaturalAssetId/naturalAssetIdnas observações e posts (24.1+) - ✅ Spec
water-bodies-curationAC-WA-1/2/6 no escopo ponto; AC-WA-3…5 rastreados como pending - ✅ Testes passando
Semana 1-2: Modelo de Domínio e Observações de Saúde
24.1 Modelo de Domínio - Saúde Territorial
Estimativa: 24 horas (3 dias)
Status: ❌ Não implementado
Tarefas:
- Criar enum
HealthDomain:-
WATER(água) -
AIR(ar) -
SOIL(solo) -
BIODIVERSITY(biodiversidade) -
WASTE(resíduos) -
SAFETY(segurança) -
MOBILITY(mobilidade) -
WELLBEING(bem-estar)
-
- Criar enum
HealthSeverity:-
INFO(informativo) -
WARNING(aviso) -
URGENT(urgente)
-
- Criar enum
HealthObservationStatus:-
OPEN(aberta) -
UNDER_REVIEW(em revisão) -
CONFIRMED(confirmada) -
RESOLVED(resolvida) -
REJECTED(rejeitada)
-
- Criar modelo
HealthDomain:-
Id,Name,Description,CreatedAtUtc
-
- Criar modelo
HealthMetric:-
Id,DomainId,Key(ex: "water.turbidity_ntu") -
Name,Unit(NTU, PPM, UG_M3, MM, CM, INDEX) -
ValueType(DECIMAL, INTEGER, BOOLEAN, TEXT, INDEX) -
Description,CreatedAtUtc
-
- Criar modelo
HealthObservation:-
Id,TerritoryId,DomainId,MetricId?(nullable) -
ReporterUserId?(nullable, pode ser anônimo) -
RelatedNaturalAssetId?(nullable) -
Severity(HealthSeverity) -
Visibility(PUBLIC, RESIDENT_ONLY) -
LocationLat,LocationLng -
Description(text) -
Status(HealthObservationStatus) -
ObservedAt,CreatedAtUtc,UpdatedAtUtc
-
- Criar modelo
HealthObservationConfirmation:-
Id,ObservationId,UserId -
Action(CONFIRM, DISCONFIRM, ADD_CONTEXT, REPORT) -
Note,CreatedAtUtc
-
- Criar repositórios
- Criar migrations
Arquivos a Criar:
backend/Arah.Domain/Health/HealthDomain.csbackend/Arah.Domain/Health/HealthSeverity.csbackend/Arah.Domain/Health/HealthObservationStatus.csbackend/Arah.Domain/Health/HealthMetric.csbackend/Arah.Domain/Health/HealthObservation.csbackend/Arah.Domain/Health/HealthObservationConfirmation.csbackend/Arah.Application/Interfaces/IHealthDomainRepository.csbackend/Arah.Application/Interfaces/IHealthMetricRepository.csbackend/Arah.Application/Interfaces/IHealthObservationRepository.csbackend/Arah.Application/Interfaces/IHealthObservationConfirmationRepository.csbackend/Arah.Infrastructure/Postgres/PostgresHealthDomainRepository.csbackend/Arah.Infrastructure/Postgres/PostgresHealthMetricRepository.csbackend/Arah.Infrastructure/Postgres/PostgresHealthObservationRepository.csbackend/Arah.Infrastructure/Postgres/PostgresHealthObservationConfirmationRepository.cs
Critérios de Sucesso:
- ✅ Modelos criados
- ✅ Repositórios implementados
- ✅ Migrations criadas
- ✅ Testes de repositório passando
24.2 Sistema de Observações de Saúde
Estimativa: 32 horas (4 dias)
Status: ❌ Não implementado
Tarefas:
- Criar
HealthObservationService:-
CreateObservationAsync(Guid territoryId, Guid? userId, HealthDomain domain, ...)→ criar observação -
ListObservationsAsync(Guid territoryId, HealthDomain? domain, ...)→ listar observações -
GetObservationAsync(Guid observationId)→ obter observação -
ConfirmObservationAsync(Guid observationId, Guid userId, ...)→ confirmar observação -
UpdateStatusAsync(Guid observationId, HealthObservationStatus status)→ atualizar status
-
- Integrar com
ContributionService(Fase 42):- Ao criar observação: registrar contribuição
HealthObservation - Ao confirmar observação: registrar contribuição (pontos menores)
- Ao criar observação: registrar contribuição
- Criar
HealthObservationController:-
POST /api/v1/health/observations→ criar observação -
GET /api/v1/health/observations→ listar observações -
GET /api/v1/health/observations/{id}→ obter observação -
POST /api/v1/health/observations/{id}/confirm→ confirmar observação -
PATCH /api/v1/health/observations/{id}/status→ atualizar status (curadores)
-
- Feature flags:
HealthObservationsEnabled,HealthObservationsPublic - Validações
- Testes
Arquivos a Criar:
backend/Arah.Application/Services/HealthObservationService.csbackend/Arah.Api/Controllers/HealthObservationController.csbackend/Arah.Api/Contracts/Health/CreateHealthObservationRequest.csbackend/Arah.Api/Contracts/Health/HealthObservationResponse.csbackend/Arah.Api/Validators/CreateHealthObservationRequestValidator.cs
Critérios de Sucesso:
- ✅ Serviço implementado
- ✅ API funcionando
- ✅ Integração com gamificação funcionando
- ✅ Testes passando
Semana 2-3: Sensores e Indicadores
24.3 Sistema de Sensores
Estimativa: 32 horas (4 dias)
Status: ❌ Não implementado
Tarefas:
- Criar enum
SensorDeviceType:-
RAIN_GAUGE(pluviômetro) -
WATER_LEVEL(nível de água) -
AIR_QUALITY(qualidade do ar) -
WATER_QUALITY(qualidade da água) -
WEATHER(clima)
-
- Criar enum
SensorDeviceStatus:-
ACTIVE(ativo) -
MAINTENANCE(manutenção) -
RETIRED(desativado)
-
- Criar modelo
SensorDevice:-
Id,TerritoryId,Name -
DeviceType(SensorDeviceType) -
Status(SensorDeviceStatus) -
LocationLat,LocationLng -
ExternalRef?(nullable, referência externa) -
InstalledAt,CreatedAtUtc
-
- Criar modelo
SensorReading:-
Id,DeviceId,MetricId -
ValueDecimal?,ValueInt?,ValueBool?,ValueText? -
MeasuredAt,CreatedAtUtc
-
- Criar
SensorDeviceService:-
RegisterDeviceAsync(...)→ registrar sensor -
RecordReadingAsync(...)→ registrar leitura -
ListDevicesAsync(Guid territoryId)→ listar sensores -
ListReadingsAsync(Guid deviceId, ...)→ listar leituras
-
- Integrar com
ContributionService(Fase 42):- Leitura confirmada gera contribuição
SensorReading
- Leitura confirmada gera contribuição
- Criar
SensorDeviceController:-
POST /api/v1/sensors/devices→ registrar sensor -
GET /api/v1/sensors/devices→ listar sensores -
POST /api/v1/sensors/devices/{id}/readings→ registrar leitura -
GET /api/v1/sensors/devices/{id}/readings→ listar leituras
-
- Feature flags:
SensorsEnabled,SensorReadingsPublic - Testes
Arquivos a Criar:
backend/Arah.Domain/Health/SensorDevice.csbackend/Arah.Domain/Health/SensorDeviceType.csbackend/Arah.Domain/Health/SensorDeviceStatus.csbackend/Arah.Domain/Health/SensorReading.csbackend/Arah.Application/Interfaces/ISensorDeviceRepository.csbackend/Arah.Application/Interfaces/ISensorReadingRepository.csbackend/Arah.Application/Services/SensorDeviceService.csbackend/Arah.Api/Controllers/SensorDeviceController.cs
Critérios de Sucesso:
- ✅ Sistema de sensores funcionando
- ✅ Leituras sendo registradas
- ✅ Integração com gamificação funcionando
- ✅ Testes passando
24.4 Sistema de Indicadores de Saúde
Estimativa: 24 horas (3 dias)
Status: ❌ Não implementado
Tarefas:
- Criar enum
IndicatorPeriod:-
DAILY(diário) -
WEEKLY(semanal) -
MONTHLY(mensal)
-
- Criar enum
CalculationMethod:-
AVG(média) -
MAX(máximo) -
INDEX_FORMULA(fórmula de índice)
-
- Criar modelo
TerritoryHealthIndicator:-
Id,TerritoryId,MetricId -
Period(IndicatorPeriod) -
PeriodStart,PeriodEnd -
ValueDecimal -
CalculationMethod(CalculationMethod) -
CreatedAtUtc
-
- Criar
HealthIndicatorService:-
CalculateIndicatorsAsync(Guid territoryId, IndicatorPeriod period)→ calcular indicadores -
GetIndicatorsAsync(Guid territoryId, ...)→ obter indicadores -
GetIndicatorTrendAsync(Guid territoryId, Guid metricId, ...)→ obter tendência
-
- Background job para calcular indicadores periodicamente
- Sistema de alertas quando indicadores pioram
- Criar
HealthIndicatorController:-
GET /api/v1/health/indicators→ listar indicadores -
GET /api/v1/health/indicators/{metricId}/trend→ obter tendência
-
- Feature flags:
HealthIndicatorsEnabled,HealthIndicatorsPublic - Testes
Arquivos a Criar:
backend/Arah.Domain/Health/TerritoryHealthIndicator.csbackend/Arah.Domain/Health/IndicatorPeriod.csbackend/Arah.Domain/Health/CalculationMethod.csbackend/Arah.Application/Interfaces/ITerritoryHealthIndicatorRepository.csbackend/Arah.Application/Services/HealthIndicatorService.csbackend/Arah.Api/Controllers/HealthIndicatorController.cs
Critérios de Sucesso:
- ✅ Indicadores sendo calculados
- ✅ Tendências disponíveis
- ✅ Alertas funcionando
- ✅ Testes passando
Semana 3-4: Ações Territoriais
24.5 Sistema de Ações Territoriais
Estimativa: 40 horas (5 dias)
Status: ❌ Não implementado
Tarefas:
- Criar enum
TerritoryActionType:-
MUTIRAO(mutirão) -
MAINTENANCE(manutenção) -
EDUCATION(educação) -
RESTORATION(restauração) -
MONITORING(monitoramento)
-
- Criar enum
TerritoryActionStatus:-
PLANNED(planejado) -
IN_PROGRESS(em progresso) -
DONE(concluído) -
CANCELLED(cancelado)
-
- Criar modelo
TerritoryAction:-
Id,TerritoryId,RelatedObservationId?(nullable) -
OrganizerUserId(organizador) -
Type(TerritoryActionType) -
Title,Description(text) -
StartDateTime,EndDateTime -
Visibility(PUBLIC, RESIDENT_ONLY) -
Status(TerritoryActionStatus) -
CreatedAtUtc,UpdatedAtUtc
-
- Criar modelo
TerritoryActionParticipant:-
Id,ActionId,UserId -
JoinedAtUtc,ConfirmedAtUtc?(nullable)
-
- Criar
TerritoryActionService:-
CreateActionAsync(...)→ criar ação -
ListActionsAsync(Guid territoryId, ...)→ listar ações -
JoinActionAsync(Guid actionId, Guid userId)→ participar -
ConfirmParticipationAsync(Guid actionId, Guid userId)→ confirmar participação -
UpdateStatusAsync(Guid actionId, TerritoryActionStatus status)→ atualizar status
-
- Integrar com
ContributionService(Fase 42):- Participação gera contribuição
TerritoryAction - Organizar ação gera mais pontos
- Participação gera contribuição
- Criar
TerritoryActionController:-
POST /api/v1/territory-actions→ criar ação -
GET /api/v1/territory-actions→ listar ações -
POST /api/v1/territory-actions/{id}/join→ participar -
POST /api/v1/territory-actions/{id}/confirm→ confirmar participação -
PATCH /api/v1/territory-actions/{id}/status→ atualizar status
-
- Feature flags:
TerritoryActionsEnabled,TerritoryActionsPublic - Testes
Arquivos a Criar:
backend/Arah.Domain/Health/TerritoryAction.csbackend/Arah.Domain/Health/TerritoryActionType.csbackend/Arah.Domain/Health/TerritoryActionStatus.csbackend/Arah.Domain/Health/TerritoryActionParticipant.csbackend/Arah.Application/Interfaces/ITerritoryActionRepository.csbackend/Arah.Application/Interfaces/ITerritoryActionParticipantRepository.csbackend/Arah.Application/Services/TerritoryActionService.csbackend/Arah.Api/Controllers/TerritoryActionController.cs
Critérios de Sucesso:
- ✅ Sistema de ações funcionando
- ✅ Participação funcionando
- ✅ Integração com gamificação funcionando
- ✅ Testes passando
Semana 4-5: Atividades Específicas e Integração
24.6 Sistema de Coleta de Resíduos
Estimativa: 16 horas (2 dias)
Status: ❌ Não implementado
Tarefas:
- Criar modelo
WasteCollection:-
Id,TerritoryId,UserId -
WasteType(string: ORGANIC, RECYCLABLE, HAZARDOUS, etc.) -
Volume(decimal, em kg ou litros) -
LocationLat,LocationLng -
Description?(nullable) -
CollectedAt,CreatedAtUtc
-
- Criar
WasteCollectionService:-
ReportCollectionAsync(...)→ reportar coleta -
ListCollectionsAsync(Guid territoryId, ...)→ listar coletas
-
- Integrar com
ContributionService(Fase 42):- Coleta gera contribuição
WasteCollection(10-20 pontos)
- Coleta gera contribuição
- Criar
WasteCollectionController:-
POST /api/v1/waste-collections→ reportar coleta -
GET /api/v1/waste-collections→ listar coletas
-
- Feature flags:
WasteCollectionEnabled - Testes
Arquivos a Criar:
backend/Arah.Domain/Health/WasteCollection.csbackend/Arah.Application/Interfaces/IWasteCollectionRepository.csbackend/Arah.Application/Services/WasteCollectionService.csbackend/Arah.Api/Controllers/WasteCollectionController.cs
24.7 Sistema de Plantio
Estimativa: 16 horas (2 dias)
Status: ❌ Não implementado
Tarefas:
- Criar modelo
TreePlanting:-
Id,TerritoryId,UserId -
Species(string, espécie) -
Quantity(int, quantidade) -
LocationLat,LocationLng -
Description?(nullable) -
PlantedAt,CreatedAtUtc
-
- Criar
TreePlantingService:-
ReportPlantingAsync(...)→ reportar plantio -
ListPlantingsAsync(Guid territoryId, ...)→ listar plantios
-
- Integrar com
ContributionService(Fase 42):- Plantio gera contribuição
TreePlanting(15-25 pontos)
- Plantio gera contribuição
- Criar
TreePlantingController:-
POST /api/v1/tree-plantings→ reportar plantio -
GET /api/v1/tree-plantings→ listar plantios
-
- Feature flags:
TreePlantingEnabled - Testes
Arquivos a Criar:
backend/Arah.Domain/Health/TreePlanting.csbackend/Arah.Application/Interfaces/ITreePlantingRepository.csbackend/Arah.Application/Services/TreePlantingService.csbackend/Arah.Api/Controllers/TreePlantingController.cs
24.8 Integração com Gamificação e Moeda
Estimativa: 16 horas (2 dias)
Status: ❌ Não implementado
Tarefas:
- Integrar todos os serviços com
ContributionService(Fase 42):-
HealthObservationService→ contribuição ao criar/confirmar -
SensorDeviceService→ contribuição ao confirmar leitura -
TerritoryActionService→ contribuição ao participar/organizar -
WasteCollectionService→ contribuição ao reportar coleta -
TreePlantingService→ contribuição ao reportar plantio
-
- Preparar integração com
CurrencyMintService(Fase 22):- Estrutura para mint por atividades (será implementado na Fase 22)
- Testes de integração
- Documentação
Critérios de Sucesso:
- ✅ Todas as atividades geram contribuições
- ✅ Pontos sendo calculados corretamente
- ✅ Integração preparada para moeda territorial
- ✅ Testes passando
📊 Resumo da Fase 24
| Tarefa | Estimativa | Status | Prioridade |
|---|---|---|---|
| Corpos d'água curáveis (24.0) | 32h | ❌ Pendente | 🔴 Alta |
| Modelo de Domínio - Saúde | 24h | ❌ Pendente | 🔴 Alta |
| Observações de Saúde | 32h | ❌ Pendente | 🔴 Alta |
| Sistema de Sensores | 32h | ❌ Pendente | 🔴 Alta |
| Indicadores de Saúde | 24h | ❌ Pendente | 🔴 Alta |
| Ações Territoriais | 40h | ❌ Pendente | 🔴 Alta |
| Coleta de Resíduos | 16h | ❌ Pendente | 🟡 Média |
| Plantio | 16h | ❌ Pendente | 🟡 Média |
| Integração Gamificação/Moeda | 16h | ❌ Pendente | 🔴 Alta |
| Total | 232h (~40 dias) |
Nota de esforço: a tarefa 24.0 amplia a fase (~+32h). Duração nominal no índice pode permanecer “35d” até replanejamento formal da onda; o escopo hídrico é obrigatório para o diferencial de cuidado da água.
✅ Critérios de Sucesso da Fase 24
Funcionalidades
- ✅ Corpos d'água (rios, nascentes, fontes) cadastráveis e curáveis no território
- ✅ Sistema completo de observações de saúde funcionando
- ✅ Sistema de sensores funcionando
- ✅ Indicadores de saúde sendo calculados
- ✅ Ações territoriais funcionando
- ✅ Coleta de resíduos e plantio funcionando
- ✅ Integração com gamificação funcionando
- ✅ Integração preparada para moeda territorial
Qualidade
- ✅ Testes com cobertura adequada
- ✅ Documentação completa
- ✅ Feature flags implementados
- ✅ Validações e segurança implementadas
- Considerar Testcontainers + PostgreSQL para testes de integração (observações, sensores, ações, indicadores) com banco real (estratégia na Fase 43; TESTCONTAINERS_POSTGRES_IMPACTO).
Integração
- ✅ Integração com Fase 9 (Perfil de Usuário) funcionando
- ✅ Integração com Fase 42 (Gamificação) funcionando
- ✅ Preparação para Fase 22 (Moeda Territorial)
- ✅ Integração com recursos naturais (MER)
🔗 Dependências
- Fase 9: Perfil de Usuário (para exibir contribuições)
- Fase 42: Gamificação (para gerar contribuições e pontos)
- Fase 22: Moeda Territorial (para gerar moeda por atividades)
📝 Notas de Implementação
Gamificação de Atividades
Pontos por Atividade:
- Observação de saúde: 5-15 pontos (depende da severidade)
- Confirmação de observação: 2-5 pontos
- Leitura de sensor confirmada: 3-10 pontos
- Participação em ação territorial: 20-30 pontos
- Organizar ação territorial: +10 pontos
- Coleta de resíduos: 10-20 pontos (depende do volume/tipo)
- Plantio de árvore: 15-25 pontos (depende do tipo/espécie)
Multiplicadores:
- Alinhamento com interesses do território: +50%
- Qualidade alta (IA): +25%
- Combinado: até 1.875x
Integração com Moeda Territorial (Fase 22)
Preparação:
- Estrutura de dados para mint por atividades
- Políticas de mint configuráveis por território
- Integração será implementada na Fase 22
Privacidade e Visibilidade
- Observações podem ser PUBLIC ou RESIDENT_ONLY
- Sensores podem ter leituras públicas ou privadas
- Ações territoriais podem ser públicas ou apenas para moradores
- Respeitar preferências de privacidade do usuário
Status: ⏳ FASE 24 PENDENTE
Depende de: Fases 9, 42 (Perfil, Gamificação)
Crítico para: Soberania Territorial e Autonomia Comunitária