> For the complete documentation index, see [llms.txt](https://api.docs.blockbrain.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api.docs.blockbrain.ai/de/best-practices-fur-integrationen/ausschreibungsanalyse.md).

# Ausschreibungsanalyse

## 1. Einleitung

Der beabsichtigte Anwendungsfall besteht darin, TED-Bekanntmachungen abzurufen, sie in LOTs aufzuteilen, eine KI-Bewertung durchzuführen (Portfolio-Fit, Menge, technische Komplexität), bewertete Erkenntnisse in einer Wissensdatenbank und einer Tabelle zu speichern und Stakeholder zu benachrichtigen. Die Bewertungslogik und die Prompts werden in der Blockbrain-UI konfiguriert; die API wird verwendet, um die Verarbeitung in großem Umfang zu automatisieren.

Alle in der UI verfügbaren Funktionen sind auch über die API zugänglich. Die UI sollte verwendet werden, um den Evaluations-Bot und den Prompt einzurichten, während die API für die Implementierung automatisierter oder großskaliger Workflows verwendet werden sollte. Die vollständige Blockbrain-API-Dokumentation ist hier verfügbar: <https://blocky.theblockbrain.ai/docs>

Bevor Sie mit dem Workflow fortfahren, stellen Sie sicher, dass Sie Folgendes haben:

1. **Konfiguriert Ihren Tender-Evaluierungs-Bot.**
2. **Den Evaluierungs-Prompt in der Prompt Library definiert und gespeichert und die agentTaskId notiert.**
3. **Das passende LLM-Modell in den Bot-Einstellungen ausgewählt.**
4. **Google-Sheets- und Drive-Zugangsdaten konfiguriert (falls Tabellen-Ausgabe verwendet wird).**
5. **Ihre `bot_id`, `agentTaskId` wie in Abschnitt 4 dieses Leitfadens beschrieben.**

## 2. Grundlegender API-Workflow

Der Prozess zur automatisierten Ausschreibungsanalyse besteht aus mehreren Hauptschritten. Es wird dringend empfohlen, für jede Veröffentlichung/Bekanntmachung einen separaten Data Room (Konversation) oder Insights-Ordner anzulegen, um die Isolierung zwischen den Bewertungen zu gewährleisten und Parallelverarbeitung zu ermöglichen.

### **Schritt 1 – Berichtstabelle erstellen**

Erstellen Sie eine neue Google-Tabelle, um die Ergebnisse der Ausschreibungsbewertung zu speichern.

* **Endpunkt**: POST <https://sheets.googleapis.com/v4/spreadsheets>
* **API-Referenz**: [Google Sheets API - Tabellen erstellen](https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/create)

Beispiel-Request-URL

**`https://sheets.googleapis.com/v4/spreadsheets`**

Beispiel-Request-Body

```json
{
  "properties": {
    "title": "TED_Ausschreibungen_2025-07-22_2025-07-29"
  },
  "sheets": [
    {
      "properties": {
        "title": "Zusammenfassung"
      }
    }
  ]
}
```

Beispiel-Antwortkörper (gekürzt)

```json
{
  "spreadsheetId": "1A2b3C4d5E6fG7h8I9j0K",
  "properties": {
    "title": "TED_Ausschreibungen_2025-07-22_2025-07-29"
  },
  "sheets": [
    {
      "properties": {
        "sheetId": 0,
        "title": "Zusammenfassung"
      }
    }
  ],
  "spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1A2b3C4d5E6fG7h8I9j0K/edit"
}
```

### **Schritt 2 – Insights-Ordner erstellen**

Dieser Vorgang erstellt einen neuen Insights-Ordner in der Wissensdatenbank, um generierte Erkenntnisse für den Ausschreibungsstapel von heute zu speichern.

* **Endpunkt**: POST /cortex/notes/insight-folder
* **API-Referenz**: [Insights-Ordner erstellen – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex-notes/operation/add_insight_folder_cortex_notes_insight_folder_post)

Beispiel-Request-URL

**`https://blocky.theblockbrain.ai/cortex/notes/insight-folder`**

Beispiel-Request-Body

```javascript
{
  "name": "2025-07-22-2025-07-29",
  "parentPath": "root/68c7b1cf94bd26b154694306",
  "description": "TED-Ausschreibungen der Woche 2025-07-22 bis 2025-07-29"
}
```

Beispiel-Response-Body

```javascript
{
  "folderId": "68de93f1fc203c550a278b09",
  "path": "root/68c7b1cf94bd26b154694306/2025-07-22-2025-07-29"
}
```

Die Antwort enthält eine `Ordner-ID` und `Pfad` die diesen Insights-Ordner identifizieren. Diese werden benötigt, um Erkenntnisse in nachfolgenden Schritten zu speichern.

### **Schritt 3 – TED-Bekanntmachungen abfragen**

Bekanntmachungen aus der TED-API abrufen, gefiltert nach CPV-Codes und Daten.

* **Endpunkt**: POST <https://tedweb.api.ted.europa.eu/v3/notices/search>
* **API-Referenz**: [TED-Bekanntmachungssuche – API-Dokumentation](https://tedweb.api.ted.europa.eu/redoc)

Beispiel-Request-Body

```javascript
{
  "query":"deadline-receipt-request>=20250729 AND publication-date>=today() AND classification-cpv IN (51120000, ...)",
  "page":1,
  "limit":200,
  "fields":[
    "description-lot",
    "title-lot",
    "notice-title",
    "main-classification-lot",
    "quantity-lot",
    "estimated-value-lot",
    "organisation-name-buyer",
    "deadline-receipt-tender-date-lot",
    "links",
    "publication-number"
  ],
  "scope":"ACTIVE"
}
```

### **Schritt 4 – Bekanntmachungen in LOTs aufteilen**

Jede abgerufene Bekanntmachung in einzelne LOT-Elemente aufteilen, um sie pro LOT zu bewerten.

* Array- und Sprachobjekt-Felder zuverlässig verarbeiten (title-lot, description-lot, main-classification-lot).
* Ausgabe: ein Element pro LOT mit den ursprünglichen Metadaten der Bekanntmachung.

### **Schritt 5 – Data Room erstellen und LOT-Inhalt übermitteln**

Eine Konversation (Data Room) pro Bekanntmachung oder Veröffentlichungsnummer erstellen und den LOT-Inhalt an den Evaluierungs-Bot übermitteln.

* **Data-Room-Endpunkt erstellen**: POST /cortex/active-bot/{bot\_id}/convo
* **API-Referenz**: [Data Room erstellen – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex-active-bot/operation/add_convo_to_bot_cortex_active_bot__bot_id__convo_post)

Beispiel-Request-URL

**`https://blocky.theblockbrain.ai/cortex/active-bot/687e4c1b04e932e500e46c52/convo`**

Beispiel-Request-Body

```javascript
{
  "convoName": "PUB-12345",
  "sessionId": "68a70120d6167415e62a8074"
}
```

Beispiel-Response-Body

```javascript
{
  "convoId": "68de93f1fc203c550a278b09",
  "activeBotId": "68b968d3e8d7b4710f2b5632"
}
```

* **Endpunkt für die Übermittlung von LOT-Inhalten**: POST /cortex/completions/v2/user-input
* **API-Referenz**: [Benutzernachrichten hinzufügen – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex-completions/operation/add_user_messages_cortex_completions_user_input_post)

Beispiel-Request-URL

**`https://blocky.theblockbrain.ai/cortex/completions/v2/user-input`**

Beispiel-Request-Body

```javascript
{
  "content": "/* JSON mit LOT-Feldern: title, description, main-classification-lot, estimated-value-lot, quantity-lot, organisation-name-buyer, deadline-receipt-tender-date-lot, links, publication-number */",
  "actionType": "direct-agent",
  "messageType": "user-question",
  "sessionId": "68a70120d6167415e62a8074",
  "convoId": "68de93f1fc203c550a278b09",
  "agentTaskId": "68926547ce87314fbc4e500b",
  "enableStreaming": false
}
```

Falls **`enableStreaming`** aktiviert ist, werden Antworten Token für Token mit [Streaming](https://api.docs.theblockbrain.ai/concepts/streaming). Die zurückgegebenen new\_token-Objekte verketten, um die endgültige Ausgabe zu bilden.

### **Schritt 6 – Bewertungsergebnis abrufen**

Dieser Vorgang ruft die Bewertungsnachricht-Details über die messageId ab, die im vorherigen Schritt als Antwort erhalten wurde.

* **Endpunkt**: GET /cortex/message/{message\_id}
* **API-Referenz**: [Nachrichtendetails abrufen – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex/operation/get_message_detail_cortex_message__message_id__get)

Beispiel-Request-URL

**`https://blocky.theblockbrain.ai/cortex/message/{message_id}`**

Das Bewertungsergebnis ist der **`content`** des Antwortkörpers, während der ursprünglich übermittelte LOT-Inhalt **`targetText`**.

**Alternativ die vollständige Nachrichtenliste abrufen**

Dieser Vorgang ruft die vollständige Liste der Nachrichten für eine gegebene Konversation ab (`convoId`).

* **Endpunkt**: POST /cortex/message/list
* **API-Referenz**: [Nachrichtenliste abrufen – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex/operation/get_message_list_cortex_message_list_post)

Beispiel-Request-URL

**`https://blocky.theblockbrain.ai/cortex/message/list`**

Beispiel-Request-Body

```javascript
{
  "convoId": "68de93f1fc203c550a278b09",
  "sessionId": "68a70120d6167415e62a8074"
}
```

### **Schritt 7 – Bewertung und Scoring-Logik**

Berechnen Sie die Punkte für jedes LOT mithilfe des Evaluierungs-Bots plus deterministischer Regeln.

* Implementierungshinweise: CPV-Präfixe extrahieren (erste 5 Ziffern), Mengen über Felder oder Regex in Titel/Beschreibung erkennen, Komplexität aus mehreren Flag-Feldern berechnen.

### **Schritt 8 – Relevante Ergebnisse filtern**

Nur LOTs behalten, die den Relevanzschwellenwert erfüllen (konfigurierbar).

* Filterknoten (Nur relevant > 5 Punkte) und Geschäftsregel-Knoten verwenden, um Auto-PASS-Elemente zu entfernen.

### **Schritt 9 – Erkenntnis aus Ausschreibungs-HTML erstellen und in der Wissensdatenbank speichern**

Ausschreibungs-HTML herunterladen, in Markdown konvertieren, eine Erkenntnisnotiz erstellen, einen teilbaren Link generieren und die Erkenntnis in der Wissensdatenbank speichern.

* **Ausschreibungs-HTML herunterladen**: verwenden `notice.links.htmlDirect.DEU` (Fallback auf ENG).

* **HTML → Markdown konvertieren**

* **Erkenntnisnotiz erstellen**
  * **Endpunkt**: POST /cortex/notes/add-note
  * **API-Referenz**: [Notiz hinzufügen – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex-notes/operation/add_note_cortex_notes_add_note_post)
  * **Beispiel-Request-URL**\
    \&#xNAN;**`https://blocky.theblockbrain.ai/cortex/notes/add-note`**
  * **Beispiel-Request-Body**

    ```javascript
    {
      "summary": "<Markdown-Inhalt>",
      "title": "<notice-title.deu>",
      "parent_path": "<folderPath>"
    }
    ```
  * **Beispiel-Antwortkörper (gekürzt)**

    ```javascript
    {
      "noteId": "64f3a1b2c9e84d0012345678",
      "body": { /* Notizmetadaten */ }
    }
    ```

* **Teilbaren Link generieren**
  * **Endpunkt**: POST /cortex/notes/share/generate-link
  * **API-Referenz**: [Freigabelink generieren – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex-notes/operation/generate_share_link_cortex_notes_share_generate_link_post)
  * **Beispiel-Request-URL**\
    \&#xNAN;**`https://blocky.theblockbrain.ai/cortex/notes/share/generate-link`**
  * **Beispiel-Request-Body**

    ```javascript
    {
      "noteId": "64f3a1b2c9e84d0012345678",
      "username": "admin@domain",
      "includeReference": true,
      "includeCitation": true
    }
    ```
  * **Beispiel-Antwortkörper (gekürzt)**

    ```javascript
    {
      "shareUrl": "https://company.kb.theblockbrain.ai/note/share?shareNote=abcdef123456"
    }
    ```

* **Erkenntnis in der Wissensdatenbank-Sammlung speichern**
  * **Endpunkt**: POST /cortex/notes/save-insights-to-knowledge-base
  * **API-Referenz**: [Erkenntnisse speichern – API-Dokumentation](https://blocky.theblockbrain.ai/redoc#tag/cortex-notes/operation/save_insights_to_kb_cortex_notes_save_insights_to_knowledge_base_post)
  * **Beispiel-Request-URL**\
    \&#xNAN;**`https://blocky.theblockbrain.ai/cortex/notes/save-insights-to-knowledge-base`**
  * **Beispiel-Request-Body**

    ```javascript
    {
      "knowledge_folders_destination": [
        {
          "noteIds": [],
          "folderNoteIds": ["<folderId>"]
        }
      ],
      "knowledgeBase": "<knowledgeBaseId>",
      "folderPath": "root"
    }
    ```
  * **Beispiel-Antwortkörper (gekürzt)**

    ```javascript
    {
      "status": "success",
      "savedNotes": ["64f3a1b2c9e84d0012345678"]
    }
    ```

### **Schritt 10 – Bewertung an Tabelle anhängen**

Bewertungsfelder den Google-Sheets-Spalten zuordnen und eine Zeile pro LOT anhängen.

* Typische Spalten:&#x20;
  * ABC-Bewertung
  * Punktzahl
  * Titel-DE
  * HTML-Link-DE
  * Ausschreibungs-Nr
  * Lot
  * Empfehlung
  * CPV-Code
  * HTML-Link-EN
  * Blockbrain-Chat-Link&#x20;

### **Schritt 11 – Data Rooms bereinigen (optional)**

Konversationen und temporäre Data Rooms nach der Verarbeitung löschen oder archivieren, um Ressourcen freizugeben.

* **Endpunkt**: DELETE /cortex/conversation/{convoId}

Beispiel-Request-URL

**`https://blocky.theblockbrain.ai/cortex/conversation/68de93f1fc203c550a278b09`**

## Bewährte Verfahren

1. Erstellen Sie einen Insights-Ordner oder Data Room pro Veröffentlichungsnummer, um den Kontext zu isolieren.
2. Speichern Sie Bewertungs-Prompts in der Prompt Library und verweisen Sie über `agentTaskId`.
3. Generieren Sie pro Verarbeitungslauf eine sessionId (UUID) zur Nachverfolgbarkeit.
4. Halten Sie Bewertungsschwellen und Gewichtungen konfigurierbar.
5. Persistieren Sie die rohe Bekanntmachungs-Payload und die Bewertungsmetadaten für Audit und Neubewertung.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://api.docs.blockbrain.ai/de/best-practices-fur-integrationen/ausschreibungsanalyse.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
