@mostajs/medical-cases
v0.2.0
Published
Cœur métier MINCE de dossier patient + examens + circuit de prise en charge (imagerie/biologie/anapath). DB-agnostique ; COMPOSE nomenclature (cim-10/ccam), ged, image, statemachine, booking, aid-grants, numbering, audit. Générique santé (P3 Salsabil).
Maintainers
Readme
@mostajs/medical-cases
Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later
Cœur métier mince : dossier patient + examens + circuit de prise en charge (imagerie / biologie / anatomopathologie). DB-agnostique. Compose (jamais ne réimplémente) : @mostajs/nomenclature (diagnostic CIM-10 / examen CCAM), @mostajs/ged (documents), @mostajs/image (imagerie), @mostajs/statemachine, @mostajs/booking-stack, @mostajs/aid-grants (financement), @mostajs/numbering, @mostajs/audit.
Données de santé = secret médical : voir §11.3 (informatif) — base légale, minimisation, chiffrement au repos (
storage), résidence pilotée par.env.
Install
npm i @mostajs/medical-casesExemple minimal
import { createMedicalCases, createMemoryRepositories } from '@mostajs/medical-cases';
// Codification santé (chacun son métier) : injecter @mostajs/nomenclature seedé HEALTH_SEEDS.
// import { createNomenclature, HEALTH_SEEDS } from '@mostajs/nomenclature';
// const nomenclature = createNomenclature({ repositories, dataset: HEALTH_SEEDS, defaultScheme: 'cim-10' });
const m = createMedicalCases({ repositories: createMemoryRepositories() /*, nomenclature, ged, aidGrants, booking */ });
const c = await m.cases.open({ patient: { name: 'Fatima Z.' }, diagnosis: 'C50', physician: 'Dr Benali', facility: 'CAC' });
await m.documents.add(c.id, { gedDocId: 'ged-cr-001', kind: 'CR' });
const e = await m.exams.request(c.id, { type: 'IMG-TDM', category: 'imaging' }); // crée le bulletin
await m.exams.realize(e.id);
await m.exams.result(e.id, { gedDocId: 'ged-res-001' });
await m.cases.advance(c.id); // circuit de prise en charge (9 étapes → clôture)API (0.1.0)
createMedicalCases({ repositories, nomenclature?, ged?, image?, statemachine?, booking?, aidGrants?, numbering?, audit?, now? })- cases :
open({patient,diagnosis?,physician?,facility?,caregiver?})·get·list(filter)·listByStatus(s)·advance(id)·setStatus(id,s)·close(id,{outcome}) - documents :
add(id,{gedDocId,kind?,label?})·list(id) - exams :
request(caseId,{type,category?})(→ bulletin) ·get·listByCase·realize(examId)·result(examId,{gedDocId}) - dashboard() · reportingSource() (→
@mostajs/reporting) cycle(9 étapes) ·categories(=EXAM_CATEGORIES) ·statusLabel(s)(7 statuts métier)createMemoryRepositories()·PatientCaseSchema,ExamSchema
Codification (composer @mostajs/nomenclature)
Si nomenclature est injecté, diagnosis est validé en cim-10 et exams.request().type en ccam (sinon saisie libre — dégradation gracieuse). Côté app santé : seeder HEALTH_SEEDS.
Tests & exemple
npm test (@mostajs/mjs-unit, 6 tests) · npm run example (parcours de prise en charge, assertions).
