Zum Inhalt

Modul: Tarifrechner

Stand

Code-Analyse vom 2026-04-22 gegen Live-Instanz sachpool.de, WebEdition 9.2.3.0, PHP 8.3.29.

Zweck

Tarifrechner sind Online-Kalkulatoren von Versicherungspartnern (Barmenia/Adcuri, Baloise, Agencio, Concept-IF, weitere). Für jeden Partner existiert ein Objekt der Klasse partnerversicherung (classid 3) mit Stammdaten und Redakteurs-Inhalten. Der Rechner selbst wird je nach Partner per signierter URL, Session-Token oder einfachem Link mit dynamischen Parametern aufgerufen.

Zugriff nur im Login-Bereich (Workspace 536).

Einstiegspunkte

Doc-ID Pfad Status Rolle
568 /_login/tarifrechner/index.php publiziert Übersichts-Seite mit Buchstaben-Tabs
2540 /_login/tarifrechner/cif-rechner.php publiziert CIF-Rechner (Concept-IF)
62229 /_login/tarifrechner/baloise.php publiziert Baloise-Rechner (neu, Okt 2025)
64324 /_login/tarifrechner/invedaweb/ unveröffentlicht Invedaweb-Ordner (neu, in Entwicklung)

Weitere Partner-Detail-Seiten entstehen automatisch durch das Objekt-Detail-Template _detail-tarifrechner.tmpl (ID 123) — pro partnerversicherung-Objekt eine URL nach dem Muster /_login/tarifrechner/<versichererslug>-<id>.php.

Datenmodell

Tarifrechner sind Instanzen der Klasse partnerversicherung (classid 3). Stand April 2026: 130 Objekte in der Klasse, verteilt auf Workspaces (Buchstaben-Gruppen, siehe unten).

Wichtige Felder (aus Objekte & Klassen):

Feld Typ Rolle
input_name varchar Partner-Name
input_vermittlernr varchar(100) Sachpool-Vermittlernummer beim Partner
img_img int Logo
input_anschrift-strasse / -ort varchar Adresse
input_telefon, input_telefax, input_email varchar Kontakt
link_url text Partner-Website
link_link-rechner text Online-Rechner-Link (mit Platzhaltern wie %SACHUSER%)
link_link-download text Dokumenten-Download-Link
text_text-intern longtext Interner Infotext (wird durch Data-Filter ersetzt)
href_include-content text Ref. auf weiteres wE-Dokument (für komplexe Integrationen)
text_tags longtext Volltext-Tags
multiobject_ansprechpartner longtext Kontakt-Objekte
multiobject_WerbebannerObenMO/SeitlichMO longtext Werbebanner

Übersichts-Template (tarifrechner-index.tmpl, ID 113)

Rendert alle partnerversicherung-Objekte als Logo-Kacheln in einer Bootstrap-Tab-Struktur:

Tab Workspace-Filter Buchstaben
Alle — (kein Filter) A–Z
A-F Workspace 18 A–F
G-N Workspace 22 G–N
O-U Workspace 27 O–U
V-Z Workspace 62 V–Z

Redaktionelle Pflicht

Partner müssen bei Anlage händisch in den richtigen Workspace einsortiert werden, sonst tauchen sie nur im „Alle"-Tab auf. → OFFENE-FRAGEN.md

Klick auf eine Kachel führt zur Partner-Detail-Seite.

Detail-Template (_detail-tarifrechner.tmpl, ID 123)

Zeigt einen einzelnen Partner. Aufruf per ?we_objectID=<id> (int-cast, SQL-sicher). Zwei-Spalten-Layout:

  • Links (col-lg-3): Logo, Sachpool-Vermittlernummer, Adresse, Telefon/Fax, E-Mail/URL
  • Rechts (col-lg-9): Name, Button „Zum Online Rechner" (target=_blank), Button „Software download", text-intern (mit Platzhalter-Ersetzung), optional eingebundenes wE-Dokument (include-content), Ansprechpartner

Pagination oben: Zurück zur Übersicht (Dok 568) + Prev/Next durch alle Partner.

Platzhalter-Ersetzung (Data-Filter)

<we:var name="text-intern" nameto="textintern" to="global" />
<?php $textintern = $GLOBALS['textintern']; ?>

<we:include type="template" id="174" /><we:comment>Data filter</we:comment>

<?php echo $textintern; ?>

text-intern wird durch Template 174 (compatiblity-layer/data-filter.tmpl) gefiltert — Platzhalter wie %SACHUSER%, %SACHSURNAME% werden ersetzt.

Inkonsistent

Der Rechner-Link-Button wird direkt aus dem Objekt-Feld gerendert (<we:var type="link" name="link-rechner" only="href" />) — ohne Data-Filter. Platzhalter in link-rechner werden damit nicht ersetzt.

Link-Modul

Partner-Templates (spezifische Integrationen)

Einige Partner haben eigene Templates im Ordner sachpool-portal/partnermodule/tarifrechner/, weil sie Session-Handling, signierte URLs oder Konto-Synchronisation brauchen.

Adcuri / Barmenia (Template 176, adcuri.tmpl)

Technik: Session-basiert. PHP-Klasse sessionIdHolenViaReadfile ruft via readfile() eine Session-Create-URL und extrahiert eine Session-ID.

$ASSEK_LOGIN = "vfvintegration";              // 🔴 hardcoded
define("SESSION_PASS", "a27+f13x-a");         // 🔴 hardcoded
define("SESSION_REQUEST_URL", "https://integration-i2-www.adcuri.de/");  // 🔴 Integrations-URL

function getAdcuriAngebotLink($Sparte, $VT = 0) {
    // Erlaubte Sparten: 'hrv', 'thv', 'phv', 'uv', 'ur', 'kfz', 'evb',
    //                   'kur', 'fp', 'pkw', 'krad', 'gsv', 'ghv',
    //                   'rv', 'gev', 'top', 'vertrag_historie'
    $id = $varianteEins->anmelden(SESSION_USER, SESSION_PASS, SESSION_SYSTEM);
    return SESSION_REQUEST_URL . "index.php?session_id=$id&mainid=angebot&siteid=angebot_$Sparte&vt=$VT";
}
  • Untervermittler-Kennung: $sach_user wird als Query-Parameter kennung= an den Login angehängt, damit das Adcuri-System die Untervermittler-Sicht einschränken kann.
  • Sonderfall evb: URL wird als siteid=kfz_evb statt angebot_evb gebaut.
  • Sonderfall ghv: zusätzlicher Parameter tarif=tarif_barmenia_ghv2019.

Baloise (Template 306, baloise.tmpl) — neu seit 2025-10-23

Technik: HMAC-SHA512 signierte URL nach Baloise-Protokoll.

$clientId = "baloise-sachpool-startroutine";                     // 🔴 hardcoded
$clientSecret = "39fS2KzeNgegoR7civDjjEe7kWLAMn2s";              // 🔴 hardcoded
$baseUrl = "https://api.baloise.b-ox.de/portals/redirect";

// Eindeutiger User-Kennungs-String: Initial + Nachname + Vermittlernummer
$user1 = strtolower(mb_substr($forename, 0, 1)) . strtolower($surname) . '_' . $user;
// z.B. "mmustermakler_90100-11"

Kommentar im Code erklärt die _90100-11-Erweiterung: Ohne Vermittlernummer würden unterschiedliche Vermittler mit gleichem Initial/Nachnamen (z. B. „Max Mustermakler" und „Martin Mustermakler") bei Baloise denselben user-Wert erzeugen und sich Datensätze teilen — das wurde so behoben.

Parameter: - user — eindeutige User-Kennung (siehe oben) - user.name — Vor- + Nachname - group — Vermittlernummer ($sach_user) - group2sachpool-verteiler-group (fest, für Antragskopie) - Order.Broker.Identifier600607 (Sachpool-Agenturnummer bei Baloise) - Order.Broker.IdentifierReference — Vermittlernummer - editionTAE

Nach Signatur-Berechnung: window.location.href = $signedUrl.

Concept-IF / CIF (Template 183, cif_rechner.tmpl)

Details in späterer Runde — ähnliches Muster wie Adcuri.

Agencio (Template 294, agencio.tmpl)

Details in späterer Runde.

Die Mehrheit der Tarifrechner benötigt kein eigenes Template. Redakteure legen den Rechner-Link (mit %SACHUSER%-Platzhaltern) direkt in partnerversicherung.link-rechner ab, der Data-Filter ersetzt zur Laufzeit.

Beispiel-Link-Muster:

https://partner.de/rechner?vermittler=%SACHUSER%&sparte=hrv

Sparten-Codes (Adcuri-spezifisch)

Die Adcuri-Funktion getAdcuriAngebotLink($Sparte) akzeptiert folgende Codes:

Code Sparte
hrv Hausrat
thv Tierhalterhaftpflicht
phv Privathaftpflicht
uv Unfall
ur Urlaub/Reise
kfz KFZ
evb eVB (→ siteid=kfz_evb)
kur Kurz
fp Fingerprint
pkw PKW
krad Kraftrad
gsv Gebäude-/Sachversicherung
ghv Haus-/Grundbesitzerhaftpflicht (→ tarif=tarif_barmenia_ghv2019)
rv Rechtsschutz
gev Gewässerschaden
top TOP
vertrag_historie Vertragshistorie

Weitere Partner-spezifische Spartencodes siehe Link-Modul.

Neuer Bereich: partnerintegration/ (Template-Ordner 308)

Seit 2025 eigener Unterordner sachpool-portal/partnermodule/partnerintegration/ mit bisher einem Eintrag:

  • Template 309 invedaweb.tmpl
  • Dokumenten-Ordner /_login/tarifrechner/invedaweb/ (unveröffentlicht)

Status und Zweck siehe OFFENE-FRAGEN.md.

Bekannte Altlasten

→ Vollständiger Audit-Katalog: interne Datei HANDLUNGSEMPFEHLUNGEN.md im Repo-Root

Kurzauszug (doppelt zu Vergleichsportalen, weil Partner-Templates oft betroffen):

  • 🔴🔴🔴 Hardcodierte Credentials (Adcuri, Baloise, u. a.)
  • 🔴 Adcuri-Integrations-URL statt Produktion
  • 🟡 _detail-tarifrechner.tmpl Syntax-Fehler Z. 102
  • 🟡 Data-Filter wird nur auf text-intern angewandt, nicht auf link-rechner
  • 🟡 Buchstaben-Tabs über Workspace-IDs (18/22/27/62) → manuelle Zuweisung nötig
  • 🟡 Doppelter <we:object>-Lookup in _detail-tarifrechner.tmpl

Siehe auch