Member Effectiveness Score
- New BillCosponsor table (migration 0018) with per-bill co-sponsor
party data required for the bipartisan multiplier
- bill_category column on Bill (substantive | commemorative | administrative)
set by a cheap one-shot LLM call after each brief is generated
- effectiveness_score / percentile / tier columns on Member
- New bill_classifier.py worker with 5 tasks:
classify_bill_category — triggered from llm_processor after brief
fetch_bill_cosponsors — triggered from congress_poller on new bill
calculate_effectiveness_scores — nightly at 5 AM UTC
backfill_bill_categories / backfill_all_bill_cosponsors — one-time
- Scoring: distance-traveled pts × bipartisan (1.5×) × substance (0.1×
for commemorative) × leadership (1.2× for committee chairs)
- Percentile normalised within (seniority tier × party) buckets
- Effectiveness card on member detail page with colour-coded bar
- Admin panel: 3 new backfill/calculate controls in Maintenance section
Representation Alignment View
- New GET /api/alignment endpoint: cross-references user's stanced bill
follows (pocket_veto/pocket_boost) with followed members' vote positions
- Efficient bulk queries — no N+1 loops
- New /alignment page with ranked member list and alignment bars
- Alignment added to sidebar nav (auth-required)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from app.models.bill import Bill, BillAction, BillDocument, BillCosponsor
|
|
from app.models.brief import BillBrief
|
|
from app.models.collection import Collection, CollectionBill
|
|
from app.models.follow import Follow
|
|
from app.models.member import Member
|
|
from app.models.member_interest import MemberTrendScore, MemberNewsArticle
|
|
from app.models.news import NewsArticle
|
|
from app.models.note import BillNote
|
|
from app.models.notification import NotificationEvent
|
|
from app.models.setting import AppSetting
|
|
from app.models.trend import TrendScore
|
|
from app.models.committee import Committee, CommitteeBill
|
|
from app.models.user import User
|
|
from app.models.vote import BillVote, MemberVotePosition
|
|
|
|
__all__ = [
|
|
"Bill",
|
|
"BillAction",
|
|
"BillCosponsor",
|
|
"BillDocument",
|
|
"BillBrief",
|
|
"BillNote",
|
|
"BillVote",
|
|
"Collection",
|
|
"CollectionBill",
|
|
"Follow",
|
|
"Member",
|
|
"MemberTrendScore",
|
|
"MemberNewsArticle",
|
|
"MemberVotePosition",
|
|
"NewsArticle",
|
|
"NotificationEvent",
|
|
"AppSetting",
|
|
"TrendScore",
|
|
"Committee",
|
|
"CommitteeBill",
|
|
"User",
|
|
]
|