{"beispielaufgaben":[{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Ein regionaler Anbieter für Lastenrad-Sharing erfasst bei der Online-Registrierung neuer Nutzerinnen und Nutzer Angaben wie Name, Wohnanschrift, Geburtsdatum, E-Mail-Adresse und Führerscheinklasse. Die Formulardaten werden anschließend in ein zentrales Kundenverzeichnis übernommen und dort für die monatliche Abrechnung sowie für Wartungsbenachrichtigungen genutzt. In der Vergangenheit kam es dabei wiederholt zu fehlerhaften, widersprüchlichen und lückenhaften Einträgen. Erläutern Sie am geschilderten Beispiel, mit welchen konkreten Maßnahmen die Datenqualität bei der Erfassung und Übernahme dieser Registrierungsdaten gesichert werden kann. Gehen Sie dabei auf mindestens drei verschiedene Ansatzpunkte des Qualitätssicherungsprozesses ein und begründen Sie jeweils deren Wirkung auf die spätere Nutzung der Daten.","typ":"absatz"}],"beispiel_id":"bsp-datenqualitaetssicherung-erlaeutern-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird eine am Szenario belegte Erläuterung von Maßnahmen zur Datenqualitätssicherung; je nachvollziehbar erläutertem Punkt 1 P, insgesamt 5 P. Anerkannt werden u. a.: (1) Pflichtfeld- und Vollständigkeitsprüfung, damit z. B. Anschrift und E-Mail für Abrechnung/Benachrichtigung nicht fehlen (1 P); (2) Format-/Syntaxprüfung, etwa gültiges E-Mail-Muster oder plausibles Geburtsdatum (1 P); (3) Plausibilitäts-/Wertebereichsprüfung, z. B. zulässige Führerscheinklasse oder Mindestalter (1 P); (4) Dubletten-/Abgleichprüfung gegen vorhandene Kunden, um Mehrfachanlagen zu vermeiden (1 P); (5) Begründung der Wirkung, etwa korrekte Abrechnung, zustellbare Benachrichtigungen, weniger Nacharbeit (1 P). Fachlich gleichwertige, konkret am Beispiel erläuterte Maßnahmen sind anzuerkennen; bloßes Aufzählen ohne Erläuterung höchstens anteilig.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":["FIDP"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fidp-2021-winter-fdp2-a02-b"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Eine Kommune betreibt an mehreren Standorten kleine Wetterstationen, die im Minutentakt Temperatur, Luftfeuchte, Windgeschwindigkeit und Niederschlag messen und die Werte automatisch an eine zentrale Umweltdatenbank melden. Auf Basis dieser Messreihen werden Hochwasserwarnungen ausgelöst und Bewässerungspläne für öffentliche Grünflächen erstellt. Im laufenden Betrieb liefern einzelne Sensoren jedoch gelegentlich unrealistische Ausreißer, doppelte Zeitstempel oder zeitweise überhaupt keine Werte. Erläutern Sie am beschriebenen Beispiel, wie im laufenden Betrieb die Qualität dieser automatisch erfassten Messreihen gesichert werden kann. Beschreiben Sie dazu mindestens drei geeignete Prüf- oder Korrekturmaßnahmen und erläutern Sie jeweils, welchem konkreten Qualitätsproblem der Messdaten sie entgegenwirken.","typ":"absatz"}],"beispiel_id":"bsp-datenqualitaetssicherung-erlaeutern-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird eine am Sensorszenario belegte Erläuterung von Maßnahmen der Datenqualitätssicherung; je erläuterter Maßnahme mit zugeordnetem Problem 1 P, insgesamt 5 P. Anerkannt werden u. a.: (1) Grenzwert-/Plausibilitätsprüfung gegen physikalische Wertebereiche zur Erkennung unrealistischer Ausreißer (1 P); (2) Vollständigkeitsprüfung auf lückenlose Zeitreihe zur Erkennung fehlender Werte (1 P); (3) Dubletten-/Zeitstempelprüfung gegen doppelte Meldungen (1 P); (4) Sensor-Abgleich/Redundanz oder Trendprüfung benachbarter Stationen (1 P); (5) definierte Korrektur-/Kennzeichnungsregel, z. B. Markierung oder Interpolation fehlerhafter Werte statt stiller Nutzung (1 P). Fachlich gleichwertige, konkret dem jeweiligen Problem zugeordnete Maßnahmen sind anzuerkennen; nicht zugeordnete Nennungen höchstens anteilig.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":["FIDP"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fidp-2021-winter-fdp2-a02-b"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Der gemeinnützige Naturschutzverein „GrünTal“ verwaltet die Kontaktdaten seiner Fördermitglieder. Nach dem Zusammenschluss zweier bislang getrennt geführter Ortsgruppen wurden deren Adresslisten in eine gemeinsame Tabelle überführt. Bei einer ersten Sichtung fällt auf: Postleitzahlen sind teils vier-, teils fünfstellig erfasst, in der Spalte „Beitrittsdatum“ stehen unterschiedliche Datumsschreibweisen, bei mehreren Personen fehlt die E-Mail-Adresse, und einzelne Mitglieder könnten wegen leicht abweichender Namensschreibweise doppelt enthalten sein. Die Geschäftsstelle möchte künftig verlässliche Serienbriefe und Beitragsabrechnungen aus diesen Daten erzeugen. Erläutern Sie beispielhaft an dieser Situation den Prozess der Datenqualitätssicherung. Gehen Sie dabei nachvollziehbar auf die aufeinander folgenden Schritte ein, mit denen die Geschäftsstelle die Qualität der zusammengeführten Daten prüfen, verbessern und dauerhaft sichern kann.","typ":"absatz"}],"beispiel_id":"bsp-datenqualitaetssicherung-erlaeutern-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird eine an der Situation orientierte Erläuterung des Prozesses der Datenqualitätssicherung in nachvollziehbaren Schritten (5 Punkte, je Schritt 1 Punkt):\n(1) Qualitätsanforderungen/Regeln festlegen, z. B. einheitliches Datumsformat, fünfstellige PLZ, gültiges E-Mail-Format als Pflichtfeld.\n(2) Ist-Analyse (Datenprofiling): die zusammengeführte Tabelle systematisch auf Regelverstöße prüfen, also fehlende E-Mails, uneinheitliche Formate und Verdacht auf Mehrfacheinträge lokalisieren.\n(3) Bereinigung/Korrektur: Formate vereinheitlichen, fehlende Werte ergänzen bzw. nacherheben; bei Dublettenverdacht die betroffenen Datensätze klären und nur nach bestätigter Identität zusammenführen bzw. eindeutige Kennungen vergeben – keine automatische Zusammenführung allein aufgrund ähnlicher Namen.\n(4) Validierung: erneute Prüfung der bereinigten Daten gegen die definierten Regeln, ggf. Vier-Augen-Prinzip.\n(5) Dauerhafte Sicherung: Eingabevalidierung/Pflichtfelder, feste Zuständigkeiten und regelmäßige Kontrollen einrichten.\nFachlich gleichwertige, konkret auf die Situation bezogene Ausführungen sind anzuerkennen. Kein Punkt für pauschales Gleichsetzen ähnlicher Namen mit identischen Personen.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":["FIDP"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fidp-2021-winter-fdp2-a02-b"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Sie arbeiten in der IT eines städtischen Fahrradverleihs. Nach jeder Rückgabe entsteht ein Datensatz mit den Feldern stationName (Text) und mietdauerMinuten (ganze Zahl). Vor der monatlichen Auswertung soll die Datenqualität automatisiert geprüft werden.","typ":"absatz"},{"text":"Gegeben sind folgende sechs Datensätze (leer bedeutet: kein Eintrag vorhanden):\nIndex | stationName | mietdauerMinuten\n0 | Hauptbahnhof | 45\n1 | (leer) | 30\n2 | Rathausplatz | -5\n3 | Uferpromenade | 120\n4 | Markthalle | 0\n5 | (leer) | 60","typ":"absatz"},{"text":"Erstellen Sie in Java ein vollständiges, eigenständig lauffähiges Programm mit der Methode List<String> pruefeRueckgaben(Rueckgabe[] daten). Die Methode prüft je Datensatz genau zwei Kriterien: Vollständigkeit – stationName darf nicht null oder leer sein – sowie Gültigkeit – mietdauerMinuten muss größer als 0 sein. Für jede Verletzung sammelt sie eine Meldung mit Index und verletztem Kriterium und gibt die Liste zurück. Rufen Sie die Methode in einer main-Methode mit den gegebenen Datensätzen auf und geben Sie alle Meldungen zeilenweise auf der Konsole aus.","typ":"absatz"}],"beispiel_id":"bsp-datenqualitaetssicherung-erstellen-quellcode-01","freigabeart":"maschinell","loesung":[{"text":"Erwartete Java-Lösung (in Java zu erbringen; die Aufgabe verlangt Java-Quellcode):","typ":"absatz"},{"text":"import java.util.ArrayList;\nimport java.util.List;","typ":"code"},{"text":"public class Datenpruefung {\n  static class Rueckgabe {\n    String stationName; int mietdauerMinuten;\n    Rueckgabe(String s, int m){ stationName=s; mietdauerMinuten=m; }\n  }\n  static List<String> pruefeRueckgaben(Rueckgabe[] daten){\n    List<String> meldungen = new ArrayList<>();\n    for(int i=0;i<daten.length;i++){\n      Rueckgabe r = daten[i];\n      if(r.stationName==null || r.stationName.isEmpty())\n        meldungen.add(\"Index \"+i+\": Vollstaendigkeit verletzt\");\n      if(r.mietdauerMinuten<=0)\n        meldungen.add(\"Index \"+i+\": Gueltigkeit verletzt\");\n    }\n    return meldungen;\n  }\n  public static void main(String[] args){\n    Rueckgabe[] daten = {\n      new Rueckgabe(\"Hauptbahnhof\",45), new Rueckgabe(\"\",30),\n      new Rueckgabe(\"Rathausplatz\",-5), new Rueckgabe(\"Uferpromenade\",120),\n      new Rueckgabe(\"Markthalle\",0), new Rueckgabe(\"\",60)\n    };\n    for(String m : pruefeRueckgaben(daten)) System.out.println(m);\n  }\n}","typ":"code"},{"text":"Erwartete Konsolenausgabe:\nIndex 1: Vollstaendigkeit verletzt\nIndex 2: Gueltigkeit verletzt\nIndex 4: Gueltigkeit verletzt\nIndex 5: Vollstaendigkeit verletzt","typ":"absatz"},{"text":"Punkteverteilung (5 P): lauffähiger Rahmen mit Klasse/Signatur, main, Aufruf und Ausgabe 1 P; korrekte Vollständigkeitsprüfung mit beiden Meldungen (Index 1 und 5) 2 P; korrekte Gültigkeitsprüfung mit beiden Meldungen (Index 2 und 4) 2 P. Gleichwertige Meldungstexte sind zulässig; nur diese beiden Kriterien werden bepunktet, keine weiteren Regeln.","typ":"absatz"}],"operator_id":"operator.erstellen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fiae-2025-sommer-ae2-a04-d"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Sie unterstützen die Digitalisierung einer Volkshochschule. Jede Kursanmeldung besteht aus den Feldern teilnehmerEmail (Zeichenkette) und geburtsjahr (ganze Zahl). Vor dem Import in die Datenbank soll die Datenqualität automatisiert geprüft werden.","typ":"absatz"},{"text":"Gegeben ist folgende Liste von Anmeldungen (leer bedeutet: kein Eintrag vorhanden):\nIndex | teilnehmerEmail | geburtsjahr\n0 | anna@vhs.de | 1985\n1 | (leer) | 1990\n2 | ben@web.de | 1899\n3 | cem@mail.de | 2000\n4 | dana@vhs.de | 2015","typ":"absatz"},{"text":"Erstellen Sie in Python ein vollständiges, eigenständig ausführbares Programm mit der Funktion pruefe_anmeldungen(daten: list[dict]) -> list[str]. Jeder Datensatz ist ein Dictionary mit den Schlüsseln teilnehmerEmail und geburtsjahr. Die Funktion prüft genau zwei Kriterien: Vollständigkeit – teilnehmerEmail darf nicht leer sein – sowie Gültigkeit – geburtsjahr muss im Bereich von 1920 bis einschließlich 2008 liegen. Für jede Verletzung wird eine Meldung mit Index und verletztem Kriterium gesammelt und zurückgegeben. Rufen Sie die Funktion mit den gegebenen Datensätzen auf und geben Sie alle Meldungen zeilenweise aus.","typ":"absatz"}],"beispiel_id":"bsp-datenqualitaetssicherung-erstellen-quellcode-02","freigabeart":"maschinell","loesung":[{"text":"Erwartete Python-Lösung (in Python zu erbringen; die Aufgabe verlangt Python-Quellcode):","typ":"absatz"},{"text":"def pruefe_anmeldungen(daten: list[dict]) -> list[str]:\n    meldungen = []\n    for i, d in enumerate(daten):\n        if not d[\"teilnehmerEmail\"]:\n            meldungen.append(f\"Index {i}: Vollstaendigkeit verletzt\")\n        if not (1920 <= d[\"geburtsjahr\"] <= 2008):\n            meldungen.append(f\"Index {i}: Gueltigkeit verletzt\")\n    return meldungen","typ":"code"},{"text":"daten = [\n    {\"teilnehmerEmail\": \"anna@vhs.de\", \"geburtsjahr\": 1985},\n    {\"teilnehmerEmail\": \"\", \"geburtsjahr\": 1990},\n    {\"teilnehmerEmail\": \"ben@web.de\", \"geburtsjahr\": 1899},\n    {\"teilnehmerEmail\": \"cem@mail.de\", \"geburtsjahr\": 2000},\n    {\"teilnehmerEmail\": \"dana@vhs.de\", \"geburtsjahr\": 2015},\n]","typ":"code"},{"text":"for m in pruefe_anmeldungen(daten):\n    print(m)","typ":"code"},{"text":"Erwartete Ausgabe:\nIndex 1: Vollstaendigkeit verletzt\nIndex 2: Gueltigkeit verletzt\nIndex 4: Gueltigkeit verletzt","typ":"absatz"},{"text":"Punkteverteilung (5 P): lauffähiges Programm mit Funktionssignatur, Aufruf und Ausgabe 1 P; korrekte Vollständigkeitsprüfung (Meldung Index 1) 2 P; korrekte Gültigkeitsprüfung mit beiden Meldungen (Index 2 und 4) 2 P. Gleichwertige Meldungstexte sind zulässig; nur diese beiden Kriterien werden bepunktet, keine weiteren Regeln.","typ":"absatz"}],"operator_id":"operator.erstellen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fiae-2025-sommer-ae2-a04-d"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Sie arbeiten bei einem Energieversorger und betreuen die Verarbeitung von Zählerständen. Jeder Datensatz besteht aus den Feldern ZaehlerNr (Zeichenkette, stets vorhanden und nicht leer) und Ablesewert (ganze Zahl). Vor der Abrechnung soll die Datenqualität automatisiert geprüft werden.","typ":"absatz"},{"text":"Gegeben sind folgende fünf Datensätze:\nIndex | ZaehlerNr | Ablesewert\n0 | Z-100 | 3400\n1 | Z-101 | 3600\n2 | Z-100 | 3550\n3 | Z-102 | -50\n4 | Z-103 | 4100","typ":"absatz"},{"text":"Erstellen Sie in C# ein vollständiges, eigenständig lauffähiges Programm mit der Methode List<string> PruefeAblesungen(Ablesung[] daten). Die Methode prüft genau zwei Kriterien: Eindeutigkeit – jede ZaehlerNr darf innerhalb der Datensätze höchstens einmal vorkommen; ein wiederholtes Auftreten ist zu melden – sowie Gültigkeit – Ablesewert darf nicht negativ sein. Für jede Verletzung wird eine Meldung mit Index und verletztem Kriterium gesammelt und zurückgegeben. Rufen Sie die Methode in Main mit den gegebenen Datensätzen auf und geben Sie alle Meldungen zeilenweise auf der Konsole aus.","typ":"absatz"}],"beispiel_id":"bsp-datenqualitaetssicherung-erstellen-quellcode-03","freigabeart":"maschinell","loesung":[{"text":"Erwartete C#-Lösung (in C# zu erbringen; die Aufgabe verlangt C#-Quellcode):","typ":"absatz"},{"text":"using System;\nusing System.Collections.Generic;","typ":"code"},{"text":"class Ablesung {\n  public string ZaehlerNr; public int Ablesewert;\n  public Ablesung(string nr, int wert){ ZaehlerNr=nr; Ablesewert=wert; }\n}","typ":"code"},{"text":"class Program {\n  static List<string> PruefeAblesungen(Ablesung[] daten){\n    List<string> meldungen = new List<string>();\n    HashSet<string> gesehen = new HashSet<string>();\n    for(int i=0;i<daten.Length;i++){\n      Ablesung a = daten[i];\n      if(gesehen.Contains(a.ZaehlerNr))\n        meldungen.Add(\"Index \"+i+\": Eindeutigkeit verletzt\");\n      else\n        gesehen.Add(a.ZaehlerNr);\n      if(a.Ablesewert < 0)\n        meldungen.Add(\"Index \"+i+\": Gueltigkeit verletzt\");\n    }\n    return meldungen;\n  }\n  static void Main(){\n    Ablesung[] daten = {\n      new Ablesung(\"Z-100\",3400), new Ablesung(\"Z-101\",3600),\n      new Ablesung(\"Z-100\",3550), new Ablesung(\"Z-102\",-50),\n      new Ablesung(\"Z-103\",4100)\n    };\n    foreach(string m in PruefeAblesungen(daten)) Console.WriteLine(m);\n  }\n}","typ":"code"},{"text":"Erwartete Konsolenausgabe:\nIndex 2: Eindeutigkeit verletzt\nIndex 3: Gueltigkeit verletzt","typ":"absatz"},{"text":"Hinweis zur Korrektur: Da laut Aufgabe jede ZaehlerNr stets vorhanden und nicht leer ist, entfällt der Sonderfall leerer Schlüssel; die Eindeutigkeit wird über alle ZaehlerNr-Werte geprüft, also auch für einen (hier nicht vorkommenden) Wiederholungsfall ausdrücklich gemeldet.","typ":"absatz"},{"text":"Punkteverteilung (5 P): lauffähiger Rahmen mit Klasse/Signatur, Main, Aufruf und Ausgabe 1 P; korrekte Eindeutigkeitsprüfung (Meldung Index 2) 2 P; korrekte Gültigkeitsprüfung (Meldung Index 3) 2 P. Gleichwertige Meldungstexte sind zulässig; nur diese beiden Kriterien werden bepunktet, keine weiteren Regeln.","typ":"absatz"}],"operator_id":"operator.erstellen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fiae-2025-sommer-ae2-a04-d"]}],"konzept_id":"fachkonzept.datenqualitaetssicherung","schema_version":3}