@mostajs/training 0.1.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +12 -0
  3. package/docs/00-PROPOSITION-PLAN-TRAINING-18062026.md +13 -0
  4. package/docs/01-ETUDE-ETAT-ART-TRAINING-18062026.md +216 -0
  5. package/docs/01-ETUDE-ETAT-ART-TRAINING-18062026.pdf +0 -0
  6. package/docs/03-PLAN-DEV-TRAINING.md +117 -0
  7. package/docs/03-PLAN-DEV-TRAINING.pdf +0 -0
  8. package/docs/04-PLAN-TESTS.md +82 -0
  9. package/docs/04-PLAN-TESTS.pdf +0 -0
  10. package/docs/05-PLAN-SUIVI-MONITORING.md +49 -0
  11. package/docs/05-PLAN-SUIVI-MONITORING.pdf +0 -0
  12. package/docs/PROPOSITION-MODULE-TRAINING.md +136 -0
  13. package/docs/PROPOSITION-MODULE-TRAINING.pdf +0 -0
  14. package/docs/old-dpf/01-ETUDE-ETAT-ART-TRAINING-18062026.pdf +0 -0
  15. package/docs/old-dpf/03-PLAN-DEV-TRAINING.pdf +0 -0
  16. package/docs/old-dpf/04-PLAN-TESTS.pdf +0 -0
  17. package/docs/old-dpf/05-PLAN-SUIVI-MONITORING.pdf +0 -0
  18. package/docs/old-dpf/PROPOSITION-MODULE-TRAINING.pdf +0 -0
  19. package/docs/results-training-20260618/01-lms.json +42 -0
  20. package/docs/results-training-20260618/02-sis.json +42 -0
  21. package/docs/results-training-20260618/10-catalog.json +42 -0
  22. package/docs/results-training-20260618/11-cefr.json +42 -0
  23. package/docs/results-training-20260618/20-sessions.json +42 -0
  24. package/docs/results-training-20260618/30-enroll.json +42 -0
  25. package/docs/results-training-20260618/40-centre.json +42 -0
  26. package/docs/results-training-20260618/41-centre-fr.json +42 -0
  27. package/docs/results-training-20260618/50-incub.json +42 -0
  28. package/docs/results-training-20260618/51-incub-fr.json +42 -0
  29. package/docs/results-training-20260618/60-standards.json +42 -0
  30. package/docs/results-training-20260618/70-ao.json +42 -0
  31. package/docs/results-training-20260618/71-agrement.json +42 -0
  32. package/docs/results-training-20260618/80-acad-lms.json +1 -0
  33. package/docs/results-training-20260618/81-acad-sched.json +1 -0
  34. package/docs/results-training-20260618/SOURCES.md +48 -0
  35. package/docs/results-training-20260618/academic-only.csv +2 -0
  36. package/docs/results-training-20260618/all-results.csv +130 -0
  37. package/docs/results-training-20260618/vendors-only.csv +11 -0
  38. package/docs/scripts-recherche-training-18062026.sh +84 -0
  39. package/docs/scripts-recherche-training-portable-18062026.sh +74 -0
  40. package/examples/cohorte/run.mjs +13 -0
  41. package/llms.txt +14 -0
  42. package/package.json +26 -0
  43. package/src/index.js +4 -0
  44. package/src/memory-repo.js +8 -0
  45. package/src/schemas.js +17 -0
  46. package/src/training.js +61 -0
  47. package/test-scripts/unit/training.test.mjs +45 -0
@@ -0,0 +1,42 @@
1
+ [
2
+ {
3
+ "title": "Anep - BOMOP - Le site n°01 en Algérie relatif aux appels d ...",
4
+ "url": "https://bomop.anep.dz/"
5
+ },
6
+ {
7
+ "title": "Consultation, formation et certification - BOMOP - Anep",
8
+ "url": "https://bomop.anep.dz/secteur/consultation-formation-et-certification/"
9
+ },
10
+ {
11
+ "title": "BOMOP — Bulletin Officiel des Marchés de l'Opérateur Public | RhinoTenders",
12
+ "url": "https://rhinotenders.com/bomop"
13
+ },
14
+ {
15
+ "title": "Algérie Marchés - Appels d'offres et marchés algerien",
16
+ "url": "https://algeriemarches.com/"
17
+ },
18
+ {
19
+ "title": "البوابة الإلكترونية للصفقات العمومية",
20
+ "url": "https://marches-publics.gov.dz/"
21
+ },
22
+ {
23
+ "title": "Algérie Marchés - Appels d'offres et marchés algerien",
24
+ "url": "https://algeriemarches.com/annonces"
25
+ },
26
+ {
27
+ "title": "إعلانات الصفقات العمومية Anep | أخبار دزاير",
28
+ "url": "https://www.akhbardzair.dz/anep/"
29
+ },
30
+ {
31
+ "title": "RhinoTenders - Appel d'offre Algérie & marchés publics",
32
+ "url": "https://rhinotenders.com/"
33
+ },
34
+ {
35
+ "title": "ANEP - fildalgerie",
36
+ "url": "https://fildalgerie.dz/anep/"
37
+ },
38
+ {
39
+ "title": "SafakatDz - #1 Plateforme Appels d'Offres & Marchés Publics Algérie ...",
40
+ "url": "https://safakatdz.com/"
41
+ }
42
+ ]
@@ -0,0 +1,42 @@
1
+ [
2
+ {
3
+ "title": "Agrément MFEP en Algérie — Guide complet 2026 | Beeform",
4
+ "url": "https://beeform.dz/agrement-mfep-algerie"
5
+ },
6
+ {
7
+ "title": "Cahier des charges école privée Algérie",
8
+ "url": "https://fr.scribd.com/document/400062473/Cahier-Des-Charges"
9
+ },
10
+ {
11
+ "title": "Conditions de création d'établissements privés de formation ...",
12
+ "url": "https://fr.scribd.com/document/933060042/Cahier-Des-Charges-Dfp"
13
+ },
14
+ {
15
+ "title": "PDF Journal Officiel De La Republique Algerienne N°° 67",
16
+ "url": "https://www.joradp.dz/JO2000/2002/067/FP12.pdf"
17
+ },
18
+ {
19
+ "title": "PDF Microsoft Word - Arrêté du 4 août .doc",
20
+ "url": "http://www.invest.caci.dz/fileadmin/template/recueil/pdf/Arr_t__du_4_ao_t.pdf"
21
+ },
22
+ {
23
+ "title": "PDF www.joradp.dz - avocatalgerien.com",
24
+ "url": "https://avocatalgerien.com/wp-content/uploads/2020/12/F2020068.pdf"
25
+ },
26
+ {
27
+ "title": "Agrément des établissements privés de la formation professionnelle ...",
28
+ "url": "https://fr.linkedin.com/pulse/agr%C3%A9ment-des-%C3%A9tablissements-priv%C3%A9s-de-la-formation-les-bouhireb-hnz2f"
29
+ },
30
+ {
31
+ "title": "Journal Officiel Algérien | SGG Algérie",
32
+ "url": "https://conformepro.dz/resources/joradp-sgg-algerie/journal-officiel-algerien"
33
+ },
34
+ {
35
+ "title": "PDF Journal Officiel Algérie - joradp.dz",
36
+ "url": "https://www.joradp.dz/FTP/JO-FRANCAIS/2018/F2018076.pdf"
37
+ },
38
+ {
39
+ "title": "Cahier des charges pour les nouveaux établissement privés",
40
+ "url": "https://www.vitaminedz.com/fr/Algerie/cahier-des-charges-pour-les-nouveaux-4519948-Articles-0-18300-1.html"
41
+ }
42
+ ]
@@ -0,0 +1,48 @@
1
+ # Sources figées — veille @mostajs/training (2026-06-18)
2
+
3
+ **Auteur** : Dr Hamid MADANI <drmdh@msn.com>
4
+ **Protocole** : ../scripts-recherche-training-portable-18062026.sh all (DDG HTML + Semantic Scholar)
5
+ **Volumétrie** : all=130 · academic=2 · vendors=11
6
+
7
+ ## Vendeurs / standards (vendors-only.csv)
8
+ ```
9
+ "1EdTech Interoperability Standards","https://www.1edtech.org/specifications"
10
+ "Gibbon Documentation","https://docs.gibbonedu.org/"
11
+ "Gibbon - The Flexible School Platform","https://gibbonedu.org/"
12
+ "GitHub - projectfedena/fedena: Fedena SIS · GitHub","https://github.com/projectfedena/fedena"
13
+ "Moodle Plugins directory: Waitlist enrolment | Moodle.org","https://moodle.org/plugins/enrol_waitlist"
14
+ "OneRoster and LTI Advantage | IMS Global Learning Consortium - 1EdTech","https://www.imsglobal.org/about/k12/oneroster-and-lti-advantage"
15
+ "OneRoster v1.1 Final Specification | IMS Global Learning ... - 1EdTech","https://www.imsglobal.org/oneroster-v11-final-specification"
16
+ "openSIS Community Edition download | SourceForge.net","https://sourceforge.net/projects/opensis-ce/"
17
+ "openSIS | Student Information & School Management Software","https://opensis.com/"
18
+ "QTI Specification Documents - 1EdTech","https://www.1edtech.org/standards/qti/index"
19
+ "Technical Resources | IMS Global Learning Consortium","https://www.imsglobal.org/technical-resources"
20
+ ```
21
+ ## Académique (academic-only.csv)
22
+ ```
23
+ "A Comparison of Open-Source Learning Management Systems Used for ...","https://www.researchgate.net/publication/387491743_A_Comparison_of_Open-Source_Learning_Management_Systems_Used_for_Distance_Education_in_Higher_Education_Institutions"
24
+ "Course-Prerequisite Networks for Analyzing and Understanding Academic ...","https://arxiv.org/pdf/2210.01269v1"
25
+ ```
26
+ ## Demande / AO (axe 9)
27
+ ```
28
+ "Anep - BOMOP - Le site n°01 en Algérie relatif aux appels d ...","https://bomop.anep.dz/"
29
+ "Consultation, formation et certification - BOMOP - Anep","https://bomop.anep.dz/secteur/consultation-formation-et-certification/"
30
+ "BOMOP — Bulletin Officiel des Marchés de l'Opérateur Public | RhinoTenders","https://rhinotenders.com/bomop"
31
+ "Algérie Marchés - Appels d'offres et marchés algerien","https://algeriemarches.com/"
32
+ "البوابة الإلكترونية للصفقات العمومية","https://marches-publics.gov.dz/"
33
+ "Algérie Marchés - Appels d'offres et marchés algerien","https://algeriemarches.com/annonces"
34
+ "إعلانات الصفقات العمومية Anep | أخبار دزاير","https://www.akhbardzair.dz/anep/"
35
+ "RhinoTenders - Appel d'offre Algérie & marchés publics","https://rhinotenders.com/"
36
+ "ANEP - fildalgerie","https://fildalgerie.dz/anep/"
37
+ "SafakatDz - #1 Plateforme Appels d'Offres & Marchés Publics Algérie ...","https://safakatdz.com/"
38
+ "Agrément MFEP en Algérie — Guide complet 2026 | Beeform","https://beeform.dz/agrement-mfep-algerie"
39
+ "Cahier des charges école privée Algérie","https://fr.scribd.com/document/400062473/Cahier-Des-Charges"
40
+ "Conditions de création d'établissements privés de formation ...","https://fr.scribd.com/document/933060042/Cahier-Des-Charges-Dfp"
41
+ "PDF Journal Officiel De La Republique Algerienne N°° 67","https://www.joradp.dz/JO2000/2002/067/FP12.pdf"
42
+ "PDF Microsoft Word - Arrêté du 4 août .doc","http://www.invest.caci.dz/fileadmin/template/recueil/pdf/Arr_t__du_4_ao_t.pdf"
43
+ "PDF www.joradp.dz - avocatalgerien.com","https://avocatalgerien.com/wp-content/uploads/2020/12/F2020068.pdf"
44
+ "Agrément des établissements privés de la formation professionnelle ...","https://fr.linkedin.com/pulse/agr%C3%A9ment-des-%C3%A9tablissements-priv%C3%A9s-de-la-formation-les-bouhireb-hnz2f"
45
+ "Journal Officiel Algérien | SGG Algérie","https://conformepro.dz/resources/joradp-sgg-algerie/journal-officiel-algerien"
46
+ "PDF Journal Officiel Algérie - joradp.dz","https://www.joradp.dz/FTP/JO-FRANCAIS/2018/F2018076.pdf"
47
+ "Cahier des charges pour les nouveaux établissement privés","https://www.vitaminedz.com/fr/Algerie/cahier-des-charges-pour-les-nouveaux-4519948-Articles-0-18300-1.html"
48
+ ```
@@ -0,0 +1,2 @@
1
+ "A Comparison of Open-Source Learning Management Systems Used for ...","https://www.researchgate.net/publication/387491743_A_Comparison_of_Open-Source_Learning_Management_Systems_Used_for_Distance_Education_in_Higher_Education_Institutions"
2
+ "Course-Prerequisite Networks for Analyzing and Understanding Academic ...","https://arxiv.org/pdf/2210.01269v1"
@@ -0,0 +1,130 @@
1
+ "10 Best Free & Open-Source LMS Platforms in 2026 - Teachfloor","https://www.teachfloor.com/blog/best-free-and-open-source-lms-platforms"
2
+ "10 Best Open-Source Learning Management Systems in 2026","https://www.coursebox.ai/blog/best-open-source-learning-management-systems"
3
+ "17 Free Open-source Self-hosted School Management Systems","https://medevel.com/17-os-school-sis-sms/"
4
+ "1EdTech (IMS Global) - scorm.ing","https://www.scorm.ing/organizations/ims-global"
5
+ "1EdTech Interoperability Standards","https://www.1edtech.org/specifications"
6
+ "2026 Guide: The Best Open-Source LMS for Universities, Governments ...","https://opencraft.com/2026-guide-the-best-open-source-lms-for-universities-governments-enterprises/"
7
+ "30 Best Startup Accelerators in 2026","https://startupsavant.com/best-startup-accelerators"
8
+ "60+ Best Startup Incubators & Accelerators in USA [2026]","https://altar.io/best-startup-accelerators-usa/"
9
+ "Academic & School Scheduling Software | Lantiv 2026","https://lantiv.com/"
10
+ "Accelerator & Incubator Management Software | AcceleratorApp","https://www.acceleratorapp.co/en/"
11
+ "Accelerator & Incubator management software for tomorrow","https://www.educate-me.co/accelerators-incubators-platform"
12
+ "Accelerator & Incubator Management Software | Startup Science","https://www.startupscience.io/solutions/eso"
13
+ "A Comparison of Open-Source Learning Management Systems Used for ...","https://www.researchgate.net/publication/387491743_A_Comparison_of_Open-Source_Learning_Management_Systems_Used_for_Distance_Education_in_Higher_Education_Institutions"
14
+ "Agrément des établissements privés de la formation professionnelle ...","https://fr.linkedin.com/pulse/agr%C3%A9ment-des-%C3%A9tablissements-priv%C3%A9s-de-la-formation-les-bouhireb-hnz2f"
15
+ "Agrément MFEP en Algérie — Guide complet 2026 | Beeform","https://beeform.dz/agrement-mfep-algerie"
16
+ "AI Timetable Generator - Create School Schedules Instantly ...","https://www.timetablemaster.com/timetable-generator-ai"
17
+ "Algeriasm - logiciel gestion scolarité","https://algeriasm.net/"
18
+ "Algérie Marchés - Appels d'offres et marchés algerien","https://algeriemarches.com/"
19
+ "Algérie Marchés - Appels d'offres et marchés algerien","https://algeriemarches.com/annonces"
20
+ "Anep - BOMOP - Le site n°01 en Algérie relatif aux appels d ...","https://bomop.anep.dz/"
21
+ "ANEP - fildalgerie","https://fildalgerie.dz/anep/"
22
+ "Automated Academic Scheduling Software | Schedule25® by CollegeNET","https://collegenet.com/scheduling/schedule25"
23
+ "Best Academic Scheduling Software: User Reviews from June 2026 - G2","https://www.g2.com/categories/academic-scheduling"
24
+ "Best Free Open Source LMS Platforms 2026 - LMSPedia","https://lmspedia.org/best-free-open-source-lms-platforms/"
25
+ "Best Language School Management Software 2026 | OpenEduCat","https://openeducat.org/language-school-management-software/"
26
+ "Best Open Source LMS in 2026: Top 9 Platforms Compared","https://raccoongang.com/blog/open-source-lms-everything-you-need-know/"
27
+ "Best School Class Scheduling Software | 2026 Expert Picks","https://worldmetrics.org/best/school-class-scheduling-software/"
28
+ "BOMOP — Bulletin Officiel des Marchés de l'Opérateur Public | RhinoTenders","https://rhinotenders.com/bomop"
29
+ "Cahier des charges école privée Algérie","https://fr.scribd.com/document/400062473/Cahier-Des-Charges"
30
+ "Cahier des charges pour les nouveaux établissement privés","https://www.vitaminedz.com/fr/Algerie/cahier-des-charges-pour-les-nouveaux-4519948-Articles-0-18300-1.html"
31
+ "CEFR Levels A1 to C2 Explained | Language Level Guide","https://internationalcommunication.dk/en/blog/posts/cefr-levels-explained/"
32
+ "CEFR Levels A1 to C2: The Complete Guide | CEFRhub","https://cefrhub.ai/en/blog/cefr-levels-complete-guide/"
33
+ "CEFR Levels Explained: What A1, A2, B1, B2, C1 and C2 Actually Mean ...","https://www.nona.academy/post/cefr-levels-explained"
34
+ "CEFR Levels Guide: A1, A2, B1, B2, C1 & C2 Explained","https://www.languagenext.com/blog/cefr-levels-explained/"
35
+ "Comprehensive LMS Documentation Guide | PDF | Data Model | Educational ...","https://www.scribd.com/document/48901762/Learning-management-system-LMS-Modules"
36
+ "Conditions de création d'établissements privés de formation ...","https://fr.scribd.com/document/933060042/Cahier-Des-Charges-Dfp"
37
+ "Consultation, formation et certification - BOMOP - Anep","https://bomop.anep.dz/secteur/consultation-formation-et-certification/"
38
+ "Course Catalog Schema - AppearMore","https://appearmore.com/industries/education/course-catalog-schema/"
39
+ "Course-Prerequisite Networks for Analyzing and Understanding Academic ...","https://arxiv.org/pdf/2210.01269v1"
40
+ "Create School Timetables Easily | TimetableMaster","https://www.timetablemaster.com/"
41
+ "Créer un incubateur ou une pépinière d'entreprise - société facile","https://societefacile.com/creer-un-incubateur-ou-une-pepiniere-dentreprise-le-guide-pour-reussir/"
42
+ "Curriculum Design, Development and Models: Planning for Student ...","https://oer.pressbooks.pub/curriculumessentials/chapter/curriculum-design-development-and-models-planning-for-student-learning-there-is-always-a-need-for-newly-formulated-curriculum-models-that-address-contemporary-circumstance-an/"
43
+ "Curriculum Design : Prerequisites","https://www.kdd.org/curriculum/view/prerequisites"
44
+ "Dendreo - Logiciel de gestion pour centre de langues","https://www.dendreo.com/logiciel-gestion-centre-langues"
45
+ "École de langues - MyScol","https://myscol.com/logiciel-de-gestion-pour-ecole-de-langues/"
46
+ "Education Timetable Generator | Class Schedule Maker","https://easytimetable.pro/education-timetable-generator/"
47
+ "eLearning Standards in Practice: SCORM, xAPI, cmi5, LTI, OneRoster and ...","https://www.linkedin.com/pulse/elearning-standards-practice-scorm-xapi-cmi5-lti-oneroster-6ssqe"
48
+ "eLearning Standards: SCORM, xAPI, cmi5, LTI, OneRoster and Ed-Fi ...","https://aristeksystems.com/blog/elearning-standards/"
49
+ "English Language Levels: The CEFR A1-C2 Guide","https://thecognitio.com/english-language-levels/"
50
+ "Free Student Information System: Open Source | OpenEduCat","https://openeducat.org/articles/free-student-information-system-open-source/"
51
+ "Gibbon Documentation","https://docs.gibbonedu.org/"
52
+ "Gibbon - The Flexible School Platform","https://gibbonedu.org/"
53
+ "Gibbon vs. openSIS Comparison - SourceForge","https://sourceforge.net/software/compare/Gibbon-vs-openSIS/"
54
+ "GitHub - lawalamirat09/College-course-registration-waitlist","https://github.com/lawalamirat09/College-course-registration-waitlist"
55
+ "GitHub - OS4ED/openSIS-Classic: openSIS is a commercial grade, secure ...","https://github.com/OS4ED/openSIS-Classic"
56
+ "GitHub - projectfedena/fedena: Fedena SIS · GitHub","https://github.com/projectfedena/fedena"
57
+ "Gohorto: Operating system for incubators, accelerators & innovation ...","https://gohorto.com/"
58
+ "Google for Startups Accelerator","https://startup.google.com/programs/accelerator/"
59
+ "How Capacity Rules and Waitlist Work for Oracle Learning Course Offerings","https://docs.oracle.com/en/cloud/saas/talent-management/fatul/how-capacity-rules-and-waitlist-work-for-oracle-learning-course-offerings.html"
60
+ "Incubateur, Couveuse, Pépinière, Accélérateur - le guide complet","https://arc-sud-developpement.com/2023/11/10/incubateur-pepiniere-accelerateur-quelle-strcuture-choisir/"
61
+ "Incubateurs d'entreprises, pépinières, couveuses : Guide complet !","https://www.l-expert-comptable.com/a/531743-pepiniere-d-entreprises-incubateur-couveuse-quel-accompagnement-pour-quel-projet.html"
62
+ "Incubateurs, pépinières, technopôles - Bpifrance","https://www.bpifrance.fr/nous-decouvrir/nos-partnaires/incubateurs-pepinieres-technopoles"
63
+ "International language standards | Cambridge English","https://www.cambridgeenglish.org/exams-and-tests/cefr/"
64
+ "Join the timbuktoo Pan African Incubator Network","https://www.undp.org/africa/blog/join-timbuktoo-pan-african-incubator-network"
65
+ "Journal Officiel Algérien | SGG Algérie","https://conformepro.dz/resources/joradp-sgg-algerie/journal-officiel-algerien"
66
+ "KRITHIKSAI16/UNIVERSITY_COURSE_REGISTRATION_SYSTEM - GitHub","https://github.com/KRITHIKSAI16/UNIVERSITY_COURSE_REGISTRATION_SYSTEM"
67
+ "Language Center Management Software - WIM School","https://wimschool.com/en/solutions/languages-centers"
68
+ "Language School Billing Software | Zooza","https://www.zooza.online/solutions/language-schools/"
69
+ "Language School Management Software | Artstep for Language Programs","https://www.artstepai.com/solution/language-school-software"
70
+ "Language School Management Software | Complete Platform","https://edunationapp.com/language-school-management-software"
71
+ "Language School Management Software","https://linguacrm.com/"
72
+ "Language school management software | Teach 'n Go","https://www.teachngo.com/solutions/language-school-management-software"
73
+ "Language School Management Software | Tutorbase","https://tutorbase.com/solutions/language-schools"
74
+ "Language School Scheduling & Management Software | Teachworks","https://www.teachworks.com/language-school-management-software"
75
+ "Les pépinières d'entreprises - Bpifrance Création","https://bpifrance-creation.fr/encyclopedie/se-faire-accompagner/lieux-dhebergement-accompagnement/pepinieres-dentreprises"
76
+ "Logiciel de business plan pour les incubateurs et pépinières","https://www.thebusinessplanshop.com/fr/logiciel-business-plan/incubateurs-pepinieres"
77
+ "Logiciel de Gestion : Centres de Soutien - Class Manager","https://classmanager.academy/organisme-de-formation"
78
+ "Logiciel de gestion de planning flexible et puissant pour les écoles de ...","https://www.bookeo.com/fr/classes-et-cours/logiciel-de-gestion-de-planning-pour-les-ecoles-de-langues/"
79
+ "LOGICIEL DE GESTION POUR CENTRE DE FORMATION - Algeriasm","https://algeriasm.net/gestion-des-formations/"
80
+ "Logiciel de réservation pour écoles de langues | Zenamu","https://zenamu.com/fr/for-studio/language/"
81
+ "Logiciel et application de gestion d'école de langue - Skooly","https://getskooly.com/schools/fr/language-software-app.html"
82
+ "LTI - scorm.ing","https://www.scorm.ing/standards/lti"
83
+ "Manual Course Waitlist Management - Salesforce","https://help.salesforce.com/s/articleView?id=sfdo.ec_manual_course_waitlist_management.htm&language=en_US&type=5"
84
+ "Model Courses and Curricula - Salesforce","https://help.salesforce.com/s/articleView?id=sfdo.EC_Model_Courses_and_Curricula.htm&language=en_US&type=5"
85
+ "Moncentredeformation - Logiciel de gestion de centre de formation ...","https://moncentredeformation.com/"
86
+ "Moodle Plugins directory: Waitlist enrolment | Moodle.org","https://moodle.org/plugins/enrol_waitlist"
87
+ "New Feature: Waitlist and Capacity Metrics Added to Course Registration ...","https://csumb-campusdatawarehouse.blogspot.com/2026/04/new-feature-waitlist-and-capacity.html"
88
+ "OneRoster and LTI Advantage | IMS Global Learning Consortium - 1EdTech","https://www.imsglobal.org/about/k12/oneroster-and-lti-advantage"
89
+ "OneRoster v1.1 Final Specification | IMS Global Learning ... - 1EdTech","https://www.imsglobal.org/oneroster-v11-final-specification"
90
+ "openSIS Classic | openSIS-Classic","https://os4ed.github.io/openSIS-Classic/"
91
+ "openSIS Community Edition download | SourceForge.net","https://sourceforge.net/projects/opensis-ce/"
92
+ "openSIS | Student Information & School Management Software","https://opensis.com/"
93
+ "Open Source LMS Comparison 2026 | Moodle vs Open edX vs Canvas vs ...","https://openeducat.org/comparisons/open-source-lms-comparison/"
94
+ "Open Source LMS Comparison 2026 | Selleo","https://selleo.com/blog/open-source-lms-comparison"
95
+ "Open Source LMS Comparison for Business: What to Consider","https://anyforsoft.com/blog/open-source-lms-comparison/"
96
+ "PDF Data Modeling Workshop: Prerequisites and Curriculum","https://www.excelerateclasses.com/wp-content/uploads/2026/01/Data-Modeling-Prerequisites-and-Curriculum.pdf"
97
+ "PDF Data Models and Database","https://lecture-notes.tiu.edu.iq/wp-content/uploads/2024/10/DB1_Lecture2_Theory.pdf"
98
+ "PDF Data Systems Education: Curriculum Recommendations,Course Syllabi, and ...","https://dbs-research.github.io/pdf/2025_recommendation.pdf"
99
+ "PDF Journal Officiel Algérie - joradp.dz","https://www.joradp.dz/FTP/JO-FRANCAIS/2018/F2018076.pdf"
100
+ "PDF Journal Officiel De La Republique Algerienne N°° 67","https://www.joradp.dz/JO2000/2002/067/FP12.pdf"
101
+ "PDF Microsoft Word - Arrêté du 4 août .doc","http://www.invest.caci.dz/fileadmin/template/recueil/pdf/Arr_t__du_4_ao_t.pdf"
102
+ "PDF www.joradp.dz - avocatalgerien.com","https://avocatalgerien.com/wp-content/uploads/2020/12/F2020068.pdf"
103
+ "Pépinière, couveuse, accélérateur, incubateur: que choisir ?","https://www.leblogdudirigeant.com/pepiniere-couveuse-accelerateur-incubateur-choisir-bonne-structure-entreprendre/"
104
+ "Pépinière d'entreprises - Bpifrance Création","https://bpifrance-creation.fr/pepiniere-dentreprises"
105
+ "PÉPINIÈRE D'ENTREPRISES INCUBATEUR D'ORAN - Accélérateur de projet","https://pepiniere-entreprises-oran.dz/"
106
+ "Programs - Google for Startups","https://startup.google.com/programs/"
107
+ "QTI Specification Documents - 1EdTech","https://www.1edtech.org/standards/qti/index"
108
+ "Real-Time Course Enrollment Capacity Management System","https://luxoret.com/prompts/ai-chat/144045-real-time-course-enrollment-capacity-management-system"
109
+ "REST API for Oracle Fusion Cloud Student Management","https://docs.oracle.com/en/cloud/saas/student-management/farsm/api-waitlist-settings.html"
110
+ "Réussir sa création d'entreprise avec les pépinières CCI","https://www.cuprofil.fr/accompagnement-creation-cci/"
111
+ "RhinoTenders - Appel d'offre Algérie & marchés publics","https://rhinotenders.com/"
112
+ "SafakatDz - #1 Plateforme Appels d'Offres & Marchés Publics Algérie ...","https://safakatdz.com/"
113
+ "Technical Resources | IMS Global Learning Consortium","https://www.imsglobal.org/technical-resources"
114
+ "The CEFR Levels - Common European Framework of Reference for Languages ...","https://www.coe.int/en/web/common-european-framework-reference-languages/level-descriptions"
115
+ "The Complete Guide to CEFR Levels: A1 to C2 Explained (2025)","https://cefrlookup.com/blog/complete-guide-cefr-levels-2025"
116
+ "Top 10 Best Academic Scheduling Software | 2026 Edition","https://worldmetrics.org/best/academic-scheduling-software/"
117
+ "Top 10 Best Education Scheduling Software: 2026 Comparison","https://zipdo.co/best/education-scheduling-software/"
118
+ "Top 10 Best Open Source LMS Platforms In 2026","https://softwarefinder.com/resources/best-open-source-lms"
119
+ "TOP 12 des logiciels pour votre centre de formation [2025] - Appvizer","https://www.appvizer.fr/magazine/services/centre-formation/logiciel-formation"
120
+ "Top Class Schedule Software (2026) - wifitalents.com","https://wifitalents.com/best/class-schedule-software/"
121
+ "Top Project Management Accelerators & VCs (2026) — Open Deadlines ...","https://incubatorlist.com/best-project-management-startup-accelerators-incubators-and-vcs"
122
+ "Tutoring Management Software — Scheduling, Billing, Payroll","https://tutorbase.com/"
123
+ "Understanding the Course Catalog - Oracle","https://docs.oracle.com/cd/E56917_01/cs9pbr4/eng/cs/lssr/concept_UnderstandingtheCourseCatalog-ab48b2.html"
124
+ "Understand your English level | LearnEnglish","https://learnenglish.britishcouncil.org/level/understand-your-english-level"
125
+ "University Program Capacity Management: Automate Seats | Kissflow","https://kissflow.com/solutions/education/university-program-capacity-management/"
126
+ "Waitlisting - Thought Industries","https://support.thoughtindustries.com/hc/en-us/articles/4413299087383-Waitlisting"
127
+ "What are the 9 standards from 1EdTech Consortium? - Edlink","https://ed.link/community/ims-global-standards/"
128
+ "What is Your English Level? CEFR Levels Explained (A1-C2)","https://peachteachenglish.com/post/CEFR-Levels-Explained"
129
+ "إعلانات الصفقات العمومية Anep | أخبار دزاير","https://www.akhbardzair.dz/anep/"
130
+ "البوابة الإلكترونية للصفقات العمومية","https://marches-publics.gov.dz/"
@@ -0,0 +1,11 @@
1
+ "1EdTech Interoperability Standards","https://www.1edtech.org/specifications"
2
+ "Gibbon Documentation","https://docs.gibbonedu.org/"
3
+ "Gibbon - The Flexible School Platform","https://gibbonedu.org/"
4
+ "GitHub - projectfedena/fedena: Fedena SIS · GitHub","https://github.com/projectfedena/fedena"
5
+ "Moodle Plugins directory: Waitlist enrolment | Moodle.org","https://moodle.org/plugins/enrol_waitlist"
6
+ "OneRoster and LTI Advantage | IMS Global Learning Consortium - 1EdTech","https://www.imsglobal.org/about/k12/oneroster-and-lti-advantage"
7
+ "OneRoster v1.1 Final Specification | IMS Global Learning ... - 1EdTech","https://www.imsglobal.org/oneroster-v11-final-specification"
8
+ "openSIS Community Edition download | SourceForge.net","https://sourceforge.net/projects/opensis-ce/"
9
+ "openSIS | Student Information & School Management Software","https://opensis.com/"
10
+ "QTI Specification Documents - 1EdTech","https://www.1edtech.org/standards/qti/index"
11
+ "Technical Resources | IMS Global Learning Consortium","https://www.imsglobal.org/technical-resources"
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Scripts de recherche — état de l'art : @mostajs/training (catalogue formations + sessions + inscriptions)
4
+ # =========================================================================================================
5
+ # Auteur : Dr Hamid MADANI <drmdh@msn.com>
6
+ # Date : 2026-06-18
7
+ # Document associé : 01-ETUDE-ETAT-ART-TRAINING-18062026.md
8
+ # Statut : PROPOSITION — protocole reproductible (DEVRULES §8). Calqué sur scripts-recherche-crm/geo.
9
+ # Pré-requis : googler|ddgr + jq + curl
10
+ # Usage : ./scripts-recherche-training-18062026.sh all (ou un axe : 1..9)
11
+ set -euo pipefail
12
+ OUTDIR="${OUTDIR:-./results-training-$(date +%Y%m%d)}"; mkdir -p "$OUTDIR"; echo "📂 $OUTDIR"
13
+ need() { command -v "$1" >/dev/null 2>&1 || { echo "⚠ requis : $1"; return 1; }; }
14
+
15
+ # ── VERTICAUX (un système / une couche) ───────────────────────────────────────
16
+ axe1_lms() { # plateformes LMS/SIS open source
17
+ googler --json -n 10 "open source LMS Moodle Open edX Canvas Chamilo Sakai Frappe self-hosted comparison 2026" > "$OUTDIR/01-lms.json" || true
18
+ googler --json -n 10 "open source student information system OpenSIS Gibbon Fedena course enrollment" > "$OUTDIR/02-sis.json" || true
19
+ }
20
+ axe2_catalog() { # catalogue, programme, niveaux
21
+ googler --json -n 10 "course catalog curriculum model levels prerequisites data model schema" > "$OUTDIR/10-catalog.json" || true
22
+ googler --json -n 10 "CEFR language levels A1 A2 B1 B2 C1 C2 mapping course progression" > "$OUTDIR/11-cefr.json" || true
23
+ }
24
+ axe3_sessions() { # sessions / cohortes / groupes / planning
25
+ googler --json -n 10 "class scheduling cohort section term timetable rooms instructor assignment software" > "$OUTDIR/20-sessions.json" || true
26
+ }
27
+ axe4_enroll() { # inscriptions / capacité / liste d'attente
28
+ googler --json -n 10 "course enrollment registration capacity waitlist seats management API" > "$OUTDIR/30-enroll.json" || true
29
+ }
30
+ # ── HORIZONTAUX (un usage / une application) ──────────────────────────────────
31
+ axe5_centre_formation() { # écoles de langues / centres de formation & coaching
32
+ googler --json -n 10 "language school training center management software groups sessions attendance billing" > "$OUTDIR/40-centre.json" || true
33
+ googler --json -n 10 "logiciel gestion centre de formation école de langues groupes séances inscriptions Algérie" > "$OUTDIR/41-centre-fr.json" || true
34
+ }
35
+ axe6_incubateur() { # accompagnement / programmes incubateurs
36
+ googler --json -n 10 "incubator accelerator cohort program management training sessions startups" > "$OUTDIR/50-incub.json" || true
37
+ googler --json -n 10 "pépinière entreprises accompagnement formation incubés sessions suivi logiciel" > "$OUTDIR/51-incub-fr.json" || true
38
+ }
39
+ # ── STANDARDS (interopérabilité — à mapper, pas à réimplémenter) ───────────────
40
+ axe7_standards() {
41
+ googler --json -n 10 "1EdTech IMS Global OneRoster LTI QTI SCORM xAPI Tin Can interoperability spec" > "$OUTDIR/60-standards.json" || true
42
+ }
43
+ # ── TRANSVERSES : académique ──────────────────────────────────────────────────
44
+ axe8_academic() {
45
+ cat <<'EOF'
46
+ curl "https://api.semanticscholar.org/graph/v1/paper/search?query=learning+management+system+data+model+enrollment&limit=20" | jq .
47
+ curl "http://export.arxiv.org/api/query?search_query=all:course+scheduling+cohort+enrollment&max_results=20"
48
+ curl "https://api.crossref.org/works?query=student+information+system+course+catalog&rows=20" | jq '.message.items[].title'
49
+ EOF
50
+ }
51
+ # ── AXES DEMANDE / OPPORTUNITÉS (DEVRULES §8.4 — veille de la demande) ─────────
52
+ axe9_demande() {
53
+ googler --json -n 10 "appel d'offres logiciel gestion centre de formation Algérie BOMOP ANEP" > "$OUTDIR/70-ao.json" || true
54
+ googler --json -n 10 "agrément homologation centre de formation professionnelle Algérie cahier des charges" > "$OUTDIR/71-agrement.json" || true
55
+ googler --json -n 10 "tender RFP training center management software school SIS public" > "$OUTDIR/72-rfp.json" || true
56
+ echo "→ Classer les trouvailles dans Entreprise/appels-d-offres/<theme=formation>/ (cf. §8.4)"
57
+ }
58
+ # ── SYNTHÈSE : JSON → jq → CSV (academic-only vs vendors-only) ─────────────────
59
+ axe_synth() {
60
+ for f in "$OUTDIR"/*.json; do [ -f "$f" ] || continue; jq -r '.[]|[.title,.url]|@csv' "$f" 2>/dev/null; done > "$OUTDIR/all-results.csv"
61
+ jq -r '.[]|select(.url|test("arxiv|ieee|acm.org|springer|mdpi|sciencedirect|semanticscholar|isprs"))|[.title,.url]|@csv' "$OUTDIR"/*.json 2>/dev/null > "$OUTDIR/academic-only.csv" || true
62
+ jq -r '.[]|select(.url|test("moodle|openedx|edx|instructure|canvas|chamilo|sakai|frappe|gibbon|opensis|fedena|imsglobal|1edtech"))|[.title,.url]|@csv' "$OUTDIR"/*.json 2>/dev/null > "$OUTDIR/vendors-only.csv" || true
63
+ echo "✅ synthèse → $OUTDIR/{all,academic-only,vendors-only}.csv"
64
+ }
65
+
66
+ main() {
67
+ case "${1:-help}" in
68
+ 1|lms) axe1_lms;; 2|catalog) axe2_catalog;; 3|sessions) axe3_sessions;; 4|enroll) axe4_enroll;;
69
+ 5|centre) axe5_centre_formation;; 6|incub) axe6_incubateur;; 7|standards) axe7_standards;;
70
+ 8|academic) axe8_academic;; 9|demande) axe9_demande;; synth) axe_synth;;
71
+ all) need googler && need jq; axe1_lms; axe2_catalog; axe3_sessions; axe4_enroll; axe5_centre_formation; axe6_incubateur; axe7_standards; axe9_demande; axe_synth;;
72
+ help|*) cat <<EOF
73
+ Usage: $0 <axe>
74
+ VERTICAUX : 1 lms · 2 catalog · 3 sessions · 4 enroll
75
+ HORIZONTAUX: 5 centre · 6 incub
76
+ STANDARDS : 7 standards
77
+ TRANSVERSES: 8 academic · 9 demande(§8.4) · synth · all
78
+ Variables : OUTDIR (défaut ./results-training-YYYYMMDD)
79
+ Document associé : 01-ETUDE-ETAT-ART-TRAINING-18062026.md
80
+ EOF
81
+ ;;
82
+ esac
83
+ }
84
+ main "$@"
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Runner PORTABLE (sans googler) — état de l'art @mostajs/training
4
+ # ================================================================
5
+ # Auteur : Dr Hamid MADANI <drmdh@msn.com>
6
+ # Date : 2026-06-18
7
+ # Raison : googler/ddgr absents sur la machine. Mêmes axes que
8
+ # scripts-recherche-training-18062026.sh, via DuckDuckGo HTML + APIs académiques.
9
+ # Pré-requis : curl + python3 (+ jq). Sortie JSON [{title,url}] → CSV (DEVRULES §8).
10
+ # Usage : ./scripts-recherche-training-portable-18062026.sh all
11
+ set -uo pipefail # pas de -e : une requête qui échoue ne doit pas tuer le run
12
+ OUTDIR="${OUTDIR:-./results-training-$(date +%Y%m%d)}"; mkdir -p "$OUTDIR"; echo "📂 $OUTDIR"
13
+ UA="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"
14
+
15
+ # Programme d'extraction (passé via -c pour laisser stdin = pipe curl)
16
+ read -r -d '' PYEXTRACT <<'PY' || true
17
+ import sys,re,html,json,urllib.parse
18
+ out=sys.argv[1]; data=sys.stdin.read()
19
+ rows=re.findall(r'result__a"\s+href="([^"]+)"[^>]*>(.*?)</a>', data, re.S)
20
+ res=[]
21
+ for href,title in rows:
22
+ m=re.search(r'uddg=([^&]+)', href)
23
+ url=urllib.parse.unquote(m.group(1)) if m else href
24
+ t=html.unescape(re.sub('<[^>]+>','',title)).strip()
25
+ if url.startswith('//'): url='https:'+url
26
+ res.append({"title":t,"url":url})
27
+ json.dump(res[:10],open(out,'w'),ensure_ascii=False,indent=1)
28
+ print(f" → {out} ({len(res[:10])})")
29
+ PY
30
+
31
+ # ddg <query> <outfile.json> : recherche web → [{title,url}]
32
+ ddg() {
33
+ local q="$1" out="$2"
34
+ curl -s -m 20 --compressed -A "$UA" --get --data-urlencode "q=$q" "https://html.duckduckgo.com/html/" \
35
+ | python3 -c "$PYEXTRACT" "$out" || echo '[]' > "$out"
36
+ sleep 2
37
+ }
38
+
39
+ # sem <query> <outfile.json> : Semantic Scholar → [{title,url}]
40
+ sem() {
41
+ local q="$1" out="$2"
42
+ curl -s -m 20 "https://api.semanticscholar.org/graph/v1/paper/search?query=$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))" "$q")&limit=15&fields=title,url,year" \
43
+ | jq '[.data[]? | {title:(.title + " (" + (.year|tostring) + ")"), url}]' > "$out" 2>/dev/null || echo '[]' > "$out"
44
+ echo " → $out"; sleep 2
45
+ }
46
+
47
+ axe1_lms(){ ddg "open source LMS Moodle Open edX Canvas Chamilo Sakai Frappe self-hosted comparison 2026" "$OUTDIR/01-lms.json"
48
+ ddg "open source student information system OpenSIS Gibbon Fedena course enrollment" "$OUTDIR/02-sis.json"; }
49
+ axe2_catalog(){ ddg "course catalog curriculum model levels prerequisites data model schema" "$OUTDIR/10-catalog.json"
50
+ ddg "CEFR language levels A1 A2 B1 B2 C1 C2 course progression mapping" "$OUTDIR/11-cefr.json"; }
51
+ axe3_sessions(){ ddg "class scheduling cohort section term timetable rooms instructor assignment software" "$OUTDIR/20-sessions.json"; }
52
+ axe4_enroll(){ ddg "course enrollment registration capacity waitlist seats management API" "$OUTDIR/30-enroll.json"; }
53
+ axe5_centre(){ ddg "language school training center management software groups sessions billing" "$OUTDIR/40-centre.json"
54
+ ddg "logiciel gestion centre de formation école de langues groupes séances inscriptions Algérie" "$OUTDIR/41-centre-fr.json"; }
55
+ axe6_incub(){ ddg "incubator accelerator cohort program management training sessions startups" "$OUTDIR/50-incub.json"
56
+ ddg "pépinière entreprises accompagnement formation incubés sessions suivi logiciel" "$OUTDIR/51-incub-fr.json"; }
57
+ axe7_standards(){ ddg "1EdTech IMS Global OneRoster LTI QTI SCORM xAPI interoperability spec" "$OUTDIR/60-standards.json"; }
58
+ axe8_academic(){ sem "learning management system data model enrollment" "$OUTDIR/80-acad-lms.json"
59
+ sem "course scheduling cohort enrollment student information system" "$OUTDIR/81-acad-sched.json"; }
60
+ axe9_demande(){ ddg "appel d'offres logiciel gestion centre de formation Algérie BOMOP ANEP" "$OUTDIR/70-ao.json"
61
+ ddg "agrément homologation centre de formation professionnelle Algérie cahier des charges" "$OUTDIR/71-agrement.json"; }
62
+
63
+ synth(){
64
+ for f in "$OUTDIR"/*.json; do [ -f "$f" ] || continue; jq -r '.[]?|[.title,.url]|@csv' "$f" 2>/dev/null; done | sort -u > "$OUTDIR/all-results.csv"
65
+ jq -r '.[]?|select(.url|test("arxiv|ieee|acm.org|springer|mdpi|sciencedirect|semanticscholar|researchgate"))|[.title,.url]|@csv' "$OUTDIR"/*.json 2>/dev/null | sort -u > "$OUTDIR/academic-only.csv" || true
66
+ jq -r '.[]?|select(.url|test("moodle|openedx|edx|instructure|canvas|chamilo|sakai|frappe|gibbon|opensis|fedena|imsglobal|1edtech"))|[.title,.url]|@csv' "$OUTDIR"/*.json 2>/dev/null | sort -u > "$OUTDIR/vendors-only.csv" || true
67
+ echo "✅ synthèse → all($(wc -l <"$OUTDIR/all-results.csv")) academic($(wc -l <"$OUTDIR/academic-only.csv")) vendors($(wc -l <"$OUTDIR/vendors-only.csv"))"
68
+ }
69
+
70
+ case "${1:-all}" in
71
+ all) axe1_lms; axe2_catalog; axe3_sessions; axe4_enroll; axe5_centre; axe6_incub; axe7_standards; axe8_academic; axe9_demande; synth;;
72
+ synth) synth;;
73
+ *) echo "Usage: $0 [all|synth]";;
74
+ esac
@@ -0,0 +1,13 @@
1
+ // Exemple §12 — formation : catalogue + cohorte + inscriptions. node examples/cohorte/run.mjs
2
+ import assert from 'node:assert/strict';
3
+ import { createTraining, createMemoryRepositories } from '../../src/index.js';
4
+ const t=createTraining({ repositories:createMemoryRepositories(), numbering:{ next:()=> 'ENG-A1-'+Math.floor(Math.random()*1000) } });
5
+ // P2 ATC : Anglais A1→C2
6
+ const eng=await t.catalog.createCourse({ title:'Anglais', category:'langues' });
7
+ for (const [order,label] of [[1,'A1'],[2,'A2'],[3,'B1']]) await t.catalog.addLevel(eng.id,{order,label});
8
+ const a1=(await t.catalog.listLevels(eng.id))[0];
9
+ const grp=await t.sessions.open({ courseId:eng.id, levelId:a1.id, capacity:2, room:'Salle 3', instructorId:'prof-x' });
10
+ await t.enrollments.enroll(grp.id,'eleve1'); await t.enrollments.enroll(grp.id,'eleve2');
11
+ assert.equal((await t.sessions.get(grp.id)).status,'full','groupe complet à 2');
12
+ const seats=await t.enrollments.seats(grp.id); assert.deepEqual(seats,{capacity:2,taken:2});
13
+ console.log('✅ training — cohorte « %s » %s : %o', grp.code, a1.label, seats);
package/llms.txt ADDED
@@ -0,0 +1,14 @@
1
+ # @mostajs/training — fiche LLM
2
+ RÔLE
3
+ Catalogue de formations à niveaux + sessions/groupes + inscriptions (contrôle de capacité). DB-agnostique.
4
+ EXTRACTION du course-builder iquesta. Compose numbering/notifications/booking ; délègue éval(gradebook)/paiement(payment)/présence(attendance).
5
+ EXPORTS
6
+ createTraining({ repositories, numbering?, notifications?, booking?, now? }) -> { catalog, sessions, enrollments }
7
+ createMemoryRepositories(); CourseSchema, LevelSchema, SessionSchema, EnrollmentSchema
8
+ API
9
+ catalog.createCourse/getCourse/listCourses/addLevel(courseId,{order,label,prerequisiteLevelId})/listLevels
10
+ sessions.open/get/listOpen/setInstructor/schedule/run/close/cancel (status: draft|open|full|running|closed|cancelled)
11
+ enrollments.enroll(sessionId,learnerId)[throw CapacityReached]/cancel(libère)/complete/listBySession/listByLearner/seats
12
+ PIÈGES
13
+ - capacity=0 → illimité. enroll refuse hors open|full ; full+capacité → CapacityReached. learnerId/instructorId = ids opaques (→ users/staff).
14
+ - Pas d'éval/paiement/présence/contenu ici (délégués). code session via numbering (sinon généré).
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@mostajs/training",
3
+ "version": "0.1.0",
4
+ "description": "Catalogue de formations à niveaux + sessions/groupes + inscriptions (contrôle de capacité). DB-agnostique. Extraction du course-builder iquesta. Compose booking/numbering/notifications ; délègue éval/paiement/présence.",
5
+ "license": "AGPL-3.0-or-later",
6
+ "author": "Dr Hamid MADANI <drmdh@msn.com>",
7
+ "type": "module",
8
+ "main": "src/index.js",
9
+ "exports": {
10
+ ".": "./src/index.js",
11
+ "./schemas": "./src/schemas.js"
12
+ },
13
+ "keywords": [
14
+ "mostajs",
15
+ "training",
16
+ "courses",
17
+ "lms",
18
+ "sessions",
19
+ "enrollment",
20
+ "cefr"
21
+ ],
22
+ "scripts": {
23
+ "test": "node test-scripts/unit/training.test.mjs",
24
+ "example": "node examples/cohorte/run.mjs"
25
+ }
26
+ }
package/src/index.js ADDED
@@ -0,0 +1,4 @@
1
+ // @mostajs/training — point d'entrée. Author: Dr Hamid MADANI <drmdh@msn.com>
2
+ export { createTraining } from './training.js';
3
+ export { createMemoryRepositories } from './memory-repo.js';
4
+ export { CourseSchema, LevelSchema, SessionSchema, EnrollmentSchema } from './schemas.js';
@@ -0,0 +1,8 @@
1
+ // @mostajs/training — repos mémoire. Author: Dr Hamid MADANI <drmdh@msn.com>
2
+ function coll() { const m = new Map(); return {
3
+ async create(d) { const id = d.id || globalThis.crypto.randomUUID(); const now = new Date(); const r = { id, createdAt: now, updatedAt: now, ...d }; m.set(id, r); return { ...r }; },
4
+ async findById(id) { const r = m.get(id); return r ? { ...r } : null; },
5
+ async update(id, p) { const r = m.get(id); if (!r) return null; const x = { ...r, ...p, updatedAt: new Date() }; m.set(id, x); return { ...x }; },
6
+ async find(f = () => true) { return [...m.values()].filter(f).map((r) => ({ ...r })); },
7
+ async count(f = () => true) { return [...m.values()].filter(f).length; } }; }
8
+ export function createMemoryRepositories() { return { courses: coll(), levels: coll(), sessions: coll(), enrollments: coll() }; }
package/src/schemas.js ADDED
@@ -0,0 +1,17 @@
1
+ // @mostajs/training — schémas (EntitySchema @mostajs/orm). Author: Dr Hamid MADANI <drmdh@msn.com>
2
+ // EXTRACTION du modèle formation iquesta (Formation/Activity → Course/Level/Session/Enrollment).
3
+ export const CourseSchema = { name: 'Course', collection: 'courses', timestamps: true, fields: {
4
+ title: { type: 'string', required: true }, category: { type: 'string' }, description: { type: 'string' }, active: { type: 'boolean', default: true } } };
5
+ export const LevelSchema = { name: 'Level', collection: 'levels', timestamps: true, fields: {
6
+ courseId: { type: 'string', required: true }, order: { type: 'number', required: true }, label: { type: 'string', required: true },
7
+ prerequisiteLevelId: { type: 'string', default: null } }, indexes: [{ fields: { courseId: 'asc' } }] };
8
+ export const SessionSchema = { name: 'Session', collection: 'sessions', timestamps: true, fields: {
9
+ courseId: { type: 'string', required: true }, levelId: { type: 'string', default: null }, code: { type: 'string' },
10
+ instructorId: { type: 'string', default: null }, room: { type: 'string', default: null }, capacity: { type: 'number', default: 0 },
11
+ startDate: { type: 'date', default: null }, endDate: { type: 'date', default: null },
12
+ status: { type: 'string', enum: ['draft', 'open', 'full', 'running', 'closed', 'cancelled'], default: 'draft' } },
13
+ indexes: [{ fields: { courseId: 'asc' } }, { fields: { status: 'asc' } }] };
14
+ export const EnrollmentSchema = { name: 'Enrollment', collection: 'enrollments', timestamps: true, fields: {
15
+ sessionId: { type: 'string', required: true }, learnerId: { type: 'string', required: true },
16
+ status: { type: 'string', enum: ['pending', 'confirmed', 'cancelled', 'completed'], default: 'confirmed' },
17
+ enrolledAt: { type: 'date', default: 'now' } }, indexes: [{ fields: { sessionId: 'asc' } }, { fields: { learnerId: 'asc' } }] };