3.7 KiB
3.7 KiB
DATA MODEL — Sargasse-Sentry
Principe fondamental
Séparer strictement :
- Observation — ce qui a été détecté (réel)
- Forecast — ce qui est simulé (prédiction)
- Job — traçabilité du pipeline
- Score — agrégat calculé pour un point côtier
- Feedback — retour terrain anonyme
Entité : SargassumObservation
Représente une détection satellite réelle.
| Champ | Type | Notes |
|---|---|---|
id |
UUID | PK |
geometry |
MULTIPOLYGON (SRID 4326) | Polygones détectés |
bbox |
GEOMETRY BOX | Bounding box — requêtes spatiales légères |
detectedAt |
datetime UTC | Immutable |
source |
string | Sentinel-2 / Sentinel-3 |
tileId |
string | Identifiant tuile Sentinel |
cloudCoverage |
float 0–100 | % couverture nuageuse |
confidence |
float 0–1 | Indice de confiance détection |
afaiMean |
float | Valeur AFAI moyenne |
afaiStd |
float | Écart-type AFAI |
coverageArea |
float (km²) | Surface totale détectée |
processingVersion |
string | Version de l'algorithme AFAI utilisé |
createdAt |
datetime |
Index :
GIST (geometry)GIST (bbox)BTREE (detectedAt)BTREE (source)
Entité : SargassumForecast
Projection issue du modèle de dérive.
| Champ | Type | Notes |
|---|---|---|
id |
UUID | PK |
sourceObservation |
FK → SargassumObservation | |
geometry |
MULTIPOLYGON (SRID 4326) | Polygone prédit |
validAt |
datetime UTC | Moment auquel la prédiction est valide |
computedAt |
datetime | Moment du calcul |
modelVersion |
string | Version du modèle de dérive |
timeHorizon |
int (heures) | 6 / 12 / 24 / 48 |
confidence |
float 0–1 | |
driftVectorAvg |
GEOMETRY(POINT, 4326) | Vecteur de dérive moyen (PostGIS natif) |
createdAt |
datetime |
Index :
GIST (geometry)BTREE (validAt)BTREE (timeHorizon)
Entité : DataIngestionJob
Traçabilité du pipeline — robustesse obligatoire.
| Champ | Type | Notes |
|---|---|---|
id |
UUID | PK |
source |
string | Sentinel-2 / Sentinel-3 |
tileId |
string | |
requestedAt |
datetime | |
processedAt |
datetime (nullable) | |
status |
enum | pending / success / failed |
retryCount |
int | |
errorMessage |
string (nullable) |
Entité : CoastalPoint
Points d'intérêt utilisateur.
| Champ | Type | Notes |
|---|---|---|
id |
UUID | PK |
name |
string | |
geometry |
POINT (SRID 4326) | |
type |
enum | beach / port / surf / fishing |
region |
string |
Entité : ImpactScore
Score calculé pour un point côtier à un instant donné.
| Champ | Type | Notes |
|---|---|---|
id |
UUID | PK |
coastalPoint |
FK → CoastalPoint | |
timestamp |
datetime | |
score |
int 0–100 | |
level |
enum | low / medium / high |
distanceToNearestSargassum |
float (km) | |
densityEstimate |
float | |
trend |
enum | increasing / stable / decreasing |
Entité : UserFeedback
Retour terrain anonyme — alimente la boucle d'apprentissage.
| Champ | Type | Notes |
|---|---|---|
id |
UUID | PK |
location |
POINT (SRID 4326) | Localisation signalée |
coastalPoint |
FK → CoastalPoint (nullable) | Si associé à un point connu |
timestamp |
datetime | |
hasSeaweed |
bool | Présence confirmée ou infirmée |
density |
enum (nullable) | low / medium / high |
source |
string | Fingerprint anonyme (IP hachée) — pas de compte |
Schéma des relations
SargassumObservation
└── SargassumForecast (N)
CoastalPoint
└── ImpactScore (N)
└── UserFeedback (N, nullable)
DataIngestionJob (indépendant, audit trail)