# 1-in-3 sampling with repeat contact attempts

**URL:** <https://forum.getodk.org/t/1-in-3-sampling-with-repeat-contact-attempts/58549>\
**Category:** Support\
**Tags:** form-design, odk-collect, odk-central, odk-xlsform\
**Created:** [September 9, 2026, 8:07am UTC](https://forum.getodk.org/t/1-in-3-sampling-with-repeat-contact-attempts/58549 "2026-09-09T08:07:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![johnmill99](https://getodk.b-cdn.net/letter_avatar_proxy/v4/letter/j/7cd45c/32.png) [@johnmill99](https://forum.getodk.org/u/johnmill99)\
**Post date:** [September 9, 2026, 8:07am UTC](https://forum.getodk.org/t/1-in-3-sampling-with-repeat-contact-attempts/58549/1 "2026-09-09T08:07:09Z")

</div>

I could really use advice on this one. We have a design that works on paper and I am trying to move it into ODK without losing anything, but the state tracking is beyond what I have built before.

### What the fieldwork looks like

### The rules that make it hard

Three outcome families, each doing something different to the slot:

| outcome | address | slot | next door uses |
| --- | --- | --- | --- |
| interview completed | done | **closed** | the next slot number |
| refusal, denied entry, language barrier, break-off | dead | stays **open** | **the same slot number again** |
| nobody home, come back later | still live, up to 3 attempts | **pending** | the next slot number |

So a refusal does not consume a slot. If slot 3 refuses, the next household along the route becomes slot 3 again.

A pending slot provisionally holds its address. The interviewer does not wait — they carry on down the route and come back later. Several slots can be pending at once.

If a pending address uses all three attempts without success, **that address dies and the slot reopens**. But it cannot be refilled immediately: a replacement address only exists beyond the last main household, so **every one of the 10 slots must have been attempted before any replacement can be used**.

An example. Slots 1, 3–8 are done, slot 2 has failed three attempts, and 9 and 10 have never been touched. Even though 2 is the lowest open slot, the interviewer must do **9 and 10 first** , and only then fill slot 2 with a replacement address.

One more constraint: **last birthday depends on the current date** , so re-listing a household on a later visit can select a different person. Whoever was selected on the first visit has to persist.

Every attempt is recorded, successful or not, with date, time and outcome.

### Where it gets complicated

**A slot is not an address.** If all three attempts at slot 2 fail, that address is finished, but slot 2 stays open. It is later filled by a different address, a replacement, found by continuing the route past slot 10. So the slot number persists and the dwelling behind it can change.

**Replacements cannot start early.** Because replacement addresses are located beyond the last main household, every one of the 10 slots must have been attempted before any replacement can be used. So if slots 2, 9 and 10 are outstanding and slot 2 has already had three failed attempts, the interviewer must go to 9 and 10 first, and only then use a replacement address to fill slot 2.

**The respondent selection cannot be recreated later.** Last birthday depends on the current date, so listing the household again on a second visit can select a different person. Whoever was selected on the first visit has to persist.

**Every attempt must be recorded** , successful or not, with date, time and outcome.

### The actual problem

An interviewer **may work** the same sampling point across **several days**. When they open the form at the next door, _they need to know which slots are closed, which have a pending revisit and how many attempts each has used, whether all ten have been attempted yet, and therefore which slot number to use now._

Today this lives on a paper sheet and in the interviewer's memory. That is what I am trying to eliminate. With several pending revisits at once it is genuinely easy to get wrong, and a mistake corrupts the sample rather than just the paperwork.

What I would like the interviewer to see when they open the form:

> Sampling point 042  
> Slots 1, 3, 4 completed. Slot 2 pending, 2 of 3 attempts used, respondent already selected. Slots 5 to 10 not started.  
> Next slot to use: 5

### My questions

1. Are **Entities** the right tool here, with one entity per slot holding status, attempt count and the selected respondent, updated by each submission? Are there known pitfalls with repeatedly updating the same entity from successive submissions?
2. The "all ten slots attempted before any replacement" condition is a rule about the **whole sampling point** , not one slot. Can that be evaluated inside a form, for example by counting entities in a list that match a condition, or does it have to be precomputed server side?
3. Is there any way to show a **summary of several entities on one screen** , so the interviewer sees the state of the sampling point rather than having to select one entity to inspect it?
4. If two interviewers share a sampling point, can entity list updates be relied on to sync between devices, and what delay should I expect?
5. Has anyone solved something similar **without** Entities, and would you recommend that route instead? I would rather use a simpler mechanism if one exists.

---

<div class="post-metadata">

**Author:** ![Stephen\_K\_ojwang](https://getodk.b-cdn.net/user_avatar/forum.getodk.org/stephen_k_ojwang/32/7727_2.png) [@Stephen\_K\_ojwang](https://forum.getodk.org/u/Stephen_K_ojwang)\
**Post date:** [September 10, 2026, 4:50pm UTC](https://forum.getodk.org/t/1-in-3-sampling-with-repeat-contact-attempts/58549/2 "2026-09-10T16:50:11Z")

</div>

This seems quite complicated but with the odk entity features, the only limit is your imagination.Here is how I would approach this; I have modeled the sampling point using ODK Offline Entities, treating slots as persistent containers (1–10) while allowing physical addresses to change dynamically.

**Key Entities & Setup**

Pre-populate 10 Slot Entities per sampling point with the following attributes:

- _point\_number (e.g., "042")_
- slot\_number (1 to 10)
- _outcome (Open [default], Pending, Done)_
- _visit\_attempt (Integer, initialized to 0)_
- _replacement\_times (Integer, initialized to 0)_
- _selected\_pax (Text, initialized blank)_
- _slotlabel (Dynamic display string: e.g., "Slot 2 - Pending (2/3) - Pax: John")_

**Core State & Lifecycle Rules**

1. Attempts & Refusals: Refusals and entry denials do not consume an attempt—they keep outcome = 'Open' and visit\_attempt = 0 (and if you want update replacement\_times to 1) at the same slot. "Nobody Home" sets outcome = 'Pending' and increments visit\_attempt.
2. Respondent Persistence: selected\_pax is recorded on the first successful contact. On return visits (visit\_attempt \> 1), the household listing module is completely skipped, locking selected\_pax to prevent algorithm drift caused by date changes.
3. Address Failure & Replacement: If a household fails 3 attempts (visit\_attempt = 3), the address dies. Upon submission, the slot resets: outcome = 'Open', visit\_attempt = 0, and replacement\_times increments by +1 (clearing selected\_pax).
4. Automated Slot Allocation Logic( a read-only calculation on a select\_one slot number question - a follow up question after selecting a sampling point): To enforce the protocol requiring all 10 main slots to be attempted before using replacement addresses past Household 10, the form evaluates a 3-tier sequence:

_Phase 1 (Main Slots):_ Select lowest slot\_number where replacement\_times = 0 and visit\_attempt = 0.

_Phase 2 (Pending Revisits_):Once all 10 main slots have visit\_attempt \> 0, select lowest slot\_number where outcome = 'Pending'.

_Phase 3 (Replacements):_ Once main slots are attempted and pending revisits are clear, select lowest slot\_number where replacement\_times \> 0 and outcome = 'Open'.

**Operational Caveats & Assumptions**

_Device Finalization Mandate:_ ODK Collect updates local offline entities only after form finalization. Interviewers must finalize and submit standing at the door; saving drafts across multiple households will break local state tracking.

_Multi-Interviewer Sync:_ If two interviewers share a sampling point offline, split their slot allocations statically (e.g., Interviewer A takes 1–5, Interviewer B takes 6–10). Cross-territory work requires going online to sync device states first to avoid collisions.

_Unlimited vs. Capped Replacements:_ This model assumes infinite sequential replacement until a slot hits Done. If a methodologic replacement cap exists (e.g., max 2 replacements), add a constraint blocking selection when re

placement\_times \> MAX.

Let me know if this can work for you and where you needs further clarification.

---

<div class="post-metadata">

**Author:** ![johnmill99](https://getodk.b-cdn.net/letter_avatar_proxy/v4/letter/j/7cd45c/32.png) [@johnmill99](https://forum.getodk.org/u/johnmill99)\
**Post date:** [September 15, 2026, 9:12am UTC](https://forum.getodk.org/t/1-in-3-sampling-with-repeat-contact-attempts/58549/3 "2026-09-15T09:12:13Z")

</div>

Thank you very much. I was thinking of doing sth with entities, but since it was my first time I was a bit hesitant and I thought maybe there was a ODK manual ready for this. I did sth with entities and unti now it is going good.
