diff --git a/backend/migrations-active/20260909000000-clarify-bisaya-bag-gap.cjs b/backend/migrations-active/20260909000000-clarify-bisaya-bag-gap.cjs new file mode 100644 index 0000000..f8dfbf6 --- /dev/null +++ b/backend/migrations-active/20260909000000-clarify-bisaya-bag-gap.cjs @@ -0,0 +1,19 @@ +'use strict'; + +module.exports = { + async up(queryInterface) { + await queryInterface.sequelize.query(` + UPDATE community.vocab_grammar_exercise AS exercise + SET instruction = 'Frage: „Wo ist deine Tasche?“ Bitte danach: „Nimm deine Tasche.“' + FROM community.vocab_course_lesson AS lesson + WHERE exercise.lesson_id = lesson.id + AND lesson.course_id = 1 + AND lesson.lesson_number = 30 + AND lesson.title = 'Kinder & Familie' + AND exercise.exercise_number = 2 + AND exercise.title = 'Kindersatz ergänzen'; + `); + }, + + async down() {} +}; diff --git a/backend/scripts/create-bisaya-course-content.js b/backend/scripts/create-bisaya-course-content.js index ef571c5..df65f43 100755 --- a/backend/scripts/create-bisaya-course-content.js +++ b/backend/scripts/create-bisaya-course-content.js @@ -1334,7 +1334,7 @@ const BISAYA_EXERCISES = { { exerciseTypeId: 1, title: 'Nachfragen ergänzen', - instruction: 'Fülle die Lücken.', + instruction: 'Frage: „Wo ist deine Tasche?“ Bitte danach: „Nimm deine Tasche.“', questionData: { type: 'gap_fill', text: 'Hinay-hinay {gap}. Unsay pasabot {gap}?', diff --git a/backend/services/falukantService.js b/backend/services/falukantService.js index fb626a3..c846187 100755 --- a/backend/services/falukantService.js +++ b/backend/services/falukantService.js @@ -96,7 +96,7 @@ function calcAge(birthdate) { const FAMILY_AGE = Object.freeze({ MIN_WOOING: 10, MIN_MARRIAGE: 14, - MIN_HOUSEHOLD_AND_CHILDREN: 16, + MIN_HOUSEHOLD_AND_CHILDREN: 14, }); async function getFalukantUserOrFail(hashedId) { diff --git a/docs/FALUKANT_FAMILY_AGE_RULES.md b/docs/FALUKANT_FAMILY_AGE_RULES.md index 9ca1980..cd1767b 100644 --- a/docs/FALUKANT_FAMILY_AGE_RULES.md +++ b/docs/FALUKANT_FAMILY_AGE_RULES.md @@ -9,7 +9,7 @@ verwendet daher die Differenz zwischen `CURRENT_DATE` und `birthdate` in Tagen. | --- | ---: | --- | | Werbung | 10 | Partner können vorgeschlagen und ein Vorschlag kann angenommen werden. | | Hochzeit | 14 | Eine Verlobung kann durch eine Hochzeitsfeier vollzogen werden. | -| Gemeinsamer Haushalt und Kinder | 16 | Erst dann darf die Spielmechanik eine Schwangerschaft oder Geburt aus einer Ehe erzeugen. | +| Gemeinsamer Haushalt und Kinder | 14 | Ab dem Heiratsalter darf die Spielmechanik eine Schwangerschaft oder Geburt aus einer Ehe erzeugen. | Die Regeln gelten für **beide** Personen einer Beziehung. Sie bilden bewusst Spielphasen ab; es gibt keine individuelle Prüfung körperlicher Reife und keine @@ -19,7 +19,7 @@ Eltern können ihre benannten Kinder ab 10 Spieljahren verkuppeln. Diese Werbung ist verkürzt: Nach der Auswahl eines Kandidaten genügt ein weiterer Verkuppelungsschritt zur Verlobung. Die Hochzeitsfeier bleibt trotzdem ab 14 Spieljahren erforderlich und wird dabei ausdrücklich dem verlobten Paar -zugeordnet. Erst ab 16 kann die normale automatische Kinderlogik greifen. +zugeordnet. Ab diesem Alter kann die normale automatische Kinderlogik greifen. ## Bereits im Backend und Daemon umgesetzt @@ -28,13 +28,13 @@ zugeordnet. Erst ab 16 kann die normale automatische Kinderlogik greifen. - prüft beim Annehmen eines Vorschlags beide Alter erneut; - bietet den Hochzeitstyp erst ab 14 an und prüft beim Bestellen der Feier beide Verlobte serverseitig; - - plant die Hochzeits-Schwangerschaft erst, wenn beide mindestens 16 sind. + - plant die Hochzeits-Schwangerschaft erst, wenn beide mindestens 14 sind. - `src/valuerecalculationworker.h` - vollzieht die Hochzeit nach der mindestens einen Tag alten Hochzeitsfeier nur, wenn beide Verlobte mindestens 14 sind. - `src/usercharacterworker.h` - berücksichtigt für die bestehende zufällige Ehe-Kinderlogik ausschließlich - Paare, bei denen beide mindestens 16 sind. + Paare, bei denen beide mindestens 14 sind. ## Auftrag für den externen Daemon @@ -61,13 +61,13 @@ Jeder automatische Empfängnis- oder Geburtenkandidat muss beide Bedingungen erfüllen: ```sql -mother.birthdate <= CURRENT_DATE - INTERVAL '16 days' -AND father.birthdate <= CURRENT_DATE - INTERVAL '16 days' +mother.birthdate <= CURRENT_DATE - INTERVAL '14 days' +AND father.birthdate <= CURRENT_DATE - INTERVAL '14 days' ``` Das gilt sowohl für die Zufallslogik als auch für einen geplanten `pregnancy_due_at`-Pfad. Beim geplanten Pfad soll der Daemon die Felder nicht -leeren, solange mindestens ein Elternteil noch unter 16 ist; die Schwangerschaft +leeren, solange mindestens ein Elternteil noch unter 14 ist; die Schwangerschaft wird erst verarbeitet, sobald beide die Grenze erreicht haben. Admin-Tools können weiterhin ein bewusstes, separat protokolliertes Override anbieten. @@ -75,8 +75,8 @@ können weiterhin ein bewusstes, separat protokolliertes Override anbieten. - 13/13 Jahre, verlobt, Hochzeitsfeier älter als 24 Stunden: bleibt `engaged`. - 14/14 Jahre, verlobt, Hochzeitsfeier älter als 24 Stunden: wird `married`. -- Verheiratet, ein Elternteil 15: keine automatische Schwangerschaft/Geburt. -- Verheiratet, beide 16: normaler Schwangerschafts-/Geburtspfad ist möglich. +- Verheiratet, ein Elternteil 13: keine automatische Schwangerschaft/Geburt. +- Verheiratet, beide 14: normaler Schwangerschafts-/Geburtspfad ist möglich. ## Bestehende Daten diff --git a/src/usercharacterworker.h b/src/usercharacterworker.h index a4a7ba7..14798fc 100755 --- a/src/usercharacterworker.h +++ b/src/usercharacterworker.h @@ -123,8 +123,8 @@ private: ON fu1.id = c1.user_id LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id - WHERE c1.birthdate <= CURRENT_DATE - INTERVAL '16 days' - AND c2.birthdate <= CURRENT_DATE - INTERVAL '16 days' + WHERE c1.birthdate <= CURRENT_DATE - INTERVAL '14 days' + AND c2.birthdate <= CURRENT_DATE - INTERVAL '14 days' AND random()*100 < ( 100.0 / (1