Story: Parent Cluster Detection

story-westside-streamlit-clusters Doc

active user-story

Story: Parent Cluster Detection

Key: clusters · Label: story:clusters · Role: Ops (Lucas / Ava)

Story

As ops, I need to automatically spot parents who have multiple unsigned kids, so I can have the "sibling discount" conversation with them as one call instead of calling the same parent twice.

Why

A parent with two unsigned kids is a very different conversation than a parent with one. The business decision (apply a sibling discount? bundle the contracts? waive a fee?) depends on knowing they're a cluster. Calling them twice and having two separate half-discussions is the failure mode. The dashboard should surface these clusters automatically so ops doesn't have to hand-scan for duplicate emails.

Acceptance criteria

  • Below the filtered Offered dataframe, a warning banner appears only when there are parent clusters in the current filter.
  • Banner lists each parent email with the count of unsigned kids: e.g., "jane@example.com (3), bob@example.com (2)".
  • Clusters are computed from the current filtered view, not the full offered pool, so filtering to a specific team shows team-scoped clusters.
  • Parents with a single unsigned kid never show up in the cluster list.

Current implementation

Already built in app.py lines 77–83. Matches acceptance criteria. Captured for traceability.

Future enhancements (not yet tickets)

  • Make the email clickable — one click filters the dataframe to just that parent's kids.
  • Extend cluster detection to the Jerseys view (one parent buying 3 jerseys might qualify for a bulk discount).
  • Surface which teams the cluster spans (e.g., "both kids on 17U Kings" vs "one on Kings, one on Queens").