One bingo call can mark several cards without becoming several calls
Published — UTC

One called number can appear on more than one card. Marking it on two cards does not mean the draw called two numbers. Calls and card marks use different identities.
One event, two card updates
In this invented round, call C-12 announces number 30. Card A contains 30 in a required row; card B contains 30 elsewhere. Both cards receive one mark from the same event.
| Record type | Identity | Count |
|---|---|---|
| Draw call | C-12 / number 30 | 1 event |
| Card mark | Card A / position of 30 | 1 mark |
| Card mark | Card B / position of 30 | 1 mark |

There are two card updates but one draw event. Counting the mark rows as calls would inflate the call counter. Conversely, discarding B’s mark as a duplicate of A’s would remove a valid card-specific update in this model.
Use the right identity for each operation
A call key belongs to the round and call sequence. A mark key also needs the card and position. Python’s set-operation reference supplies the distinct-value concept; the separate keys are the original record-design lesson here.
A shared mark does not complete a combined card. Evaluate each card’s required pattern independently. One square on A and another square on B cannot be pooled into one row unless an actual game’s explicit rule says otherwise.
Complete a pattern on its own card
For a small teaching layout, let card A’s top row be 4, 12, 30 and card B’s middle row be 33, 30, 48. These are fictional 3 × 3 cards, not a claim about a real bingo format. Suppose 4 and 12 are already marked on A, while 33 and 48 are unmarked on B.
When C-12 calls 30, A’s top row becomes complete. B’s middle row contains only its centre mark and remains incomplete. Combining A’s earlier marks with B’s centre would construct a row that exists on neither card. Even A’s completed row is only a pattern result here; any deadline, claim or eligibility rule would be a separate check.
Record the relationship, not just the numeral
The event key can be round R7 plus call C-12. Its two mark records can be R7/A/row 1/column 3 and R7/B/row 2/column 2, both linked to that event key. If a different round R8 also uses C-12, it is a different event. The short call label alone is not a globally unique identifier.
A repeated notification of R7/C-12 should leave the distinct call count at one and these distinct marked positions at two. Counting messages instead would turn a connection retry into an extra call. But deduplicating all mark records using only the called value 30 would wrongly erase one card’s legitimate mark.
Check a correction without inventing a call
If an exported card mark is later corrected, preserve the revision and its link to the original event. The correction does not establish that another number was drawn. Rebuild each card’s current marks from the accepted event history and applicable layout. Where a record is missing or inconsistent, leave that card’s pattern status unresolved instead of filling it from another card.