Skip to content

[Data Source] Vote-by-mail return rules: postmark vs received-by, request and mailing dates #295

Description

@ThatXliner

Why

The single most misunderstood rule in vote-by-mail is that "postmarked by"
and "received by" are two different deadlines
. A ballot postmarked on
Election Day but arriving after the receipt window is not counted, and a voter
who knows only one of the two dates can lose their vote by acting on it.

The How to Vote design treats these as two separately labelled facts and never
merges them into one sentence. That requires both dates, sourced.

What to ingest

Per state (California first), per election where it varies:

  • vbmPostmarkDeadline — the date the ballot must be marked by the postal
    service.
  • vbmReceivedByDeadline — the last date the county may accept a postmarked
    ballot. Distinct from the above; the grace period varies by state.
  • vbmRequestDeadline — irrelevant in all-mail states, critical elsewhere.
  • ballotsMailedStartDate — when the county begins mailing.
  • dropBoxCloseTime and pollCloseTime — local, and the "if you're in line at
    closing you may still vote" rule depends on the latter.
  • postagePrepaid — whether return postage is prepaid.

Explicitly not derivable

ElectionHero computed "Ballots mailed" as electionDay - 8. Invented.

Google Civic's mailOnly flag tells us an election is all-mail; it tells us
nothing about return deadlines. absenteeVotingInfoUrl is a link, not a rule,
and is not reliably populated.

Done when

  • Both postmark and received-by dates modelled as separate nullable fields —
    never one combined "deadline"
  • California populated and verified
  • The UI can render postmark-only when the receipt rule is unknown
  • Source URL, authority, and fetch timestamp on every field

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions