Files
Adminator 1e51ef7def Nachtrag: alle bisher untracked Ordner + hängende Änderungen mit-committen
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/
- 12 code-workspace-Files
- STATUS-*.md
- viele M/D/R-Änderungen an bereits getrackten Files
- .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-08 02:27:02 +02:00

243 lines
17 KiB
PHP

<?php
// Phase-1-Validierung der lehrplan_anchors gegen Live-URLs und Verordnungstexte
// Erzeugt: lehrplan-validierung-phase1.json
declare(strict_types=1);
$lines = file(__DIR__ . '/anchors-dump.jsonl', FILE_IGNORE_NEW_LINES);
$results = [];
// ---- Verifizierte Fakten aus dieser Validierungssitzung ----
// 1. https://www.ris.bka.gv.at/.../Gesetzesnummer=20007850 -> 200 OK, GeltendeFassung, "Verordnung der Bundesministerin
// fuer Unterricht, Kunst und Kultur ueber die Lehrplaene der Mittelschulen" (BGBl. II 185/2012 in der Fassung BGBl. II 1/2023).
// Offizielle Fachnamen 2023:
// - "Geografie und wirtschaftliche Bildung" (nicht "Geographie und Wirtschaftskunde", nicht "GW")
// - "Geschichte und Politische Bildung" (als EIN Fach)
// - "Digitale Grundbildung" (nicht "Informatische Bildung")
// - "Biologie und Umweltbildung"
// - "Chemie", "Physik", "Mathematik", "Deutsch", "Bewegung und Sport", "Ernaehrung und Haushalt"
// Uebergreifende Themen (NICHT eigenstaendige Faecher, sondern Querschnitt):
// - Informatische Bildung, Medienbildung, Gesundheitsfoerderung, Interkulturelle Bildung,
// Umweltbildung fuer nachhaltige Entwicklung, Verkehrs- und Mobilitaetsbildung,
// Wirtschafts-, Finanz- und Verbraucher/innenbildung, Politische Bildung (als reiner Querschnitt)
// 2. https://geographie.de/publikationen/ -> 404 Not Found (bestaetigt 2026-06-08).
// Alternativ-URL: https://vgdh.de/wp-content/uploads/2023/08/Bildungsstandards_Geographie_2020_Web.pdf (DGfG 2020, 10. Auflage)
// 3. https://kultus.hessen.de/.../sekundarstufe-i-kerncurricula -> 200 OK, listet Erdkunde Sek I PDFs (HS/RS/Gym).
// 4. https://www.lehrplanplus.bayern.de/fachlehrplan/gymnasium/{7,9}/geographie -> 200 OK, "LehrplanPLUS" Bayern, aktuell (Schuljahr 2024/25 Flexibilisierung).
// 5. https://www.bildungsplaene-bw.de/.../BP2016BW_ALLG_SEK1_GEO_IK_5-6_01_02 -> 200 OK, BP 2016 BW.
// 6. https://lehrplannavigator.nrw.de/sekundarstufe-i/kernlehrplaene-fuer-das-gymnasium-aufsteigend-ab-20192020 -> 200 OK,
// Kernlehrplan Erdkunde Gymnasium SI (2019) verlinkt.
// 7. https://static.bildung-rp.de/.../Ek_G_Sk_Sek_I__LP_2021_.pdf -> 200 OK (PDF Binary), Dateiname suggeriert RP 2021,
// Inhalt nicht extrahierbar via WebFetch -> needs_human_review fuer Quote-Verifikation.
// 8. https://bildungsserver.berlin-brandenburg.de/unterricht/rahmenlehrplaene -> 200 OK,
// Berlin/Brandenburg Portalseite, verlinkt zu Rahmenlehrplaenen (kein Direkt-PDF zu Geografie Teil C).
// 9. https://www.hamburg.de/.../geographie-gym-seki-data.pdf -> 200 OK (PDF Binary), HH Geographie Gym Sek I,
// Volltext nicht extrahierbar -> needs_human_review fuer Quote-Verifikation.
// 10. https://www.schulportal.sachsen.de/lplandb/lehrplan/74 -> 200 OK, "Lehrplan Gymnasium Geographie",
// gueltig 2004/2009/2011/2019. Aelter als BW/Bayern/HE, aber LAUT QUELLE NOCH GUELTIG.
// -> Markierung "version_outdated" NICHT angebracht (er gilt offiziell). Hinweis in details.
// 11. https://cuvo.nibis.de/cuvo.php?p=download&upload=61 -> HTTP 403 fuer WebFetch (Bot-Block).
// URL-Pfad ueber sicheres Portal (cuvo.nibis.de = Niedersaechsisches Kerncurriculum-Portal).
// -> needs_human_review fuer URL-Liveness (nicht definitiv tot, nur fuer Bots blockiert).
// 12. https://v-fe.lehrplan.ch/index.php?code=... und https://fl.lehrplan.ch/index.php?code=... -> HTTP 403 fuer WebFetch.
// v-fe.lehrplan.ch = "Vorlage Lehrplan 21" (Generische Vorlage, Kantone forken davon).
// fl.lehrplan.ch = LiLe (Liechtensteiner Lehrplan, basiert auf Lehrplan 21, seit 2019 in Kraft).
// Beide Domains sind gemaess Web-Recherche aktiv -> needs_human_review fuer URL-Liveness.
// 13. https://www.lile.li/ -> 200 OK, Schulamt Liechtenstein, Portal-Seite (kein Direkt-Lehrplan-Pfad).
// 14. AT-Quotes sind in der Datenbank ueberwiegend als REDAKTIONELLE PARAPHRASEN formuliert
// ("Klimawandel wird im Fach Biologie und Umweltbildung ueber Oekosysteme ... behandelt"),
// nicht als woertliche Zitate aus dem Verordnungstext. Ohne Volltext-Diff
// kann ich Quote-Treue nicht abschliessend pruefen -> "needs_human_review" mit Hinweis,
// ausser bei direkt erkennbar woertlichen Passagen aus RIS-Verordnung.
// Direkte Zitate (erkennbar an Lehrplan-Formulierung): IDs 1082, 1083, 1084, 1104, 1105,
// 1124, 1125, 1142, 1143, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
// 1171, 1172, 1182, 1183, 1184, 1190, 1191, 1198, 1199, 1200, 1206, 1209, 1210, 1213, 1214,
// 1215, 1221.
// Subject-Whitelisten pro Land
$at_subjects_official_facher = [
'Geografie und wirtschaftliche Bildung','Geschichte und Politische Bildung','Geschichte und politische Bildung',
'Digitale Grundbildung','Biologie und Umweltbildung','Chemie','Physik','Mathematik','Deutsch',
'Bewegung und Sport','Ernaehrung und Haushalt','Ernährung und Haushalt','Kunst und Gestaltung','Musik','Technik und Design',
];
$at_subjects_querschnitt = [
'Umweltbildung für nachhaltige Entwicklung','Verkehrs- und Mobilitätsbildung',
'Wirtschafts-, Finanz- und Verbraucher:innenbildung','Gesundheitsförderung','Medienbildung',
'Interkulturelle Bildung','Informatische Bildung','Politische Bildung',
];
$ch_subjects_lehrplan21 = [
'RZG','RZG (Räume, Zeiten, Gesellschaften)','Natur und Technik (NT)','Wirtschaft, Arbeit, Haushalt (WAH)',
'Mathematik','Medien und Informatik (MI)','Ethik, Religionen, Gemeinschaft (ERG)',
'BNE — Natürliche Umwelt und Ressourcen','BNE — Wirtschaft und Konsum',
'Überfachliche Kompetenzen — Methodische',
];
$li_subjects = ['RZG','BNE — Klimakompetenz','BNE — Raumentwicklung Rheintal','BNE — Rheintal und Schutzbauten'];
// URL-Status-Map (verifiziert in dieser Session)
$url_status = [
'https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=20007850' => 'live',
'https://geographie.de/publikationen/' => 'dead404',
'https://kultus.hessen.de/unterricht/kerncurricula-und-lehrplaene/kerncurricula/sekundarstufe-i-kerncurricula' => 'live',
'https://www.lehrplanplus.bayern.de/fachlehrplan/gymnasium/9/geographie' => 'live',
'https://www.lehrplanplus.bayern.de/fachlehrplan/gymnasium/7/geographie' => 'live',
'https://www.bildungsplaene-bw.de/,Lde/Startseite/BP2016BW_ALLG/BP2016BW_ALLG_SEK1_GEO_IK_5-6_01_02' => 'live',
'https://lehrplannavigator.nrw.de/sekundarstufe-i/kernlehrplaene-fuer-das-gymnasium-aufsteigend-ab-20192020' => 'live',
'https://static.bildung-rp.de/lehrplaene/gesellschaftswissenschaften/Ek_G_Sk_Sek_I__LP_2021_.pdf' => 'live_pdf_unread',
'https://bildungsserver.berlin-brandenburg.de/unterricht/rahmenlehrplaene' => 'live_portal',
'https://www.hamburg.de/resource/blob/123438/90e4cf7b25114e17d1ac1f5c19c7b4f2/geographie-gym-seki-data.pdf' => 'live_pdf_unread',
'https://www.schulportal.sachsen.de/lplandb/lehrplan/74' => 'live',
'https://cuvo.nibis.de/cuvo.php?p=download&upload=61' => 'botblock_403',
'https://www.lile.li/' => 'live_portal',
];
// Direkt-Zitate aus AT-RIS (erkennbar woertliche Lehrplan-Formulierungen)
$at_direct_quotes = [1082,1083,1084,1104,1105,1124,1125,1142,1143,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1182,1183,1184,1190,1191,1198,1199,1200,1206,1209,1210,1213,1214,1215,1221];
foreach ($lines as $l) {
$r = json_decode($l, true);
$id = (int)$r['id'];
$country = $r['country'];
$subject = $r['subject'];
$url = $r['reference_url'];
$status = null;
$details = [];
$fix = null;
// Parse host for lehrplan.ch family
$host = parse_url($url, PHP_URL_HOST);
$is_lehrplan_ch = ($host === 'v-fe.lehrplan.ch' || $host === 'fl.lehrplan.ch');
// -- 1. URL-Status pruefen
$url_state = $url_status[$url] ?? ($is_lehrplan_ch ? 'botblock_403' : 'unknown');
if ($url_state === 'dead404') {
$status = 'url_dead';
$details[] = 'reference_url liefert HTTP 404 (verifiziert 2026-06-08 via WebFetch).';
if (str_contains($url, 'geographie.de/publikationen/')) {
$fix = 'reference_url ersetzen durch https://vgdh.de/wp-content/uploads/2023/08/Bildungsstandards_Geographie_2020_Web.pdf (DGfG 2020, 10. Auflage, durch WebSearch bestaetigt)';
}
}
// -- 2. AT-Subject pruefen
if ($status === null && $country === 'AT') {
if ($subject === 'GW') {
// Bekannter Lehrer-Code, ABER seit Lehrplan 2023 heisst das Fach offiziell "Geografie und wirtschaftliche Bildung".
$status = 'needs_human_review';
$details[] = 'Subject "GW" ist gaengiges Kuerzel, offizieller Fachname seit BGBl. II 1/2023 lautet "Geografie und wirtschaftliche Bildung". Reference passt zur aktuellen Verordnung (RIS Gesetzesnummer 20007850 in GeltendeFassung).';
$fix = 'Optional: Subject auf "Geografie und wirtschaftliche Bildung" angleichen (offizielle Bezeichnung 2023).';
} elseif ($subject === 'Politische Bildung') {
// Politische Bildung ist KEIN eigenstaendiges Fach mehr, sondern Teil von "Geschichte und Politische Bildung" und Querschnittsthema.
$status = 'subject_wrong';
$details[] = 'Im AT-Lehrplan 2023 (BGBl. II 1/2023) gibt es kein eigenstaendiges Pflichtfach "Politische Bildung". Politische Bildung ist (a) Teil des Fachs "Geschichte und Politische Bildung" und (b) Querschnittsthema. Reference-URL ist korrekt (RIS), aber Subject suggeriert ein nicht existierendes Fach.';
$fix = 'Subject auf "Geschichte und Politische Bildung" aendern ODER Quelle als Querschnittsthema kennzeichnen (z. B. "Querschnitt: Politische Bildung").';
} elseif ($subject === 'Informatische Bildung') {
// Im 2023er Lehrplan: Querschnittsthema; das eigenstaendige Pflichtfach heisst "Digitale Grundbildung".
$status = 'subject_wrong';
$details[] = 'Im AT-Lehrplan 2023 ist "Informatische Bildung" Querschnittsthema; das eigenstaendige Pflichtfach heisst "Digitale Grundbildung". Wenn der Anker ein Fach meinen soll, ist die Bezeichnung falsch.';
$fix = 'Subject auf "Digitale Grundbildung" aendern (wenn Fach gemeint) ODER explizit als "Querschnitt: Informatische Bildung" auszeichnen.';
} elseif (in_array($subject, $at_subjects_official_facher, true) || in_array($subject, $at_subjects_querschnitt, true)) {
// Subject ist entweder offizielles Fach oder dokumentiertes Querschnittsthema in der Verordnung.
if (in_array($id, $at_direct_quotes, true)) {
$status = 'ok';
$details[] = 'Subject in BGBl. II 1/2023 dokumentiert (Fach oder Querschnittsthema). Quote folgt Lehrplan-Formulierung (Direkt-/Naheparaphrase). reference_url live.';
} else {
$status = 'needs_human_review';
$details[] = 'Subject und URL OK. Quote ist eine redaktionelle Brueckenformulierung (kein direktes RIS-Zitat). Wortlaut muss gegen den Volltext der jeweiligen Fachlehrplan-Anlage manuell abgeglichen werden.';
}
} else {
$status = 'needs_human_review';
$details[] = 'Subject "' . $subject . '" nicht in der bestaetigten AT-Fach-/Querschnitts-Liste. Manuell pruefen.';
}
}
// -- 3. CH-Subject + URL
if ($status === null && $country === 'CH') {
if (!in_array($subject, $ch_subjects_lehrplan21, true)) {
$status = 'needs_human_review';
$details[] = 'Subject "' . $subject . '" nicht in der Standard-Lehrplan-21-Fachbereichsliste. Manuell pruefen.';
} elseif (str_contains($subject, 'BNE')) {
// BNE ist im Lehrplan 21 Leitidee, nicht eigenstaendiger Code e|200|1. URL-Code ggf. nicht passend.
$status = 'needs_human_review';
$details[] = 'BNE ist im Lehrplan 21 als Leitidee/Querschnitt verankert, nicht als eigenstaendiger Fachbereich. Der URL-Code "e|200|1" verweist auf eine Lehrplan-Vorlagen-Sicht (v-fe = Vorlage Fremdevaluation/Entwurf). Aktuellster Ankerpunkt zu BNE ware lehrplan.ch/index.php?nav=overview oder kantonale Spezifizierungen. URL-Liveness wegen Bot-Block 403 nicht automatisch verifizierbar.';
$fix = 'Pruefen, ob ein expliziter LP21-BNE-Querverweis (z. B. https://www.lehrplan21.ch/grundlagen-bne) sinnvoller ist als der v-fe-Code.';
} else {
$status = 'needs_human_review';
$details[] = 'Subject ist Lehrplan-21-Fachbereich, plausibel. URL-Liveness fuer v-fe.lehrplan.ch nicht automatisch verifizierbar (WebFetch 403, Bot-Block). Domain laut Web-Recherche aktiv, Code-Schema (b|<id>|4) ist Lehrplan-21-konform. Quote ist redaktionelle Bruecke (kein woertliches LP21-Zitat) und muss manuell gegen den offiziellen LP21-Wortlaut geprueft werden.';
}
}
// -- 4. LI-Subject + URL
if ($status === null && $country === 'LI') {
if (!in_array($subject, $li_subjects, true)) {
$status = 'needs_human_review';
$details[] = 'Subject "' . $subject . '" liechtensteinspezifisch, nicht automatisch bewertbar.';
} elseif (str_contains($subject, 'BNE')) {
$status = 'needs_human_review';
$details[] = 'BNE im LiLe als Querschnittsperspektive vorhanden, aber URL-Code b|6|4 zeigt RZG (Fachbereich), nicht den BNE-Querverweis. Inhaltliche Bindung Geografie<->BNE ist plausibel, aber Quote/URL koppeln BNE-Marker an RZG-Seite. Manuell pruefen. URL-Liveness wegen Bot-Block nicht automatisch verifizierbar (fl.lehrplan.ch laut Web-Recherche aktiv).';
} else {
// LI:RZG
$status = 'needs_human_review';
$details[] = 'LiLe basiert auf Lehrplan 21 und ist seit 2019 gueltig. Subject RZG passt. URL-Liveness wegen Bot-Block (403) nicht automatisch verifiziert; Domain laut Web-Recherche aktiv. Quote ist redaktionelle Bruecke, nicht woertlich aus LiLe.';
}
}
// -- 5. DE-Subject + URL
if ($status === null && $country === 'DE') {
if ($subject === 'Erdkunde' || $subject === 'Geographie') {
// Beide Bezeichnungen je Bundesland korrekt.
if ($url_state === 'live') {
$status = 'ok';
$details[] = 'reference_url ist live (Portal-/Plan-Seite). Subject "' . $subject . '" entspricht offizieller Bezeichnung des verlinkten Bundesland-Lehrplans (HE/NRW: Erdkunde; BW/BY/HH/SN: Geographie; RP: Erdkunde im Verbund Gesellschaftswissenschaften).';
if (str_contains($url, 'schulportal.sachsen.de')) {
$details[] = 'Hinweis: SN-Lehrplan ist 2004 erstmals erlassen, mit Ueberarbeitungen 2009/2011/2019. Offiziell weiter gueltig laut Schulportal Sachsen - kein "version_outdated", aber inhaltlich der aelteste aktive Plan im Set.';
}
if ($url === 'https://kultus.hessen.de/unterricht/kerncurricula-und-lehrplaene/kerncurricula/sekundarstufe-i-kerncurricula') {
$details[] = 'Hinweis: Reference-URL ist Uebersichtsseite; das eigentliche KC-PDF (HS/RS/Gym) wird von dort verlinkt, aber nicht direkt angesteuert. Praeziserer Direkt-Link zu HE-Erdkunde-KC waere besser.';
}
} elseif ($url_state === 'live_portal') {
$status = 'needs_human_review';
$details[] = 'reference_url ist Portal-/Uebersichtsseite (bildungsserver.berlin-brandenburg.de/unterricht/rahmenlehrplaene), nicht der RLP-Teil C Geografie direkt. Der RLP 1-10 Berlin/Brandenburg ist gueltig (2017+), aber URL ist zu unspezifisch.';
$fix = 'Auf Direkt-PDF zu "Teil C Geografie" des Rahmenlehrplans 1-10 Berlin-Brandenburg verlinken (z. B. bildungsserver.berlin-brandenburg.de/.../rlp-1-10-online).';
} elseif ($url_state === 'live_pdf_unread') {
$status = 'needs_human_review';
$details[] = 'reference_url liefert PDF (200 OK), Volltext aus Bot-Sicht nicht extrahierbar. Dateiname und Titel suggerieren passendes Bundesland-/Fach-Dokument, aber Quote muss manuell gegen den PDF-Inhalt verglichen werden.';
} elseif ($url_state === 'botblock_403') {
$status = 'needs_human_review';
$details[] = 'reference_url WebFetch HTTP 403 (Bot-Block). Portal cuvo.nibis.de ist Niedersaechsisches Curriculum-Portal, gemaess Web-Recherche aktiv. URL-Liveness manuell verifizieren; Quote manuell pruefen.';
} else {
$status = 'needs_human_review';
$details[] = 'URL-Status unklar, manuell pruefen.';
}
} elseif ($subject === 'Geographie (national)') {
// bereits oben als url_dead behandelt
$status = $status ?? 'needs_human_review';
$details[] = 'DGfG-Bildungsstandards sind nationaler KMK-naher Bezugsrahmen, aber kein verbindlicher Lehrplan. Subject-Markierung "Geographie (national)" ist konzeptionell ok, sofern erkennbar.';
}
}
if ($status === null) {
$status = 'needs_human_review';
$details[] = 'Klassifikator hat keinen Treffer.';
}
$entry = [
'id' => $id,
'status' => $status,
'details' => implode(' ', $details),
];
if ($fix !== null) $entry['fix_suggestion'] = $fix;
$results[] = $entry;
}
// Sortiere nach id
usort($results, fn($a,$b)=>$a['id']<=>$b['id']);
file_put_contents(__DIR__ . '/lehrplan-validierung-phase1.json', json_encode($results, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT));
// Summary
$by_status = [];
foreach ($results as $r) $by_status[$r['status']] = ($by_status[$r['status']]??0)+1;
echo "TOTAL: ".count($results)."\n";
foreach ($by_status as $s=>$c) echo " $s: $c\n";