hackforla / ballotnav

A repository for HackforLA's BallotNav project
https://BallotNav.org
GNU General Public License v2.0
24 stars 15 forks source link

Overhaul in order to support elections other than federal #371

Open aNullValue opened 3 years ago

aNullValue commented 3 years ago

Overview

If BallotNav is going to continue into the future, it needs to have the ability to work on multiple elections concurrently (for example, a single jurisdiction might have an election in February and another in March, and those elections might have different sets of drop boxes, voter eligibility, etc., in an overlapping time frame.

Action Items

"Everything" will need to change: database/schema/models, backend, admin ui, client ui...

(Jake and I should discuss how to approach this)

Resources

Overhaul database spreadsheet

ExperimentsInHonesty commented 3 years ago

Please provide update

  1. Progress
  2. Blockers
  3. Availability
  4. ETA
kcoronel commented 3 years ago

Hey Drew, wanted to check in on the status of the issue, can you answer the following- thank you!

  1. Progress
 so far
  2. Any roadblocks?
  3. Availability
 to complete issue
  4. ETA for issue to be completed
aNullValue commented 3 years ago

Generally, we need to remodel the jurisdiction and wip_jurisdiction tables so that they become election-specific, and a new jurisdiction table be created. i.e.:

Election (new): id description election_date

Jurisdiction (new, formed from former Jurisdiction): id stateid name fips timezone_

ElectionJurisdiction (formerly Jurisdiction): id jurisdiction_id election_id geojson wip_electionjurisdictionid validation*

WipElectionJurisdiction (formerly WipJurisdiction): (remodeled substantially after ElectionJurisdiction)

Questions: Do we want the ability to support small elections (where only part of a jurisdiction is open)? Do we want the ability to support the scenario where drop boxes (or early voting centers, because these concepts are merged in some places) only permit a subsetof the jurisdiction's voters?

aNullValue commented 3 years ago

I need to have these two questions answered:

  1. Do we want the ability to support small elections (where only part of a jurisdiction is open)?
  2. Do we want the ability to support the scenario where drop boxes (or early voting centers, because these concepts are merged in some places) only permit a subset of the jurisdiction's voters?

My availability is extremely limited right now. I'm going to un-assign myself from this issue, though I'm still going to be thinking about how to move forward with this. Lack of guidance/funding/direction for how this project will definitely be used in the future has been incredibly demotivating to me, and I'm now prioritizing other civic projects.

I have no ETA.

I can ballpark-guess that this would probably take me >8 hours to make substantial progress. After I got done with my portion, back-end/API devs would need to do a massive amount of work, followed by front-end devs. I see no viable way for this to be completed in time to run BallotNav for June elections.

kcoronel commented 3 years ago

@aNullValue and @jmensch1 will work on writing up the scope of the problem and how much money or full-time work hours equivalent will it take as well as who will benefit.

aNullValue commented 3 years ago

This message exists as a point of thought/discussion between @jmensch1, @alligatormonday, @aNullValue, and anyone else interested in complex data modeling problems.

Consider this message a brain-dump and not organized in any way. I intend to add, remove, modify, etc., this message over the next few days.

In all below statements, when I refer to "some subset", I am generally referring to one or more voting precincts, which may or may not align to some logical governmental district. Precincts are defined geographically, and many jurisdictions have GIS shape files to provide their boundaries, but many (including most small ones) do not. We therefore could consider 1) attempting to determine that voter's precinct (with huge warnings (perhaps state or jurisdictionally-specific) that they must verify that our attempt is correct), and also 2) have some kind of text field to describe what area/precincts are eligible to vote in/at/using each center/dropbox.

A jurisdiction (much less state) may not definitively know where their early voting center, drop boxes, polling locations, etc., will be located until very shortly before an election (<30 days, potentially after ballots become available).

In primary elections, we need to know which parties are having an election where. This may vary within a jurisdiction because of small-office race contests. It might also not vary by jurisdiction, such as if there is a state-wide (or at least jurisdiction-wide) issue (not office) that causes ballots to be generated for everyone.

How do we handle things like caucuses or other primary-ish elections that aren't traditionally balloted?

A state may have drop boxes available in various jurisdictions (generally 24/7, but perhaps following a schedule), which permit anyone in the state to return their ballot anywhere. (i.e., Oregon)

A state may order jurisdictions to provide drop boxes for their own voters, and Inform the voters that they must return their ballots to only their own jurisdiction, but nonetheless order jurisdictions to send ballots received for an incorrect jurisdiction along to the appropriate jurisdiction.

A jurisdiction may have no ballot drop boxes available to anyone.

A jurisdiction may have one or more indoor or outdoor ballot drop boxes available to all or to some subset of its voters.

A jurisdiction may have early voting centers -- not drop boxes, but which accept returned mailed ballots -- available to all or some subset of its voters.

A jurisdiction may conduct one election (for all or some subset of its voters) at the same time it is conducting a different election (for all or some subset of its voters). For example: the City of Columbus may order that an election be held (restricted to within the City of Columbus) in April. The State of Ohio may order that a state-wide primary election be held in May. Because of early/absentee voting windows, voters may be casting ballots in multiple elections (with or without drop box / early voting center overlap) concurrently.

A state may refer to "early", "absentee", "advance", etc., voting by various names, with various meanings. A jurisdiction may confuse this even more. For example, in Ohio, there is legally only the concept of "absentee" voting, but most jurisdictions and voters consider that to be mailed ballots, and consider in-person absentee voting to be "early" voting.

A jurisdiction may support multiple languages: English, Spanish, Chinese, Hindi, Arabic, Armenian, Hmong, Korean, Persian, Syriac, Tagalog, Gujarati, Polish, Russian, Ukrainian, Urdu, Haitian Creole, French, Albanian, Greek, Italian, Yiddish. These ballots may be generated only for a subset of their precincts (based on where voters of that language reside).

A jurisdiction may not be able to certify (definitively tell us whether or not they're actually going to have an election) until relatively shortly before an election (perhaps 45-60 days).

The date on which ballots begin being mailed or otherwise made available to voters may practically vary by jurisdiction despite state law providing a specific date (often 30-45 days).

State law may permit primary elections to be held only for specific parties (democrat, republican) regardless of other parties having filed petitions causing contest. This may cause

A state (always?) provides for a deadline for when absentee ballots must be requested. This deadline might be different based on whether 1) a mailed ballot is requested via mail, 2) a mailed ballot is requested in person, 3) an early-in-person ballot is requested, 4) (others?). A state or jurisdiction may provide strong recommendations of earlier "soft deadlines" by which they recommend everyone has requested or returned their ballots in order to compensate for mail slowness.

A jurisdiction may or may not permit mailed ballots to be returned to the polling locations on Election Day. Generally, but not always, this means that the voter must return their mailed ballot to the polling location assigned for their precinct, but that's not always the case -- some polling locations can accept mailed ballots for all precincts in a jurisdiction, some jurisdictions just don't have precinct-specific polling locations, etc.

A state or jurisdiction may permit mailed ballots to be returned in-person to specific offices of that jurisdiction (or state) by a specific deadline (often the same deadline as the close of polls, but sometimes it's exactly 24h earlier, and can vary). I.e., any voter of a jurisdiction may return their ballot to any of 99 early voting centers in the days preceding Election Day; any voter of that jurisdiction may return their ballot to only one specific office on Election Day, and/or any voter of that jurisdiction may return their ballot to only their assigned precinct's voting location.

A state (I don't think it ever varies by jurisdiction?) may permit ballots to be counted for official purposes if they are received by USPS ("postmarked") on Election Day. Exploiting this ability is definitely something that should be pointed out, particularly if the voter's sole alternative is to return their ballot to only one office/location on Election Day.

A jurisdiction may have multiple "main offices". This happens in one particular southern state whose name I cannot remember; they have multiple courthouses in the county because they have multiple "large" cities in their county. I have no idea what the implications of this are for voters being able to use the courthouse other than to which they're assigned, or if there is an assignment, or... what.

A jurisdiction may "provide election supplies to other districts which conduct their own elections". For example, in New York state, this is a possibility for i.e., school and fire districts. The county provides the supplies, but the school or fire district actually does the actual elections administration. I have not yet thoroughly explored the potential of any far-reaching ramifications/implications.

(Potential duplicate) A jurisdiction may have some locations where anyone in the jurisdiction can return their mailed ballot or cast an early in-person ballot, and also have some locations where only individuals residing in specific precincts can do so. For example, I believe it was Will County IL (and others) where I encountered this for Nov 2020. They had a list of facilities (generally government) that anyone in the county could use, and a list of facilities (generally churches) that could only be used by the precincts that lived in/near each of those facilities.

jmensch1 commented 3 years ago

Ok I've got a brain dump too. I'll start with a proposed domain model, then give examples of how the model works, then show how a query would work if we used the model, then try to justify myself.

Domain Model

1. the objects and their attributes

Election

Boundary

Administrator

Drop-off Location

2. the relationships between the models

An Election has 0 to N Drop-off Locations An Election has exactly one Boundary A Boundary has 0 to N interior Boundaries (this is important -- note this is a recursive one-to-many relationship) A Boundary (at any level) has 0 or 1 Administrators

Examples

1. presidential election

The top-level Boundary is the United States. This is an exclusive boundary -- people who aren't from the US can't vote. This boundary probably doesn't have an Administrator (at least not one likely to speak with us). The United States itself has 50 Boundaries (the states). These are also exclusive -- i.e. someone from Georgia can't vote in California. These boundaries probably have Administrators, but they may not be deeply involved in setting up ballot drop-off locations. Each state has multiple Boundaries (the counties). In most cases these are exclusive, but in some cases it might be okay to vote in a different county from the one you live in. The counties almost certainly have Administrators and would likely be our primary points of contact.

2. an city election for mayor that's run by the county

The top-level Boundary is the boundary of city. This is exclusive -- people who don't live in the city can't vote for mayor. And the Administrator of that Boundary is the county (by hypothesis). Within the city there may also be precinct-level divisions, i.e., second-level Boundaries. Depending on the city, these may or may not be exclusive, and may or may not have Administrators.

How a query works

When we get a query, we identify all the Elections that are in the future. Among those Elections, we identify the ones whose Boundary (the top-level one) includes the user's lnglat. These are the elections in which the user is qualified to vote. If there is more than one such election, we ask the user to choose among them.

Having identified the election, we descend the Boundary tree recursively until we get to the last exclusive boundary that contains the user's lnglat. And we show the user all of the ballot Drop-Off Locations within that Boundary (ordered by distance from the user).

Why this makes sense

We're currently working with the Jurisdiction concept, which has a nice legal ring to it but also conflates two distinct ideas: (1) election administration, and (2) the geographic boundaries that govern who can vote in a given election and where they can drop off their ballots. This is fine for national elections, but becomes problematic when we're talking about local elections where the administrator may be a completely different entity than the one holding the election, and where the geographic boundaries of the administrator aren't relevant to the election. So I'm basically proposing that we separate these two concepts into two different models.

The recursive Boundary relationship I'm suggesting is admittedly not the most intuitive, but it actually reflects the reality of government -- namely that there are many different levels of government, which are involved to varying degrees in elections depending on the scope of the election as well as local practices regarding election administration.

aNullValue commented 3 years ago

Additional scenario: City of Columbus unexpected vacancy in office

The boundary of the district associated with a race (contested office, question, measure, whatever) often has little or nothing to do with the boundary of the election administrators involved.

For example:

Any third-party observing this conversation should be aware that I acknowledge this scenario is not currently legally compatible with Ohio law and directive. It is nonetheless a scenario that can and does happen, to various degrees, in various areas nationwide.

Points of note about that scenario:

Points of disagreement with Jake's last message

An Election has 0 to N Drop-off Locations An Election has exactly one Boundary

these both depend on how you define "election". if you define "election" as "an event generally associated with a single date operated by some government agency, for which a voter can receive a ballot", then no: drop-off locations may be distinct for subsets of voters, and the election may have any number of boundaries. but if you define "election" closer to being "race" (meaning contested office, question, issue, etc), then it would have exactly one boundary, but that boundary often (though not always) has little to do with which office conducts the election

A Boundary (at any level) has 0 or 1 Administrators

probably not. if the boundary has to do with a logical district (such as "City of Columbus"), then it would have 1 to N administrators; one of them would be "lead" within each State, but that matters essentially not at all for BallotNav purposes. for federal elections, the appropriate boundary would have zero administrators, because there's no federal agency that conducts elections; it's always State(s), and the ballot content for federal races can vary by state. (Ohio's list of Presidential candidates was not the same as California's list of Presidential candidates, for example.)

there is also the situation whereby a State uses multiple government agencies to fill different roles of election administration. in Michigan, there are multiple authorities that conduct elections: the municipal clerk is responsible for voter registration, processing absentee ballots, and managing drop boxes; the county clerk is responsible for overseeing election management and providing training to poll workers; the state handles some other functions and functions as an electronic clearinghouse between voters and their respective municipal or county clerks. the intersection of all of these (state, municipality, county) would be the resulting effective EAJ for each voter: "City of Detroit, Alpha County, Michigan" might be one, and another might be "City of Detroit, Bravo County, Michigan". voters anywhere in the City of Detroit can return their ballots to any City of Detroit drop box, but tabulation/results/supervision/etc is provided by different counties based on the voter's precinct (and thus county) of residence.

Within the city there may also be precinct-level divisions, i.e., second-level Boundaries. Depending on the city, these may or may not be exclusive, and may or may not have Administrators.

Precinct is nationally obligated to be the smallest designated place, so there will literally always be precincts contained by every other district of any type. But a precinct never has its own administrator, and voters residing in one precinct very frequently have to travel to some other precinct to vote, even if that destination location is reserved for a small list of precincts.

When we get a query, we identify all the Elections that are in the future. Among those Elections, we identify the ones whose Boundary (the top-level one) includes the user's lnglat. These are the elections in which the user is qualified to vote. If there is more than one such election, we ask the user to choose among them.

Realistically speaking, I think that what we're reasonably going to be able to do is identify the user's EAJ -- which is generally county, but might be municipality or something else -- and then enumerate all elections happening anywhere in that EAJ, and provide text indicating what subset of voters are eligible to vote in that election. For EAJs that make precinct-level geography available, we could take it down that far, but that would be a lot more work, and some States and EAJs just don't make that info available.

Having identified the election, we descend the Boundary tree recursively until we get to the last exclusive boundary that contains the user's lnglat. And we show the user all of the ballot Drop-Off Locations within that Boundary (ordered by distance from the user).

I'm not sure that this will ever necessarily be true, but that might be based on a misinterpretation of what you mean by boundary here. In the above City of Columbus example, the race is assigned to the district "City of Columbus", but 1) voters must return their ballot to their correct county, and 2) counties may or may not put drop boxes in locations convenient to voters, and 3) I have real-world knowledge that there is no drop box for Fairfield County in Columbus, but there is a drop box for Franklin County in Columbus. If by Boundary you meant county or even EAJ, then that would only be true if the county determined that all of their locations were available for county-wide use (which is true at the moment, in Ohio, but was not true in the past and is absolutely not uniformly true nationwide).

We're currently working with the Jurisdiction concept, which has a nice legal ring to it but also conflates two distinct ideas: (1) election administration, and (2) the geographic boundaries that govern who can vote in a given election and where they can drop off their ballots. This is fine for national elections, but becomes problematic when we're talking about local elections where the administrator may be a completely different entity than the one holding the election, and where the geographic boundaries of the administrator aren't relevant to the election. So I'm basically proposing that we separate these two concepts into two different models.

the geographic boundaries that define who can vote in a given election and where they can drop off their ballots are often unrelated, and the geographic boundary of the administrator may or may not be relevant, on a case-by-case basis, generally as determined exclusively by that administrator.

ugh

having spent two hours typing that, i suspect it's nearly incomprehensible. i should have just waited until we had time to chat about it instead.

aNullValue commented 3 years ago

Last night we (Jake, Joseph, and I) held a Zoom call to discuss this and other BallotNav-related concerns. Among our comments (for our reference rather than for others to do anything with):

  1. we must find a way to effectively convey in the app that the address provided by the voter (or geolocation if chosen/detected) needs to match the voter's registered address for voting purposes... only in the areas where that matters (it does not matter in some, as same-day registration/correction is a thing).
  2. maintaining accurate boundary maps is necessarily critical to the success of ballotnav.
  3. we should come up with an entity relationship diagram, but the schema needs to be very significantly changed, so now isn't the time
  4. we agree that it is worthwhile for us to always endeavor to provide a complete enumeration of voting "locations" (be those drop boxes or early voting centers or whatever other term some state might use or come up with). in scenarios where the EAJ restricts use of some location(s) to subset(s) of voters, and we do not have adequate boundary (or other) information available (from the EAJ) for us to definitively calculate that particular voter's eligibility, we should use text fields to attempt to explain the eligibility or situation associated with each location. that way the voter might be able to figure out if they're eligible and where/how to vote, even if we don't have all of that information.
  5. we should strive to use terminology and methodology already commonly used by election administrators whenever practical. this would make future cooperation and/or integration with local governments easier than if we attempted to abstract away some concept that they consider critical. it would hopefully also provide somewhat increased understanding for volunteers who would be simultaneously using our apps and also local government websites/apps/etc.

And I'm sure there was more that I didn't happen to make note of (this was an informal discussion).

Not during the conversation but which occurred to me since:

I'm pondering the need for a training session/curriculum/video/something along the lines of "ELI5: US Elections Administration". Like a quick run-down of the various concepts, how many things vary by state/jurisdiction, what EAJ even means, how and why districts overlap, the importance of identifying the correct voting location, etc. Most importantly for developers; it's difficult to design ideal solutions for a nationwide project despite lots of motivation, if you're only familiar with how elections work in one particular area/scenario. And then maybe a "lite" version of that for volunteers who might be doing data collection/analysis? I don't have any answers here, at least yet, but it's certainly fun to contemplate. It might also ultimately save us a lot of time down the road -- send a link to the video to new people and then be prepared to questions, rather than trying to ensure you cover every relevant complexity with each person every time.

jmensch1 commented 3 years ago

I think some sort of elections tutorial is a great idea, especially since I was in the dark about some basic aspects of how elections work (like precincts).

Also some other things I've been thinking about --

Multiple EAJ's for an individual voter?

We discussed the Columbus Ohio scenario, where the city delegates election administration to the county level (actually multiple counties). But are there cases where a city administers its own city-wide elections? And if so, isn't it possible that residents of the city have multiple EAJs -- like a county-level EAJ for federal elections, and also the city as an EAJ for city-wide elections?

Ballotopedia's Sample Ballot Lookup

Have you played with their sample ballot lookup tool?

Given a lng/lat, their api is able to identify upcoming elections, as well as all races and ballot measures in those elections. Based on the responses from their api, their domain model appears to look something like this:

Ballotopedia

Obviously this doesn't solve our modeling problem since it doesn't touch all the hairy details of election administration, but still may be helpful in terms of mapping out the election-related space.

aNullValue commented 3 years ago

Current Lucid diagrams (draft): https://lucid.app/publicSegments/view/fd6ca8fc-3f3e-46d4-9f8b-5bf31185f434

kcoronel commented 3 years ago

@salice ^

aNullValue commented 3 years ago

I attended the data science meeting last Thursday night. The feedback I need really needs to come from someone who also has real-world elections administration experience, which requires Sophia. Unfortunately Sophia was unable to attend that meeting due to an illness. At the moment I'm blocked waiting for Sophia. But this issue does not block New Jersey from being conducted.

aNullValue commented 3 years ago

No progress was made on this issue in the last week. Sophia and I plan to discuss the latest schema draft later this week.

aNullValue commented 3 years ago

Sophia and I plan to meet this Thursday, May 13, to discuss the potential schema.

kcoronel commented 3 years ago

@aNullValue Please provide update from your meeting with Sophia and any

  1. Blockers

  2. Next Steps and ETA

Thank you!

aNullValue commented 3 years ago

Per my comments at last week's meeting: Right now my blockers are the need for a comprehensive set of features that we want to support in the future. I've got a good handle on data used in the elections world, but... I don't have a good grasp on what all of that data might be useful to this project.

Beyond that, it would be incredibly useful to have some kind of discussion regarding how auditing changes should be dealt with. For November 2020, we attempted to emulate how it's done with Food Oasis, but that's not feasible when we might be collecting massive amounts of data (via volunteers, or from the jurisdictions themselves, or etc).

An example:

Franklin County Ohio might be having a partisan primary for the City of Columbus on the same day as a special/nonpartisan election in the City of Gahanna. In order to accurately represent this, we would need at least this information:

I don't consider it practical to require that every time anyone touches a jurisdiction, that they would have to review 100% of that to assert that it's all correct, before saving. If, for example, the person doing the editing is notified that that hours of a location have changed, then changing the hours of that location is what would need to be audited as having been completed by them. That doesn't mean that they reviewed the district names, or boundaries, or parties, or anything other than the hours for that location.

There are multiple ways that we could accomplish effective auditing in the database. Right now I'm struggling to figure out what approach would work best for how to store that information; there are pros and cons to each approach (substantial enough I don't want to attempt to address them here). Something that might help would be a first draft of how we would expose that auditing to the end user... or a decision not to expose it to the end user. If we're not going to expose that to the end user, then which choice I make here could be made for other (strictly technical) reasons. But if we are... getting an idea of how that might look would hopefully help point me in the right direction as to which technical implementation would be best. I don't need a fully-completed proposed UI... just a wireframe or crudely drawn sketch would likely work. Because right now I can't even begin to envision how we might expose this in a manner that end-users are likely to be able to understand.

kcoronel commented 3 years ago

At the moment working on Secretary of State Research Project, will need to update on conversation with Bonnie and proposals

kcoronel commented 1 year ago

This issue is not being worked on and would need to be thought about if we continue to iterate on the current BallotNav tool as it exists in helping voters in jurisdictions find ballot drop box information.