docs: diagnose DOE tender URL defect (API uri instead of notice page)
This commit is contained in:
@@ -1,29 +1,45 @@
|
||||
---
|
||||
created: 2026-08-05
|
||||
title: Ausschreibungsportal — falsche URL
|
||||
title: DÖE-Ausschreibungen verlinken auf die API statt auf die Bekanntmachungsseite
|
||||
area: tender-radar
|
||||
severity: major
|
||||
files:
|
||||
- TBD (Portal/Adapter noch zu bestimmen)
|
||||
- apps/api/src/tenders/adapters/doe-opendata.adapter.ts:127
|
||||
---
|
||||
|
||||
## Problem
|
||||
|
||||
Vom User am 2026-08-05 gemeldet: In einem Ausschreibungsportal ist eine URL falsch.
|
||||
Öffnet ein Nutzer eine Ausschreibung aus der Quelle `doe-opendata`, landet er im Browser auf rohem JSON statt auf der Bekanntmachung.
|
||||
|
||||
**Details fehlen noch — beim Aufgreifen zuerst klären:**
|
||||
Ursache steht fest: `doe-opendata.adapter.ts:127` setzt
|
||||
|
||||
- Welches Portal? In Frage kommen die registrierten Quellen: `doe-opendata`, `ai-netserver` (lhs-vpbw, tender24, vergabe.landbw), `cosinex-dtvp`, die RSS-Feeds (subreport-elvis, service.bund.de) sowie die Denylist-Einträge vergabe24 und aumass, die nur verlinkt werden.
|
||||
- Welche URL? Möglich sind mehrere Stellen mit unterschiedlicher Ursache:
|
||||
- Die Abruf-URL einer Quelle in `TenderSourcePollConfig` (Ingestion greift ins Leere)
|
||||
- Die `sourceUrl` am einzelnen Tender, also der Link aus der Trefferliste in die Detailansicht des Portals (Normalisierung im Adapter)
|
||||
- Der Direktlink im CoverageBanner für die ausgeschlossenen Portale vergabe24/aumass (UI-06, Plan 14-04)
|
||||
- Führt der Link ins Leere (404), auf die falsche Ausschreibung, oder auf die Startseite statt auf die Bekanntmachung?
|
||||
```
|
||||
sourceUrl: ocdsDocument.uri
|
||||
```
|
||||
|
||||
`ocdsDocument.uri` ist die **API-Adresse** des Datensatzes, im Beispiel
|
||||
`https://oeffentlichevergabe.de/api/notices/25669778?format=ocds¬iceVersion=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
|
||||
|
||||
TBD — hängt von der Antwort oben ab.
|
||||
Die menschenlesbare Seite ist am 2026-08-05 im Browser verifiziert:
|
||||
|
||||
Ist es die `sourceUrl` je Tender, liegt der Fehler im jeweiligen Adapter beim Normalisieren und betrifft rückwirkend bereits importierte Datensätze; dann gehört ein Korrekturlauf für den Bestand dazu, nicht nur der Adapter-Fix.
|
||||
```
|
||||
https://oeffentlichevergabe.de/ui/de/notices/25669778
|
||||
→ leitet weiter auf →
|
||||
https://oeffentlichevergabe.de/ui/de/search/details?noticeId=25669778
|
||||
```
|
||||
|
||||
Ist es die Abruf-URL einer Quelle, ist es eine Konfigurationskorrektur; dann lohnt die Gegenfrage, warum ein toter Endpunkt still bleibt statt sich zu melden — das wäre der eigentliche Fund.
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user