feat(bisaya-course): refine phase 4 didactics and enhance course content generation
All checks were successful
Deploy to production / deploy (push) Successful in 5m19s

- Corrected grammatical errors and improved the phrasing in the BISAYA_PHASE4_DIDACTICS, ensuring clarity and accuracy in the learning materials.
- Updated the course content generation script to include lessons from phase 5, enhancing the overall structure and flow of the course.
- Introduced a new vocabulary course content synchronization process, improving the integration of vocabulary resources across different modules.
- Enhanced the VocabService to dynamically adjust temperature settings based on the mode, optimizing response generation for different contexts.
- Added new localized titles and vocabulary entries in multiple languages, enriching the learning experience for users.
This commit is contained in:
Torsten Schulz (local)
2026-04-17 16:00:41 +02:00
parent 5c315c477f
commit 71d5922409
18 changed files with 410 additions and 86 deletions

View File

@@ -31,8 +31,8 @@ export const BISAYA_PHASE4_DIDACTICS = {
],
practicalTasks: [
{
title: 'Routine in 5 Saetzen',
text: 'Sprich eine Routine mit fuenf kurzen Saetzen (Essen, Tasche, Haende, Schule, Losgehen).'
title: 'Routine in 5 Sätzen',
text: 'Sprich eine Routine mit fünf kurzen Sätzen (Essen, Tasche, Hände, Schule, Losgehen).'
}
]
},
@@ -79,7 +79,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
{ target: 'Kinsa ni?', gloss: 'Wer ist das?' },
{ target: 'Asa imong bag?', gloss: 'Wo ist deine Tasche?' },
{ target: 'Andam na ka?', gloss: 'Bist du fertig?' },
{ target: 'Ganahan ka?', gloss: 'Moechtest du?' },
{ target: 'Ganahan ka?', gloss: 'Möchtest du?' },
{ target: 'Ali diri.', gloss: 'Komm her.' },
{ target: 'Ayaw.', gloss: 'Nicht (tu das nicht).' }
],
@@ -100,7 +100,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
practicalTasks: [
{
title: 'Frage oder Aufforderung',
text: 'Forme drei deutsche Saetze einmal als Frage und einmal als kurze Aufforderung auf Bisaya.'
text: 'Forme drei deutsche Sätze einmal als Frage und einmal als kurze Aufforderung auf Bisaya.'
}
]
},
@@ -146,7 +146,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
{ target: 'Andam na ka?', gloss: 'Bist du fertig?' },
{ target: 'Asa imong bag?', gloss: 'Wo ist deine Tasche?' },
{ target: 'Magtuon ta.', gloss: 'Lass uns lernen.' },
{ target: 'Hugas sa kamot.', gloss: 'Wasch dir die Haende.' },
{ target: 'Hugas sa kamot.', gloss: 'Wasch dir die Hände.' },
{ target: 'Pagkahuman, magdula ta.', gloss: 'Danach spielen wir.' },
{ target: 'Sunod, matulog na ta.', gloss: 'Danach gehen wir schlafen.' }
],
@@ -160,7 +160,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
practicalTasks: [
{
title: '8 Situationen',
text: 'Beantworte acht Situationen: Hunger, Tasche, Haende, Hausaufgaben, Spielen, Schlafen.'
text: 'Beantworte acht Situationen: Hunger, Tasche, Hände, Hausaufgaben, Spielen, Schlafen.'
}
]
},
@@ -177,20 +177,20 @@ export const BISAYA_PHASE4_DIDACTICS = {
{ target: 'pamilya', gloss: 'Familie' },
{ target: 'eskwela', gloss: 'Schule' },
{ target: 'tabang', gloss: 'Hilfe' },
{ target: 'Kapoy na ka?', gloss: 'Bist du muede?' },
{ target: 'Kapoy na ka?', gloss: 'Bist du müde?' },
{ target: 'Ayaw kabalaka.', gloss: 'Mach dir keine Sorgen.' }
],
speakingPrompts: [
{
title: 'Familien-Fuersorge',
prompt: 'Sprich zwei kurze Fuersorgesetze zu Kind und Schule.',
title: 'Familien-Fürsorge',
prompt: 'Sprich zwei kurze Fürsorgesätze zu Kind und Schule.',
cue: 'Ayaw kabalaka. Andam na ka sa eskwela?'
}
],
practicalTasks: [
{
title: 'Spiralabruf',
text: 'Nimm vier alte Woerter (Nanay/Tatay/bata/eskwela) und baue vier kurze Saetze.'
text: 'Nimm vier alte Wörter (Nanay/Tatay/bata/eskwela) und baue vier kurze Sätze.'
}
]
},
@@ -202,8 +202,8 @@ export const BISAYA_PHASE4_DIDACTICS = {
],
corePatterns: [
{ target: 'Magdula ta.', gloss: 'Lass uns spielen.' },
{ target: 'Ganahan ka modula?', gloss: 'Moechtest du spielen?' },
{ target: 'Lingaw ka?', gloss: 'Hast du Spass?' },
{ target: 'Ganahan ka modula?', gloss: 'Möchtest du spielen?' },
{ target: 'Lingaw ka?', gloss: 'Hast du Spaß?' },
{ target: 'Human na ang duwa.', gloss: 'Das Spiel ist vorbei.' },
{ target: 'Pahuway sa.', gloss: 'Mach erst mal Pause.' },
{ target: 'Dali na.', gloss: 'Komm, beeil dich.' },
@@ -238,19 +238,19 @@ export const BISAYA_PHASE4_DIDACTICS = {
{ target: 'sayaw', gloss: 'Tanz' },
{ target: 'drawing', gloss: 'Malen/Zeichnen' },
{ target: 'Ganahan ka ani?', gloss: 'Magst du das?' },
{ target: 'Pilia.', gloss: 'Waehle.' }
{ target: 'Pilia.', gloss: 'Wähle.' }
],
speakingPrompts: [
{
title: 'Auswahl anbieten',
prompt: 'Biete zwei Aktivitaeten an und lasse das Kind waehlen.',
prompt: 'Biete zwei Aktivitäten an und lasse das Kind wählen.',
cue: 'Ganahan ka og kanta o sayaw? Pilia.'
}
],
practicalTasks: [
{
title: 'Wortschatz aktiv',
text: 'Nenne sechs Spielsachen/Aktivitaeten und bilde zwei kurze Fragen dazu.'
text: 'Nenne sechs Spielsachen/Aktivitäten und bilde zwei kurze Fragen dazu.'
}
]
},
@@ -266,7 +266,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
{ target: 'Magdula ta.', gloss: 'Lass uns spielen.' },
{ target: 'Human na ka?', gloss: 'Bist du fertig?' },
{ target: 'Naa kay assignment?', gloss: 'Hast du Hausaufgaben?' },
{ target: 'Hugas sa kamot.', gloss: 'Wasch dir die Haende.' },
{ target: 'Hugas sa kamot.', gloss: 'Wasch dir die Hände.' },
{ target: 'Ayaw pagdali.', gloss: 'Kein Stress.' },
{ target: 'Sunod, matulog na ta.', gloss: 'Danach schlafen wir.' }
],
@@ -280,7 +280,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
practicalTasks: [
{
title: 'Tempo',
text: 'Sag acht Saetze laut und schnell (aber klar), ohne zu stolpern.'
text: 'Sag acht Sätze laut und schnell (aber klar), ohne zu stolpern.'
}
]
},
@@ -303,14 +303,14 @@ export const BISAYA_PHASE4_DIDACTICS = {
speakingPrompts: [
{
title: 'Checkpoint-Szene',
prompt: 'Loese eine kurze Szene: Schule, Tasche, Hausaufgabe, Routine.',
prompt: 'Löse eine kurze Szene: Schule, Tasche, Hausaufgabe, Routine.',
cue: 'Asa imong bag? Andam na ka sa eskwela? Naa kay assignment? Sunod, matulog na ta.'
}
],
practicalTasks: [
{
title: 'Diagnose',
text: 'Markiere die Saetze, die nicht sofort kamen, und wiederhole sie dreimal im Typing.'
text: 'Markiere die Sätze, die nicht sofort kamen, und wiederhole sie dreimal im Typing.'
}
]
},
@@ -324,7 +324,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
{ target: 'Adto ta sa doktor.', gloss: 'Wir gehen zum Arzt.' },
{ target: 'Naa mi appointment.', gloss: 'Wir haben einen Termin.' },
{ target: 'Naa moy appointment?', gloss: 'Haben Sie einen Termin?' },
{ target: 'Unsay gibati nimo?', gloss: 'Was fuehlst du / was hast du?' },
{ target: 'Unsay gibati nimo?', gloss: 'Was fühlst du / was hast du?' },
{ target: 'Sakit diri.', gloss: 'Es tut hier weh.' },
{ target: 'Pila ka oras ang hulat?', gloss: 'Wie lange ist die Wartezeit?' },
{ target: 'Maghulat ta.', gloss: 'Wir warten.' },
@@ -340,7 +340,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
practicalTasks: [
{
title: '3 Fragen',
text: 'Uebe drei Fragen fuer den Arztbesuch: Termin, Beschwerden, Wartezeit.'
text: 'Übe drei Fragen für den Arztbesuch: Termin, Beschwerden, Wartezeit.'
}
]
},
@@ -357,7 +357,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
{ target: 'dose', gloss: 'Dosis' },
{ target: 'Pila ang dose?', gloss: 'Wie ist die Dosierung?' },
{ target: 'Pila ka adlaw?', gloss: 'Wie viele Tage?' },
{ target: 'Naa moy tambal ani?', gloss: 'Haben Sie Medizin dafuer?' },
{ target: 'Naa moy tambal ani?', gloss: 'Haben Sie Medizin dafür?' },
{ target: 'Unsaon pag-inom?', gloss: 'Wie nimmt man das ein?' }
],
speakingPrompts: [
@@ -437,7 +437,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
practicalTasks: [
{
title: 'Notfallanker',
text: 'Uebe vier Notfallsaetze, bis sie ohne Lesen kommen.'
text: 'Übe vier Notfallsätze, bis sie ohne Lesen kommen.'
}
]
},
@@ -450,7 +450,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
corePatterns: [
{ target: 'Adto ta sa doktor.', gloss: 'Wir gehen zum Arzt.' },
{ target: 'Naa mi appointment.', gloss: 'Wir haben einen Termin.' },
{ target: 'Naa moy tambal ani?', gloss: 'Haben Sie Medizin dafuer?' },
{ target: 'Naa moy tambal ani?', gloss: 'Haben Sie Medizin dafür?' },
{ target: 'Unsaon pag-inom?', gloss: 'Wie nimmt man das ein?' },
{ target: 'Sakit kaayo.', gloss: 'Es tut sehr weh.' },
{ target: 'Nagsugod ganiha.', gloss: 'Es fing vorhin an.' },
@@ -467,7 +467,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
practicalTasks: [
{
title: 'Tempo-Mix',
text: 'Sag acht Saetze schnell hintereinander, ohne zu stolpern.'
text: 'Sag acht Sätze schnell hintereinander, ohne zu stolpern.'
}
]
},
@@ -489,15 +489,15 @@ export const BISAYA_PHASE4_DIDACTICS = {
],
speakingPrompts: [
{
title: 'Fuersorgefolge',
prompt: 'Reagiere mit drei Fuersorgesatzen auf eine Beschwerde.',
title: 'Fürsorgefolge',
prompt: 'Reagiere mit drei Fürsorgesätzen auf eine Beschwerde.',
cue: 'Ayaw kabalaka. Magpahuway sa. Uminom og tubig.'
}
],
practicalTasks: [
{
title: 'Problem -> Antwort',
text: 'Bilde fuenf Paare aus Problem und Antwort (z.B. sakit -> magpahuway).'
text: 'Bilde fünf Paare aus Problem und Antwort (z.B. sakit -> magpahuway).'
}
]
},
@@ -519,7 +519,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
],
speakingPrompts: [
{
title: 'Pflegegespraech',
title: 'Pflegegespräch',
prompt: 'Biete Essen, Wasser, Ruhe an und frage nach Besserung.',
cue: 'Mokaon sa ka. Uminom og tubig. Magpahuway sa. Mas maayo na ka?'
}
@@ -527,7 +527,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
practicalTasks: [
{
title: 'Pflegekette',
text: 'Sprich eine Pflegekette mit mindestens fuenf kurzen Saetzen.'
text: 'Sprich eine Pflegekette mit mindestens fünf kurzen Sätzen.'
}
]
},
@@ -540,7 +540,7 @@ export const BISAYA_PHASE4_DIDACTICS = {
corePatterns: [
{ target: 'ulo', gloss: 'Kopf' },
{ target: 'tiyan', gloss: 'Bauch' },
{ target: 'likod', gloss: 'Ruecken' },
{ target: 'likod', gloss: 'Rücken' },
{ target: 'tutunlan', gloss: 'Hals' },
{ target: 'hilanat', gloss: 'Fieber' },
{ target: 'ubo', gloss: 'Husten' },
@@ -550,15 +550,15 @@ export const BISAYA_PHASE4_DIDACTICS = {
],
speakingPrompts: [
{
title: 'Koerper + Schmerz',
prompt: 'Sage drei Saetze: wo es weh tut und was du brauchst.',
title: 'Körper + Schmerz',
prompt: 'Sage drei Sätze: wo es weh tut und was du brauchst.',
cue: 'Sakit akong ulo. Sakit akong tiyan. Asa ang tambal?'
}
],
practicalTasks: [
{
title: 'Koerperrunde',
text: 'Nenne vier Koerperteile und bilde zu jedem einen kurzen Satz mit sakit.'
title: 'Körperrunde',
text: 'Nenne vier Körperteile und bilde zu jedem einen kurzen Satz mit sakit.'
}
]
},
@@ -611,14 +611,14 @@ export const BISAYA_PHASE4_DIDACTICS = {
speakingPrompts: [
{
title: 'Checkpoint-Szene',
prompt: 'Loese eine Szene: Termin, Beschwerden, Apotheke, Notfall.',
prompt: 'Löse eine Szene: Termin, Beschwerden, Apotheke, Notfall.',
cue: 'Naa mi appointment. Sakit kaayo. Naa moy tambal ani? Tawag ug doktor.'
}
],
practicalTasks: [
{
title: 'Diagnose',
text: 'Markiere die unsicheren Saetze und wiederhole sie im Typing bis sie sofort kommen.'
text: 'Markiere die unsicheren Sätze und wiederhole sie im Typing bis sie sofort kommen.'
}
]
},
@@ -980,17 +980,17 @@ export const BISAYA_PHASE4_LESSONS = [
{ week: 7, day: 3, num: 68, type: 'review', title: 'Woche 7 - Intensivwiederholung I', desc: 'Kinder, Schule und Familienroutine intensiv wiederholen (Abruf + Rollenwechsel)', targetMin: 34, targetScore: 82, review: false, cultural: null },
{ week: 7, day: 3, num: 69, type: 'vocab', title: 'Spiralwiederholung - Familie, Kinder & Fürsorge', desc: 'Frühe Kernmuster in Kinder-/Schulszenen reaktivieren', targetMin: 24, targetScore: 85, review: true, cultural: null },
{ week: 7, day: 4, num: 70, type: 'conversation', title: 'Spielen & Freizeit', desc: 'Spiel, Pause, Regeln und ruhige Korrektur im Kinderalltag sprechen', targetMin: 24, targetScore: 80, review: false, cultural: null },
{ week: 7, day: 4, num: 71, type: 'vocab', title: 'Spielsachen & Aktivitäten', desc: 'Spiel- und Freizeitwortschatz aktiv nutzen (Auswahl, Fragen, kurze Saetze)', targetMin: 24, targetScore: 85, review: true, cultural: null },
{ week: 7, day: 4, num: 71, type: 'vocab', title: 'Spielsachen & Aktivitäten', desc: 'Spiel- und Freizeitwortschatz aktiv nutzen (Auswahl, Fragen, kurze Sätze)', targetMin: 24, targetScore: 85, review: true, cultural: null },
{ week: 7, day: 5, num: 72, type: 'review', title: 'Woche 7 - Intensivwiederholung II', desc: 'Große Mischwiederholung zur Kinder- und Schulwoche (Szene bauen)', targetMin: 34, targetScore: 82, review: false, cultural: null },
{ week: 7, day: 5, num: 73, type: 'vocab', title: 'Woche 7 - Checkpoint', desc: 'Checkpoint zu Kindern, Schule, Hausaufgaben und Routine (Diagnose + freie Szene)', targetMin: 24, targetScore: 84, review: true, cultural: null },
{ week: 8, day: 1, num: 74, type: 'conversation', title: 'Arzt & Termin', desc: 'Arzttermine, Beschwerden und Wartezeit als Mini-Dialog organisieren', targetMin: 26, targetScore: 80, review: false, cultural: null },
{ week: 8, day: 1, num: 75, type: 'vocab', title: 'Apotheke & Medikamente', desc: 'Apotheke, Rezept, Dosierung und Einnahmefragen aktiv abrufen', targetMin: 24, targetScore: 85, review: true, cultural: null },
{ week: 8, day: 2, num: 76, type: 'grammar', title: 'Beschwerden genauer beschreiben', desc: 'Staerke, Verlauf, Zeitpunkte und wiederkehrende Beschwerden ausdruecken', targetMin: 26, targetScore: 78, review: true, cultural: null },
{ week: 8, day: 2, num: 76, type: 'grammar', title: 'Beschwerden genauer beschreiben', desc: 'Stärke, Verlauf, Zeitpunkte und wiederkehrende Beschwerden ausdrücken', targetMin: 26, targetScore: 78, review: true, cultural: null },
{ week: 8, day: 2, num: 77, type: 'conversation', title: 'Notfälle & Hilfe', desc: 'Hilfe rufen, kurze Anweisungen geben und Notfallanker sicher sprechen', targetMin: 26, targetScore: 80, review: false, cultural: null },
{ week: 8, day: 3, num: 78, type: 'review', title: 'Woche 8 - Intensivwiederholung I', desc: 'Arzt, Apotheke, Beschwerden und Hilfe intensiv wiederholen (Tempo + Abruf)', targetMin: 34, targetScore: 82, review: false, cultural: null },
{ week: 8, day: 3, num: 79, type: 'vocab', title: 'Spiralwiederholung - Gesundheit', desc: 'Fürsorge und Gesundheit als Langzeitabruf (Problem -> Antwort)', targetMin: 24, targetScore: 85, review: true, cultural: null },
{ week: 8, day: 4, num: 80, type: 'conversation', title: 'Essen, Ruhe & Genesung', desc: 'Pflegegespraeche: Essen, Wasser, Ruhe, Medizin und Besserung verbinden', targetMin: 24, targetScore: 80, review: false, cultural: null },
{ week: 8, day: 4, num: 81, type: 'vocab', title: 'Körper, Symptome & Pflege', desc: 'Koerper, Symptome und Pflegewortschatz mit kurzen Schmerzsaetzen kombinieren', targetMin: 24, targetScore: 85, review: true, cultural: null },
{ week: 8, day: 4, num: 80, type: 'conversation', title: 'Essen, Ruhe & Genesung', desc: 'Pflegegespräche: Essen, Wasser, Ruhe, Medizin und Besserung verbinden', targetMin: 24, targetScore: 80, review: false, cultural: null },
{ week: 8, day: 4, num: 81, type: 'vocab', title: 'Körper, Symptome & Pflege', desc: 'Körper, Symptome und Pflegewortschatz mit kurzen Schmerzsätzen kombinieren', targetMin: 24, targetScore: 85, review: true, cultural: null },
{ week: 8, day: 5, num: 82, type: 'review', title: 'Woche 8 - Intensivwiederholung II', desc: 'Große Mischwiederholung zu Gesundheit und Hilfe (Kontraste + freie Antworten)', targetMin: 34, targetScore: 82, review: false, cultural: null },
{ week: 8, day: 5, num: 83, type: 'vocab', title: 'Woche 8 - Checkpoint', desc: 'Checkpoint zu Arzt, Apotheke, Beschwerden und Notfall (Diagnose + Typing)', targetMin: 24, targetScore: 84, review: true, cultural: null },
{ week: 9, day: 1, num: 84, type: 'conversation', title: 'Einkaufen vertiefen', desc: 'Komplexere Einkaufs- und Auswahlgespräche führen', targetMin: 18, targetScore: 80, review: false, cultural: null },

View File

@@ -16,7 +16,7 @@ import User from '../models/community/user.js';
import { BISAYA_DIDACTICS_24_43, BISAYA_RELATIONSHIP_ANCHOR_DIDACTICS } from './bisaya-course-plan-24-43.js';
import { BISAYA_PHASE3_DIDACTICS, BISAYA_PHASE3_LESSONS } from './bisaya-course-phase3-extension.js';
import { BISAYA_PHASE4_DIDACTICS, BISAYA_PHASE4_LESSONS } from './bisaya-course-phase4-extension.js';
import { BISAYA_PHASE5_DIDACTICS } from './bisaya-course-phase5-extension.js';
import { BISAYA_PHASE5_DIDACTICS, BISAYA_PHASE5_LESSONS } from './bisaya-course-phase5-extension.js';
function withTypeName(exerciseTypeName, exercise) {
return {
@@ -35,7 +35,8 @@ const GENERATED_BISAYA_DIDACTICS = {
const SAFE_EXERCISE_UPDATE_TITLES = new Set([
...BISAYA_PHASE3_LESSONS.map((lesson) => lesson.title),
...BISAYA_PHASE4_LESSONS.map((lesson) => lesson.title)
...BISAYA_PHASE4_LESSONS.map((lesson) => lesson.title),
...BISAYA_PHASE5_LESSONS.map((lesson) => lesson.title)
]);
function normalizeText(value) {

View File

@@ -31,6 +31,7 @@ const SAFE_SYNC_STEPS = {
'backend/scripts/create-bisaya-course-content.js'
],
'german-for-bisaya': [
'backend/scripts/create-german-for-bisaya-course.js',
'backend/scripts/extend-german-for-bisaya-course-phase3.js',
'backend/scripts/extend-german-for-bisaya-course-phase4.js',
'backend/scripts/extend-german-for-bisaya-course-phase5.js',