Zum Inhalt springen

Python führt den Regelvertrag, ein Weg in den Fit-Check

Status: angenommen. Datum: 05.11.2026.

Anlass

Fit & Gap und Marktcheck rechnen bisher nur im Browser (lib/vergabefit/rules.ts). Die serverseitige Bewertung (VER-27) braucht dieselben Regeln in Python, ohne dass zwei Fassungen auseinanderlaufen. Zugleich entstanden zwei Übernahmen geprüfter Kriterien in die Requirement Sets: eine las die strukturierten criteria-1-Felder, die der Nachtrag vom 01.11.2026 zur Kriterienextraktion zurückgenommen hat, die andere den Freitext des v2.1-Vertrags und leitete daraus teils Regeln ab, die strenger waren als die Ausschreibung.

Entscheidung

  • services/agent/src/vergabefit/models.py ist der kanonische Regelvertrag. scripts/generate_vergabefit_contract.py erzeugt daraus lib/vergabefit/generated-contract.ts; CI prüft den Stand mit --check.
  • rules.py portiert rules.ts und fit-gap.ts. Golden-Fixtures unter tests/fixtures/vergabefit/ binden beide Fassungen an dieselben Ergebnisse. Der Browser rechnet weiter, bis die Ansichten auf die API wechseln; danach entfällt rules.ts.
  • Es gibt genau eine Übernahme: POST /runs/{id}/fit-requirements mit criteria_extraction/fit_requirements.py. Ihre Ausgabe wird gegen Criterion validiert.
  • Eine Regel ist nie strenger als die Ausschreibung. Zeiträume brauchen einen Vergangenheitsbezug, Bezugsjahre müssen als solche genannt sein, und ein Zertifikat mit zugelassener Alternative bleibt manual_review mit offener Frage.

Folgen

  • Änderungen am Vertrag beginnen in Python; die TypeScript-Typen werden nur generiert.
  • Mehr Kriterien bleiben zur manuellen Prüfung offen, dafür entstehen keine falschen "nicht erfüllt"-Ergebnisse aus Vertragslaufzeiten oder Formblattnummern.
  • Für CPV-Codes gibt es nur die Regelart cpv; Browser und rules.py bewerten sie gleich. Ein breiterer Firmencode bleibt unknown, weil er den engeren Bereich weder belegt noch ausschließt. Die Übernahme aus Kriterien erzeugt sie erst mit VER-27.
  • formale_einreichungsanforderung bleibt außerhalb des Fit-Checks. Solche Vorgaben sagen nichts über die Eignung einer Firma und bleiben im Review sichtbar.

Alternativen

  • Die strukturierten Felder wieder einführen: widerspricht dem Rückbau auf v2.1 und würde Prompts, Schema und jeden bezahlten Lauf ändern.
  • Beide Übernahmen behalten: zwei Knöpfe mit abweichenden Kategorien und IDs für dieselbe Handlung.
  • rules.ts sofort entfernen: alle Ansichten müssten vor dem Freeze am 11.11.2026 auf eine neue API wechseln.
    Python führt den Regelvertrag, ein Weg in den Fit-Check: VergabeFit Doku