Files
tessera-ctl/.planning/todos/pending/2026-08-05-ausschreibungsportal-falsche-url.md
T

2.2 KiB

created, title, area, severity, files
created title area severity files
2026-08-05 DÖE-Ausschreibungen verlinken auf die API statt auf die Bekanntmachungsseite tender-radar major
apps/api/src/tenders/adapters/doe-opendata.adapter.ts:127

Problem

Öffnet ein Nutzer eine Ausschreibung aus der Quelle doe-opendata, landet er im Browser auf rohem JSON statt auf der Bekanntmachung.

Ursache steht fest: doe-opendata.adapter.ts:127 setzt

sourceUrl: ocdsDocument.uri

ocdsDocument.uri ist die API-Adresse des Datensatzes, im Beispiel https://oeffentlichevergabe.de/api/notices/25669778?format=ocds&noticeVersion=1. Die liefert bestimmungsgemäß OCDS-JSON, keine Webseite.

Betrifft jede Stelle, die sourceUrl anzeigt: Detailansicht, Trefferliste und die Links in den E-Mail-Benachrichtigungen (tender-mail.service.ts:275 und :287).

Solution

Die menschenlesbare Seite ist am 2026-08-05 im Browser verifiziert:

https://oeffentlichevergabe.de/ui/de/notices/25669778
  → leitet weiter auf →
https://oeffentlichevergabe.de/ui/de/search/details?noticeId=25669778

Beide Formen rendern die richtige Bekanntmachung (geprüft: Titel „2026-0063, Beschaffung von Softwarelizenzen … Stadt Leverkusen"). Die zweite ist das Weiterleitungsziel und damit die stabilere Wahl — sie kommt ohne Redirect aus.

Die Nummer ist release.id, die der Adapter bereits als sourceNoticeId ablegt. Der Link lässt sich also ohne neue Datenquelle bauen.

Zwei Teile, der zweite ist der wichtigere:

  1. Adapter korrigieren, damit neue Importe den richtigen Link tragen.
  2. Bestandskorrektur — alle bereits importierten DÖE-Tender tragen die falsche URL in der Datenbank. Ohne Nachlauf bleiben sie kaputt. Muster dafür existiert: 20260721150000_tender_cpv_divisions_backfill.

Beim Umsetzen zusätzlich prüfen: ocdsDocument.uri als Feld nicht ersatzlos wegwerfen — falls es anderswo als Kennung dient. Und im Datensatz steckt unter tender.documents[0].url noch der Link auf das ausschreibende Portal selbst (im Beispiel vmp-rheinland.de); das ist eine andere Sache als die Bekanntmachungsseite, könnte aber die eigentlich nützlichere Zielseite für den Nutzer sein. Vor dem Bauen einmal mit dem User klären, welcher der beiden Links in der Detailansicht stehen soll.