Kilometrage : niveau de fin saisi par le proprietaire (table niveau_fin), niveaux VW du 10/10

This commit is contained in:
Tallagrand Thierry
2026-10-10 14:10:01 +02:00
parent 6231e2ab06
commit b9bdb44f4c
3 changed files with 37 additions and 3 deletions

View File

@@ -93,6 +93,17 @@ export async function creerSchemaKm(client) {
// de la borne n'etait pas encore historise, la reference peut manquer.
await client.query('ALTER TABLE niveau_saisi ALTER COLUMN ref_kwh DROP NOT NULL');
await client.query('ALTER TABLE niveau_saisi ADD COLUMN IF NOT EXISTS source text');
// NIVEAU A LA FIN (10/10/2026) : le proprietaire donne l'autonomie au
// debranchement (VW 22 km au branchement, 39 km au debranchement, pour 42 km
// pleine). Sans releve kilometrique, ce niveau n'avait nulle part ou aller ;
// il prime sur le « plein » du controleur, peu fiable pour la VW (§11.5).
await client.query(`
CREATE TABLE IF NOT EXISTS niveau_fin (
saisi_a timestamptz PRIMARY KEY,
niveau_pct integer NOT NULL,
source text,
pose_a timestamptz NOT NULL DEFAULT now()
)`);
await client.query(SQL_VUE_INTERVALLES);
await client.query(SQL_VUE_CAPACITE);
}
@@ -188,10 +199,13 @@ WITH tr AS (
(SELECT r.niveau_pct FROM releve_km r
WHERE r.vehicule = v.vehicule AND r.niveau_pct IS NOT NULL
AND r.ts >= v.debranche AND r.ts <= v.debranche + interval '1 hour'
ORDER BY r.ts LIMIT 1) AS niveau_releve_apres
ORDER BY r.ts LIMIT 1) AS niveau_releve_apres,
(SELECT nf.niveau_pct FROM niveau_fin nf
WHERE nf.saisi_a >= v.debranche - interval '15 minutes' AND nf.saisi_a <= v.debranche + interval '1 hour'
ORDER BY nf.saisi_a LIMIT 1) AS niveau_fin_saisi
FROM v
), f AS (
SELECT k.*, CASE WHEN plein THEN 100 ELSE niveau_releve_apres END AS niveau_fin FROM k
SELECT k.*, coalesce(niveau_fin_saisi, CASE WHEN plein THEN 100 ELSE niveau_releve_apres END) AS niveau_fin FROM k
)
SELECT branche, debranche, coalesce(vehicule, '?') AS vehicule, niveau_pct, niveau_fin,
kwh_livres, plein,