← BoersiCONTENT HISTORY

Update to Boersi

Snapshot Sep 30, 2026 · 23:01 UTC · version 1.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Filtert Firmen eines Index nach Kriterien und sortiert sie. Nutze diese Skill für Screening-Fragen mit Index-Bezug — DAX, MDAX, EURO STOXX, S&P 500 — etwa „welche DAX-Firmen erfüllen Kriterium X\" oder „sortiere die MDAX-Titel nach Y\". Aktiviert bei Fragen wie „Welche DAX-Werte haben die höchste Datenabdeckung?\", „Screene den MDAX nach Sektor Industrie\", „Sortiere die deutschen Index-Titel nach Umsatz\".",
  "included_files": [],
  "name": "boersi-index-screener",
  "skill_md_contents": "---\nname: boersi-index-screener\ndescription: Filtert Firmen eines Index nach Kriterien und sortiert sie. Nutze diese Skill für Screening-Fragen mit Index-Bezug — DAX, MDAX, EURO STOXX, S&P 500 — etwa „welche DAX-Firmen erfüllen Kriterium X\" oder „sortiere die MDAX-Titel nach Y\". Aktiviert bei Fragen wie „Welche DAX-Werte haben die höchste Datenabdeckung?\", „Screene den MDAX nach Sektor Industrie\", „Sortiere die deutschen Index-Titel nach Umsatz\".\n---\n\n# Boersi Index-Screener\n\nScreening mit Index-Bezug — mit einer Einschränkung, die du **immer** mitkommunizieren musst.\n\n## Index-Mitgliedschaft ist KEIN Suchfilter\n\n`search_dossiers` filtert **ausschließlich** nach `sektor`, `land` und `min_vollstaendigkeit`.\nEs gibt **keinen** `index`-Parameter und **keine** Namenssuche. Die Index-Zugehörigkeit steht nur\n**pro Firma** als einzelnes Feld in der Stammdaten-Sektion des Dossiers — den genauen Pfad\nermittelst du einmal über `list_sections`/`get_dossier` und verwendest ihn dann wieder.\n\nDaraus folgt: Ein Index lässt sich **nicht** abfragen, nur **firmenweise prüfen**. Behaupte\nniemals, du hättest „alle DAX-Firmen\" oder „den kompletten Index\" abgedeckt.\n\n## Zwei Wege — beide legitim, beide offenzulegen\n\n| Weg | Wann | Vorgehen |\n|-----|------|----------|\n| **A — Konstituenten-Liste** (bevorzugt) | Der Nutzer nennt die Firmen oder ISINs | Je ISIN das Index-Feld per `get_field` bestätigen, dann die Screening-Felder laden |\n| **B — Proxy-Screening** | Der Nutzer nennt nur den Index | Über `sektor`/`land` eingrenzen, Treffer laden, Mitgliedschaft je Kandidat per `get_field` prüfen |\n\nBei **B** ist `land` der beste Proxy (DAX/MDAX → `land: \"DE\"`), aber eben nur ein Proxy: der\nFilter findet auch nicht-gelistete Firmen und verfehlt Index-Mitglieder mit anderem Sitzland.\n\n### Mitgliedschaft prüfen — die Regel\n\nPrüfe die Zugehörigkeit **je Kandidat** per `get_field` und nimm nur bestätigte Treffer in die\nErgebnistabelle. Deckle die Prüfung bei **25 Kandidaten** (ein Aufruf je Kandidat, und das\nRate-Limit liegt bei 15/60/240 Calls pro Minute je nach Plan). Was du nicht geprüft hast, kommt\nnicht als Index-Mitglied in die Tabelle — führe es allenfalls getrennt als „ungeprüft\" auf.\nLiefert das Feld nichts, gilt die Firma als **nicht bestätigt**, nicht als Mitglied.\n\n## Ablauf\n\n1. **Index und Kriterium klären.** Kriterium = wonach gefiltert (Sektor, Land, Abdeckung, eine\n   Kennzahl) und wonach sortiert wird.\n2. **Kandidaten beschaffen** — Weg A oder B. Bei B: `search_dossiers({ land, sektor? })`,\n   max. **25 Treffer pro Seite** (Plan `plus`: 10), weitere Seiten nur per `cursor` und nur so\n   viele, wie nötig. Nennt der Nutzer Firmennamen statt ISINs, gleiche sie gegen das Feld `firma`\n   in der Trefferprojektion ab — eine Namenssuche gibt es nicht.\n3. **Mitgliedschaft prüfen** (siehe Regel oben).\n4. **Screening-Feld laden.** Ist das Kriterium eine Kennzahl, Feldpfad einmal per `get_dossier` an\n   einer Referenzfirma lernen und dann je Kandidat `get_field` — nie ein Dossier pro Firma\n   (`get_dossier` ist kontingentiert, `plus`: 5/Monat). Ist das Kriterium die Datenabdeckung,\n   genügt `gesamt_prozent` aus der Suchprojektion — **kein** zusätzlicher Call.\n5. **Sortieren und ausgeben.** Sortiert wird **clientseitig über die geladenen Kandidaten** —\n   der Server sortiert nicht. Tabelle: Firma · ISIN · Kriteriumswert **mit `as_of_date`** ·\n   ggf. `gesamt_prozent`.\n\n## Feste Regeln\n\n- **Grundgesamtheit offenlegen.** Schreib dazu, worüber sortiert wurde: „geprüft wurden 18 von\n  dir genannte Titel\" bzw. „Kandidaten aus `land: DE`, davon 12 als Index-Mitglied bestätigt\".\n  Eine Rangliste ohne offengelegte Grundgesamtheit ist irreführend.\n- **Nie „alle Firmen\" behaupten.** Weder für den Index noch für die Datenbank. Ist `nextCursor`\n  gesetzt und nicht weitergeladen, sag es.\n- **Index-Zugehörigkeit nicht aus Wissen ergänzen.** Nicht aus dem Gedächtnis entscheiden, wer im\n  DAX ist — nur das Feld zählt. Stichtag der Zugehörigkeit mit ausgeben; Index-Zusammensetzungen\n  ändern sich.\n- **Sortierung ist kein Ranking im Sinne einer Empfehlung (§32).** Keine Kursziele, keine\n  „Top-Picks\", kein „bester Wert im Index\". Sortieren nach einer Faktenspalte ist erlaubt,\n  daraus eine Anlageaussage abzuleiten nicht.\n- **Jeder Wert mit `as_of_date`**, abweichende Stichtage kennzeichnen — sonst vergleicht die\n  Sortierung Äpfel mit Birnen.\n- **Kein Bulk.** Keine Seiten erschöpfen, um eine Gesamtliste zu erzeugen; keine Ausgabe, die als\n  Index-Export dient.\n- **Keine Quellen im Output.** Interne Provenienz wird serverseitig entfernt.\n\n## Beispiel\n\n*„Welche deutschen Index-Titel im Sektor Industrie haben die beste Datenabdeckung?\"*\n\n1. `search_dossiers({ land: \"DE\", sektor: \"Industrie\", min_vollstaendigkeit: 50 })`.\n2. Je Treffer `get_field(isin, \"<sektion>.<feld>\")` mit dem ermittelten Index-Pfad\n   → bestätigte Mitglieder behalten, Rest getrennt als „ungeprüft/nicht bestätigt\" ausweisen.\n3. Sortieren nach `gesamt_prozent` aus der Projektion — kein weiterer Call nötig.\n4. Tabelle Firma · ISIN · Index (mit Stichtag) · Abdeckung, darunter der Satz, wie viele\n   Kandidaten geprüft wurden und dass offene Seiten existieren.\n"
}

SHA-256 of public snapshot: 815e8a8501ea61d5095db18bf7133fedbb7ea3619054a8cba86eb7a32503d26e