Skip to content

Split-Ticketing markiert ICE-Strecken bei aktiviertem Deutschlandticket fälschlich als abgedeckt #13

Description

@grosserknallkopf

Beschreibung

Bei aktivierter Option „Deutschlandticket vorhanden“ funktioniert die Split-Ticketing-Analyse bei mir nicht zuverlässig.

Die App behauptet wiederholt, dass bestimmte Teilstrecken durch das Deutschlandticket abgedeckt seien, obwohl die betreffenden Verbindungen bzw. Streckenabschnitte ICE enthalten und nicht vom Deutschlandticket abgedeckt sind.

Dadurch werden ICE-Strecken teilweise mit 0,00 € bewertet und als

Fahrt durch Deutschland-Ticket abgedeckt

angezeigt.

Das ist nicht nur ein falsches Optimierungsergebnis, sondern potenziell problematisch, weil Nutzer dadurch den Eindruck bekommen können, für einen tatsächlich kostenpflichtigen Fernverkehrsabschnitt kein zusätzliches Ticket zu benötigen.

Aktuelles Verhalten

Bei aktiviertem Deutschlandticket werden Teilstrecken mit ICE-Anteilen teilweise als vollständig vom Deutschlandticket abgedeckt dargestellt.

Beispielhaft tritt bei mir sinngemäß folgendes Ergebnis auf:

  • Teilstrecke enthält einen ICE-Abschnitt
  • Split-Ticketing setzt Preis auf 0,00 €
  • App kennzeichnet die Fahrt als durch das Deutschlandticket abgedeckt

Das passiert bei mir wiederholt und nicht nur als einmaliger Ausreißer.

Screenshot_20260706-224010_Besser Bahn.png
Screenshot_20260706-233310_Besser Bahn.png

Erwartetes Verhalten

Eine Teilstrecke darf nur dann als vollständig vom Deutschlandticket abgedeckt und mit 0,00 € bewertet werden, wenn die gesamte für dieses Segment tatsächlich verwendete Verbindung vom Deutschlandticket abgedeckt ist.

Sobald ein nicht abgedeckter Abschnitt enthalten ist, insbesondere z. B.:

  • ICE
  • IC/EC
  • sonstiger nicht vom Deutschlandticket abgedeckter Fernverkehr

darf die gesamte Teilstrecke nicht pauschal als kostenlos markiert werden.

Mögliche Ursache im aktuellen Code

Soweit ich den Code richtig verstehe, liegt eine sehr plausible Ursache in bahn_api_service.dart.

Aktuell wird über alle verbindungsAbschnitte iteriert und bereits dann isCoveredByDTicket = true gesetzt, wenn irgendein einzelner Abschnitt ein Zugattribut mit key == '9G' enthält:

bool isCoveredByDTicket = false;

if (_hasDeutschlandTicket) {
  for (var section
      in firstConnection['verbindungsAbschnitte'] ?? []) {
    final attributes =
        section['verkehrsmittel']?['zugattribute'] ?? [];

    for (var attr in attributes) {
      if (attr['key'] == '9G') {
        isCoveredByDTicket = true;
        break;
      }
    }

    if (isCoveredByDTicket) break;
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions