@mostajs/flotte 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -1
- package/llms.txt +2 -1
- package/package.json +1 -1
- package/src/cycle.js +9 -0
- package/src/flotte.js +2 -2
- package/src/index.js +1 -0
- package/src/schemas.js +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,16 @@
|
|
|
3
3
|
Format [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) · [SemVer](https://semver.org/lang/fr/).
|
|
4
4
|
Auteur : Dr Hamid MADANI <drmdh@msn.com>
|
|
5
5
|
|
|
6
|
-
## [0.
|
|
6
|
+
## [0.5.0] — non publiée
|
|
7
|
+
### Added
|
|
8
|
+
- `TRANSITIONS` (figées, sans la garde) et `transitionsDepuis(statut)` → `[{ id, vers, motif }]` : l'écran n'offre
|
|
9
|
+
que les changements permis depuis le statut courant et sait lesquels exigent un motif, sans recopier le cycle.
|
|
10
|
+
Demandé par le menu « Changer le statut » de la fiche (planches B et C, ECR-16.31 et 16.36), que
|
|
11
|
+
`@mostajs/flotte-ui` 0.2.0 rend. Essai T-FLO-23.
|
|
12
|
+
- `saisirPlein` garde `piece` (photo du ticket : `{ nom, empreinte, deposePar, deposeLe }`, colonne JSON), comme
|
|
13
|
+
une échéance. Demandé par « Saisir un plein » de la planche D (ECR-16.40). Essai T-FLO-24.
|
|
14
|
+
|
|
15
|
+
## [0.4.0] — 2026-10-24
|
|
7
16
|
### Added
|
|
8
17
|
- `poserEcheance` garde `reference` (n° de police, de procès-verbal) et `organisme` ; `piece` accepte un objet
|
|
9
18
|
(`{ nom, empreinte, deposePar, deposeLe }`) : colonne JSON. Essai T-FLO-18.
|
package/llms.txt
CHANGED
|
@@ -20,6 +20,7 @@ EXPORTS
|
|
|
20
20
|
ErreurFlotte { code, statut } (400 donnée, 404 inconnu, 409 doublon/recul/close/ouverte/occupé, 422 transition)
|
|
21
21
|
CODES, LIBELLES, libelle(famille, code, t?, vars?) ; STATUTS, MOTIFS ; PERMISSIONS (flotte:domaine:action)
|
|
22
22
|
regles (pur) : etatEntretien, prochainEntretien, kmParJour, consommation, evaluerDepart, cout, echeanceCourante, jours, ajouterJours
|
|
23
|
+
TRANSITIONS (0.5.0) figées [{ id, from, vers, motif }] ; transitionsDepuis(statut) -> [{ id, vers, motif }] (menu « Changer le statut »)
|
|
23
24
|
register (7 tables ; aussi './register'), SCHEMAS, validerDeclarations
|
|
24
25
|
|
|
25
26
|
API (async ; ctx = { agent })
|
|
@@ -38,7 +39,7 @@ API (async ; ctx = { agent })
|
|
|
38
39
|
ouvrirIntervention({ vehicule, nature, plan?, description?, ouverteLe? }, ctx) corrective => a_l_atelier
|
|
39
40
|
cloreIntervention(id, { km?, cout?, le? }, ctx) recale le plan ; km => relevé ; close => immuable
|
|
40
41
|
relever(v, { km, le?, source?, correction?: { motif, agent } }, ctx) -> relevé + avertissements (SAUT_ANORMAL), conservés sur le relevé (0.4.0)
|
|
41
|
-
saisirPlein({ vehicule, le, litres, montant, km, complet }, ctx) vaut relevé ; pleins(v) (0.4.0) ; consommation(v)
|
|
42
|
+
saisirPlein({ vehicule, le, litres, montant, km, complet, piece? (0.5.0) }, ctx) vaut relevé ; pleins(v) (0.4.0) ; consommation(v)
|
|
42
43
|
affecter(v, conducteur, ctx) ; liberer(v, ctx) ; affectations(v) ; affectationCourante(v)
|
|
43
44
|
peutPartir(v, { date?, conducteur?, km? }) -> { ok, motifs[], avertissements[] } TOUS les motifs, en OBJETS
|
|
44
45
|
disponibles({ date?, type?, attributs? }) ; cout(v, { du, au }) -> { carburant, entretien, echeances, total, km, parKm, nonComptes }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mostajs/flotte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Le carnet du parc : registre des véhicules par type déclaré, cycle d'état, échéances, entretien au kilométrage et à la date, relevés, pleins, affectations de conducteurs, coût au km, et la réponse « ce véhicule peut-il partir ? ».",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"author": "Dr Hamid MADANI <drmdh@msn.com>",
|
package/src/cycle.js
CHANGED
|
@@ -10,6 +10,15 @@ export const TRANSITIONS = Object.freeze([
|
|
|
10
10
|
{ id: 'reformer', from: ['en_service', 'immobilise', 'a_l_atelier'], to: 'reforme', motif: true },
|
|
11
11
|
]);
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Les transitions telles que l'écran les lit (0.5.0) : figées, sans la garde, qui reste dans le moteur. L'écran
|
|
15
|
+
* n'offre ainsi que les changements permis depuis un statut, et sait lesquels exigent un motif.
|
|
16
|
+
*/
|
|
17
|
+
export const TRANSITIONS_PUBLIQUES = Object.freeze(TRANSITIONS.map(({ id, from, to, motif }) => Object.freeze({ id, from: Object.freeze([...from]), vers: to, motif })));
|
|
18
|
+
|
|
19
|
+
/** Les transitions permises depuis `statut`, dans l'ordre du cycle : [{ id, vers, motif }] ; [] pour un état final. */
|
|
20
|
+
export const transitionsDepuis = (statut) => TRANSITIONS_PUBLIQUES.filter((t) => t.from.includes(statut)).map(({ id, vers, motif }) => ({ id, vers, motif }));
|
|
21
|
+
|
|
13
22
|
/**
|
|
14
23
|
* La machine d'une instance. `audit` (AuditSink de statemachine) est celui de l'application quand elle en
|
|
15
24
|
* fournit un ; sinon la machine garde son journal en mémoire.
|
package/src/flotte.js
CHANGED
|
@@ -323,12 +323,12 @@ export function createFlotte({
|
|
|
323
323
|
return ecrireReleve(vehicule, { km, le: jour, source, correction }, avert, agent);
|
|
324
324
|
},
|
|
325
325
|
async releves(vehicule) { await lire(vehicule); return releves(vehicule); },
|
|
326
|
-
async saisirPlein({ vehicule, le, litres, montant, km, complet = false, carte } = {}, { agent } = {}) {
|
|
326
|
+
async saisirPlein({ vehicule, le, litres, montant, km, complet = false, carte, piece } = {}, { agent } = {}) {
|
|
327
327
|
await lire(vehicule);
|
|
328
328
|
const jour = le ?? aujourdhui();
|
|
329
329
|
exigerNombre(litres, 'litres', { strict: true }); exigerNombre(montant, 'montant');
|
|
330
330
|
const avert = await verifierReleve(vehicule, { km, le: jour });
|
|
331
|
-
const p = await creer('pleins', { id: randomUUID(), vehicule, le: jour, litres, montant, km, complet: Boolean(complet), carte: carte ?? null, saisiPar: agent ?? null });
|
|
331
|
+
const p = await creer('pleins', { id: randomUUID(), vehicule, le: jour, litres, montant, km, complet: Boolean(complet), carte: carte ?? null, piece: piece ?? null, saisiPar: agent ?? null });
|
|
332
332
|
emettre('plein.saisi', { vehicule, plein: p.id, litres, montant });
|
|
333
333
|
const r = await ecrireReleve(vehicule, { km, le: jour, source: 'plein' }, avert, agent);
|
|
334
334
|
return { ...p, avertissements: r.avertissements };
|
package/src/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export { CODES, LIBELLES, libelle } from './libelles.js';
|
|
|
6
6
|
export { register, SCHEMAS } from './schemas.js';
|
|
7
7
|
export { validerDeclarations, FORMES } from './declarations.js';
|
|
8
8
|
export * as regles from './regles.js';
|
|
9
|
+
export { TRANSITIONS_PUBLIQUES as TRANSITIONS, transitionsDepuis } from './cycle.js';
|
|
9
10
|
export const STATUTS = CODES.statut;
|
|
10
11
|
export const MOTIFS = CODES.motif;
|
|
11
12
|
/** Les permissions, au format domaine:action (§10 #5) : le module les nomme, rbac-tenant les vérifie. */
|
package/src/schemas.js
CHANGED
|
@@ -20,7 +20,7 @@ export const ReleveCompteurSchema = s('ReleveCompteur', 'flotte_releves', {
|
|
|
20
20
|
vehicule: TR, km: NR, le: TR, source: TR, correction: J, saisiPar: T, avertissements: J,
|
|
21
21
|
}, [{ fields: { vehicule: 'asc', le: 'asc' } }]);
|
|
22
22
|
export const PleinSchema = s('Plein', 'flotte_pleins', {
|
|
23
|
-
vehicule: TR, le: TR, litres: NR, montant: NR, km: NR, complet: B, carte: T, saisiPar: T,
|
|
23
|
+
vehicule: TR, le: TR, litres: NR, montant: NR, km: NR, complet: B, carte: T, piece: J, saisiPar: T,
|
|
24
24
|
}, [{ fields: { vehicule: 'asc', le: 'asc' } }]);
|
|
25
25
|
export const AffectationSchema = s('Affectation', 'flotte_affectations', {
|
|
26
26
|
vehicule: TR, conducteur: TR, du: TR, au: T, parAgent: T, closePar: T,
|
|
@@ -30,7 +30,7 @@ export const SCHEMAS = Object.freeze([VehiculeSchema, EcheanceSchema, PlanEntret
|
|
|
30
30
|
|
|
31
31
|
export function register(registry) {
|
|
32
32
|
registry.register({
|
|
33
|
-
manifest: { name: 'flotte', package: '@mostajs/flotte', version: '0.
|
|
33
|
+
manifest: { name: 'flotte', package: '@mostajs/flotte', version: '0.5.0', type: 'business', priority: 45, displayName: 'Flotte (carnet du parc)',
|
|
34
34
|
description: 'Registre des véhicules, cycle, échéances, entretien, relevés, pleins, affectations, coût au km, peutPartir.', register: './src/schemas.js' },
|
|
35
35
|
schemas: SCHEMAS.map((x) => ({ name: x.name, schema: x })),
|
|
36
36
|
});
|