feat(14-02): add RssAdapter.parseFeed + 'rss' normalizer dispatch

Fixture-first RSS parsing (INGEST-04): parses live-captured
service.bund.de (pubDate present, numeric-HTML-entity titles) and
subreport-elvis (pubDate absent, CDATA titles) feed shapes into
RawTenderRecord[] via fast-xml-parser, mirroring the DoeOpenDataAdapter
config. SourceType extended with 'rss'; normalize() dispatches 'rss'
through the existing normalizeBag() path unchanged (D-04/D-05).

Rule 1 fix: fast-xml-parser only decodes the 5 predefined XML entities,
not numeric character references — added an explicit decode step so
service.bund.de titles ("Übermittlung...") render correctly
instead of leaking raw entity syntax.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 13:17:02 +02:00
parent a47c0c57ee
commit 3a96cbbbe6
7 changed files with 597 additions and 6 deletions
@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>service.bund.de - öffentliche Ausschreibungen</title>
<link>http://www.service.bund.de/ausschreibungen</link>
<description>RSS-Feed mit aktuellen Ausschreibungen der Vergabestellen der Bundes-, Landes- und Kommunalverwaltung.</description>
<language>de-de</language>
<pubDate>Thu, 23 Jul 2026 13:06:44 +0200</pubDate>
<lastBuildDate>Thu, 23 Jul 2026 13:06:44 +0200</lastBuildDate>
<managingEditor>redaktion-support@bva.bund.de</managingEditor>
<webMaster>redaktion-support@bva.bund.de</webMaster>
<generator>Government Site Builder (GSB7.0)</generator>
<image>
<url>http://www.service.bund.de/cae/servlet/contentblob/546/normal/66/logo_a.jpg</url>
<title>service.bund.de - öffentliche Ausschreibungen</title>
<link>http://www.service.bund.de/ausschreibungen</link>
</image>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<ttl>60</ttl>
<item>
<title>&#220;bermittlung von Bohrungsdaten in die Bohrpunktkarte Deutschland 4.0 Neuaufstellung des Datenformats</title>
<link>https://www.service.bund.de/IMPORTE/Ausschreibungen/editor/Bundesanstalt-fuer-Geowissenschaften-und-Rohstoffe/2026/07/6585375.html#track=feed-callforbids</link>
<description>
<![CDATA[
Erf&uuml;llungsort: <strong> Hannover</strong>
<br />Vergabestelle: <strong>Bundesanstalt f&#252;r Geowissenschaften und Rohstoffe</strong><br />
<br />Angebotsfrist: <br />Veröffentlichungsende: <strong>23.10.2026 11:15</strong> <br />
<br />
]]>
</description>
<pubDate>Thu, 23 Jul 2026 11:15:00 +0200</pubDate>
<guid>https://www.service.bund.de/IMPORTE/Ausschreibungen/editor/Bundesanstalt-fuer-Geowissenschaften-und-Rohstoffe/2026/07/6585375.html</guid>
</item>
<item>
<title>Vhv 120_26 UFZ - Bench-scale Anaerobic Bioreactor System</title>
<link>https://www.service.bund.de/IMPORTE/Ausschreibungen/editor/Helmholtz-Zentrum-fuer-Umweltforschung-GmbH/2026/07/6585334.html#track=feed-callforbids</link>
<description>
<![CDATA[
Erf&uuml;llungsort: <strong>04318 Leipzig</strong>
<br />Vergabestelle: <strong>Helmholtz-Zentrum f&#252;r Umweltforschung GmbH - UFZ</strong><br />
<br />Angebotsfrist: <strong>07.08.2026 10:00</strong> <br />Veröffentlichungsende: <strong>07.08.2026 10:00</strong> <br />
<br />
]]>
</description>
<pubDate>Thu, 23 Jul 2026 11:00:00 +0200</pubDate>
<guid>https://www.service.bund.de/IMPORTE/Ausschreibungen/editor/Helmholtz-Zentrum-fuer-Umweltforschung-GmbH/2026/07/6585334.html</guid>
</item>
<item>
<title>Verkehrsleistungen Linienb&#252;ndel 5 &quot;Birgland&quot; (VGN-Linien 475 &#8211; 479)</title>
<link>https://www.service.bund.de/IMPORTE/Ausschreibungen/editor/Zweckverband-Nahverkehr-Amberg-Sulzbach/2026/07/6585166.html#track=feed-callforbids</link>
<description>
<![CDATA[
Erf&uuml;llungsort: <strong>92224 Amberg</strong>
<br />Vergabestelle: <strong>Zweckverband Nahverkehr Amberg-Sulzbach (ZNAS)</strong><br />
<br />Angebotsfrist: <strong>31.08.2026 11:00</strong> <br />Veröffentlichungsende: <strong>31.08.2026 11:00</strong> <br />
<br />
]]>
</description>
<pubDate>Thu, 23 Jul 2026 09:00:00 +0200</pubDate>
<guid>https://www.service.bund.de/IMPORTE/Ausschreibungen/editor/Zweckverband-Nahverkehr-Amberg-Sulzbach/2026/07/6585166.html</guid>
</item>
<item>
<title>Plattformlifte</title>
<link>https://www.service.bund.de/IMPORTE/Ausschreibungen/asp/2026/07/196439.html#track=feed-callforbids</link>
<description>
<![CDATA[
Erf&uuml;llungsort: <strong>86152 Augsburg</strong>
<br />Vergabestelle: <strong>Stadt Augsburg</strong><br />
<br />Angebotsfrist: <strong>27.08.2026 11:30</strong> <br />Veröffentlichungsende: <strong>27.08.2026 23:59</strong> <br />
<br />
]]>
</description>
<pubDate>Thu, 23 Jul 2026 07:28:16 +0200</pubDate>
<guid>https://www.service.bund.de/IMPORTE/Ausschreibungen/asp/2026/07/196439.html</guid>
</item>
<item>
<title>Hubbuehnen 1</title>
<link>https://www.service.bund.de/IMPORTE/Ausschreibungen/asp/2026/07/196438.html#track=feed-callforbids</link>
<description>
<![CDATA[
Erf&uuml;llungsort: <strong>86152 Augsburg</strong>
<br />Vergabestelle: <strong>Stadt Augsburg</strong><br />
<br />Angebotsfrist: <strong>27.08.2026 11:00</strong> <br />Veröffentlichungsende: <strong>27.08.2026 23:59</strong> <br />
<br />
]]>
</description>
<pubDate>Thu, 23 Jul 2026 07:13:09 +0200</pubDate>
<guid>https://www.service.bund.de/IMPORTE/Ausschreibungen/asp/2026/07/196438.html</guid>
</item>
<item>
<title>B 278 Flutgrabenbr&#252;cke bei Borsch, ASB-Nr. 5225 805; Ersatzneubau</title>
<link>https://www.service.bund.de/IMPORTE/Ausschreibungen/eVergabe/877436.html#track=feed-callforbids</link>
<description>
<![CDATA[
Erf&uuml;llungsort: <strong> Freistaat Th&#252;ringen, Landkreis Wartburgkreis, B 278 Flutgrabenbr&#252;cke bei Borsch ASB-Nr. 5225 805</strong>
<br />Vergabestelle: <strong>Th&#252;ringer Landesamt f&#252;r Bau und Verkehr, Stra&#223;enbauverwaltung und Zentrale Dienste</strong><br />
<br />Angebotsfrist: <strong>19.08.2026 10:00</strong> <br />Veröffentlichungsende: <strong>19.08.2026 10:00</strong> <br />
<br />
]]>
</description>
<pubDate>Thu, 23 Jul 2026 05:00:00 +0200</pubDate>
<guid>https://www.service.bund.de/IMPORTE/Ausschreibungen/eVergabe/877436.html</guid>
</item>
</channel>
</rss>
@@ -0,0 +1,45 @@
<?xml version='1.0' encoding='utf-8'?>
<rss version='2.0'>
<channel>
<title><![CDATA[subreport ELViS]]></title>
<link>https://www.subreport-elvis.de/</link>
<description><![CDATA[Aktuelle Ausschreibungen von Stadt Neuss, 41460 Neuss]]></description>
<language>de-de</language>
<copyright>subreport ELViS</copyright>
<item>
<title><![CDATA[E73433797:Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln-66-26-48 Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln]]></title>
<description><![CDATA[<table><tr><th style='text-align:left;'>Auftraggeber</th><td>Stadt Neuss, 41460 Neuss</td></tr><tr><th style='text-align:left;'>Vergabenummer</th><td>66-26-48</td></tr><tr><th style='text-align:left;'>Ausschreibungsart</th><td>Öffentliche Ausschreibung nach UVgO</td></tr><tr><th style='text-align:left;'>ELViS-ID</th><td>E73433797</td></tr><tr><th style='text-align:left;'>Ausschreibung</th><td>Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln</td></tr><tr><th style='text-align:left;'>Vergabeunterlagen</th><td>66-26-48 Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln</td></tr><tr><th style='text-align:left;'>Gültig bis</th><td>27.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Angebotsabgabefrist</th><td>27.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Öffnungstermin</th><td>27.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>subreport</th><td><a href='https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E73433797,558464' target='_new'>zur Vorschau in die Vergabeunterlagen</a></td></tr></table>]]></description>
<link>https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E73433797</link>
<author><![CDATA[Stadt Neuss, vergabe@stadt.neuss.de]]></author>
<guid isPermaLink="false">E73433797-558464</guid>
</item>
<item>
<title><![CDATA[E81865426:Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln-66-26-47 Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln]]></title>
<description><![CDATA[<table><tr><th style='text-align:left;'>Auftraggeber</th><td>Stadt Neuss, 41460 Neuss</td></tr><tr><th style='text-align:left;'>Vergabenummer</th><td>66-26-47</td></tr><tr><th style='text-align:left;'>Ausschreibungsart</th><td>Öffentliche Ausschreibung nach UVgO</td></tr><tr><th style='text-align:left;'>ELViS-ID</th><td>E81865426</td></tr><tr><th style='text-align:left;'>Ausschreibung</th><td>Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln</td></tr><tr><th style='text-align:left;'>Vergabeunterlagen</th><td>66-26-47 Objektbezogene Schadensanalysen für Brückenbauwerke im alten Bahndamm bei Minkeln</td></tr><tr><th style='text-align:left;'>Gültig bis</th><td>26.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Angebotsabgabefrist</th><td>26.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Öffnungstermin</th><td>26.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>subreport</th><td><a href='https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E81865426,558461' target='_new'>zur Vorschau in die Vergabeunterlagen</a></td></tr></table>]]></description>
<link>https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E81865426</link>
<author><![CDATA[Stadt Neuss, vergabe@stadt.neuss.de]]></author>
<guid isPermaLink="false">E81865426-558461</guid>
</item>
<item>
<title><![CDATA[E95748761:Lieferung eines Gerätewagens Logistik 2 (GW-L2)-37-26-44 Lieferung eines Gerätewagens Logistik 2 (GW-L2)]]></title>
<description><![CDATA[<table><tr><th style='text-align:left;'>Auftraggeber</th><td>Stadt Neuss, 41460 Neuss</td></tr><tr><th style='text-align:left;'>Vergabenummer</th><td>37-26-44</td></tr><tr><th style='text-align:left;'>Ausschreibungsart</th><td>Offenes Verfahren nach VGV</td></tr><tr><th style='text-align:left;'>ELViS-ID</th><td>E95748761</td></tr><tr><th style='text-align:left;'>Ausschreibung</th><td>Lieferung eines Gerätewagens Logistik 2 (GW-L2)</td></tr><tr><th style='text-align:left;'>Vergabeunterlagen</th><td>37-26-44 Lieferung eines Gerätewagens Logistik 2 (GW-L2)</td></tr><tr><th style='text-align:left;'>Gültig bis</th><td>24.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Angebotsabgabefrist</th><td>24.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Öffnungstermin</th><td>24.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>subreport</th><td><a href='https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E95748761,557626' target='_new'>zur Vorschau in die Vergabeunterlagen</a></td></tr></table>]]></description>
<link>https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E95748761</link>
<author><![CDATA[Stadt Neuss, vergabe@stadt.neuss.de]]></author>
<guid isPermaLink="false">E95748761-557626</guid>
</item>
<item>
<title><![CDATA[E96237741:Lieferung von Lichtmasten, Jahresbedarf 2026/2027-66-26-41 Lieferung von Lichtmasten, Jahresbedarf 2026/2027]]></title>
<description><![CDATA[<table><tr><th style='text-align:left;'>Auftraggeber</th><td>Stadt Neuss, 41460 Neuss</td></tr><tr><th style='text-align:left;'>Vergabenummer</th><td>66-26-41</td></tr><tr><th style='text-align:left;'>Ausschreibungsart</th><td>Öffentliche Ausschreibung nach UVgO</td></tr><tr><th style='text-align:left;'>ELViS-ID</th><td>E96237741</td></tr><tr><th style='text-align:left;'>Ausschreibung</th><td>Lieferung von Lichtmasten, Jahresbedarf 2026/2027</td></tr><tr><th style='text-align:left;'>Vergabeunterlagen</th><td>66-26-41 Lieferung von Lichtmasten, Jahresbedarf 2026/2027</td></tr><tr><th style='text-align:left;'>Gültig bis</th><td>27.07.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Angebotsabgabefrist</th><td>27.07.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Öffnungstermin</th><td>27.07.2026 10:00:00</td></tr><tr><th style='text-align:left;'>subreport</th><td><a href='https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E96237741,556451' target='_new'>zur Vorschau in die Vergabeunterlagen</a></td></tr></table>]]></description>
<link>https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E96237741</link>
<author><![CDATA[Stadt Neuss, vergabe@stadt.neuss.de]]></author>
<guid isPermaLink="false">E96237741-556451</guid>
</item>
<item>
<title><![CDATA[E87453261:Sicherheitsdienstleistungen und Brandschutzwachdienst in städtischen Unterbringungseinrichtungen der Stadt Neuss-53-26-40 Sicherheitsdienstleistungen und Brandschutzwachdienst in städtischen Unterbringungseinrichtungen der Stadt Neuss]]></title>
<description><![CDATA[<table><tr><th style='text-align:left;'>Auftraggeber</th><td>Stadt Neuss, 41460 Neuss</td></tr><tr><th style='text-align:left;'>Vergabenummer</th><td>53-26-40</td></tr><tr><th style='text-align:left;'>Ausschreibungsart</th><td>Offenes Verfahren nach VGV</td></tr><tr><th style='text-align:left;'>ELViS-ID</th><td>E87453261</td></tr><tr><th style='text-align:left;'>Ausschreibung</th><td>Sicherheitsdienstleistungen und Brandschutzwachdienst in städtischen Unterbringungseinrichtungen der Stadt Neuss</td></tr><tr><th style='text-align:left;'>Vergabeunterlagen</th><td>53-26-40 Sicherheitsdienstleistungen und Brandschutzwachdienst in städtischen Unterbringungseinrichtungen der Stadt Neuss</td></tr><tr><th style='text-align:left;'>Gültig bis</th><td>13.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Angebotsabgabefrist</th><td>13.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>Öffnungstermin</th><td>13.08.2026 10:00:00</td></tr><tr><th style='text-align:left;'>subreport</th><td><a href='https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E87453261,555142' target='_new'>zur Vorschau in die Vergabeunterlagen</a></td></tr></table>]]></description>
<link>https://www.subreport-elvis.de/browseVerdingungsunterlagen.html#ELVISID:E87453261</link>
<author><![CDATA[Stadt Neuss, vergabe@stadt.neuss.de]]></author>
<guid isPermaLink="false">E87453261-555142</guid>
</item>
</channel>
</rss>