Conversation
a17410d to
45dbccc
Compare
45dbccc to
75ed574
Compare
|
This PR found a bug: While Apple Numbers only shows non-empty rows, the underlying XLSX XML data can store empty rows. That led to some CVRs having hidden empty rows which we erroneously marked as undervotes. We now correctly detect these rows as rows to be completely ignored and thrown out. |
|
TODO: Audit log should say "read X ballots, of which Y were ignored" or similar, rather than X=only non-empty ballots |
Rather than modifying that row, I opted to add a warning so (A) it's more visible, and (B) we don't need to propagate what is likely source-specific values up from the ES&S reader through the generic reader and into the tabulator session. It says "Ignored %d rows with no votes for any candidates" |
|
Testing I found that setting However, the Maybe we need to set the |
|
It seems that If we want to keep this approach, I suggest changing the |
I think you are right that it needs to be mutually exclusive. For our options
We can work on this vocab... |
|
Makes sense. Suggested vocab:
With 3, the CSV field listing the number of voters who didn't vote at all (Undervotes-No Ranking) would always be zero, and that's invalid. Does it make sense to write "unknown" instead of zero for that field? |
|
This change is getting larger than it seemed as first, so we'll definitely need to add tests to handle each of these options. The code isn't ready yet, but the functionality is more or less there if you want to give it an initial test @yezr to verify this is the right direction. |
|
As we got into this ticket, we started to see clearly that getting some of our assumptions confirmed about the structure of the ES&S CVR export format would help. I was able to speak to ES&S reps about the CVR export and confirmed some assumptions.
That should at least remove the need to handle blanks as skipped ranks. |
|
Finally got an example ES&S CVR with write-in snippets. It's a plurality contest, but it should have the same structure as an RCV CVR. |
|
This gets fun-- images aren't associated with cells, they're simply placed relative to cells but are global items. Step 1: Go through all images, find which cells they seem to be associated with, and mark those cells as UWI That means blanks can either only be "invalid" or "irrelevant contest". Code needs clean-up, but app is ready to test @yezr |
|
What we know now about the ES&S CVR structure
Also, with the changes we've made we are now able to "see" images in the CVR. Before, these were being parsed as empty cells. Now, we are able to differentiate between an empty cell (an unused ranking), and a cell that has an image (a ranking for a write-in candidate). I think then we can get rid of some config options in RCTab
|
ce52daf to
d085946
Compare
deec120 to
7ad9601
Compare
7ad9601 to
b1bbf6e
Compare
| } | ||
| return includeUwi; | ||
| return false; | ||
| } |
There was a problem hiding this comment.
TODO -- think about how to handle this.
Currently the logic is based on whether UWIs are configured. For ES&S, there is no configuration needed: the presence of an image is sufficient. So we'd need to refactor this logic to occur after we read the CVRs.
Closes #981
This PR deprecates "Treat blank as UWI" and "Undervote label." For ES&S, the undervote label is hardcoded. For UWI, we now explicitly search the XLSX for write-in images. Blanks are invalid unless the entire row is blank. When that happens, we report it as part of an irrelevant contest in the audit logs.
This PR discovered that the 2015 Portland Mayor CVRs had images, but "treat blank as UWI" was false. That meant we mistakenly treated blanks as undervotes, not UWI. This PR fixes that in two ways:
Given two fewer config options on the right-hand column, the GUI columns became imbalanced. I moved "Contest ID" from the left column to the right to balance it.
