MIGRATION RESEARCH COLLECTION KIT
Version 1.0 | 2026-10-02
Blank templates. No participant data or benchmark results.


STATUS
Blank collection template. No participant records, benchmarks, savings claims or ROI results have been collected or calculated. Version 1.0, 2 October 2026.


START A CASE
Create a unique country_group_id, migration_id and employer_pseudo_id in Cases. Reuse country_group_id in every related Costs, Outcomes and Support reviews record. Do not join by row number.


SOURCE HANDLING
Retain only permitted, appropriately redacted source copies in restricted storage. Preserve relevant amounts, units and page/line locators. Enter opaque source IDs here. Never embed private calls, recordings, transcripts or credential-bearing links.


DATA MINIMISATION
Do not collect names, contact details, employee identifiers, individual pay, health information or immigration details. Pseudonyms and redaction do not make a dataset anonymous. Keep the identity mapping outside this workbook.


PERMISSION
Record collection/retention permission and publication permission separately. Verification is not permission. A permission grant does not establish accuracy. Honour any limits or withdrawal scope before further use.


UNKNOWN AND ZERO
Leave unknown numeric and date cells blank. Use zero only when explicitly confirmed. For missing or not-applicable fields, record the field name and reason in missingness_notes. Category fields may use their listed unknown value.


RECORD EVIDENCE
Use reported_only, document_seen, reconciled, disputed or unknown for each row. Document seen confirms the source was inspected; it does not certify every claim. Keep the source locator and verification date.


COLLECT COSTS
Use one line per currency, service period, category and scope. Preserve source signs. Never add a quote and its invoice as if both were expense. Keep one-off expense and refundable cash separate.


COMPARE COSTS
Use comparison_pair_id only for the same currency, category, period, population and service scope, with compatible tax and pre/post-discount bases. Do not infer FX fees or mix currencies.


FOLLOW UP
Collect baseline, first scheduled payroll (including a missed run), day30 and day90. Preserve the scheduled first payday, completion date and observation window. For stay/cancel cases, use a documented decision/planned anchor and a separate cohort.


RETAIN DISPOSITIONS
Keep voluntary recruitment, stayed, cancelled, delayed and no-response cases visible, subject to permission and withdrawal requirements. Do not remove unsuccessful cases or treat missing follow-up as a successful migration.


COUNT DENOMINATORS
Report distinct employers, migrations and country groups separately. At each checkpoint disclose eligible, due, observed, partial, no-response, withdrawn and not-yet-due counts. State which denominator a statistic uses.


OUTCOME DEFINITIONS
Payment counts measure usable funds by the due deadline; payslip counts measure document issuance/correction. Use their own due-count denominators. Overdue unpaid payments are a subset of late payments. Do not sum repeated snapshots or overlap summaries.


SUPPORT AND REVIEWS
Keep role-specific accounts separate and link shared events with incident_id. Record the as-of date and review window, promise versus experience, UTC timestamps with source timezone, incentives and publication scope.


DATES AND UNITS
Excel date inputs are typed dates displayed YYYY-MM-DD. Timestamp inputs are typed UTC date/times. CSV dates use YYYY-MM-DD; timestamps use YYYY-MM-DDTHH:MM:SSZ. Currency amounts are plain numbers plus ISO currency codes.


USE AND EXTEND
Each input table has 100 blank rows (Excel rows 2–101). Add rows to the native Excel table and copy the last blank row’s formats and validation. CSV templates contain a header and 100 empty rows; ignore unused blank rows during import.


BEFORE ANALYSIS
Check unique record IDs, valid case links, duplicate sources, chronology, currencies, scope equivalence and missingness. This template provides dropdowns, not automatic join or completeness enforcement. Consult Codebook for all fields.


BEFORE SHARING
Keep completed workbooks restricted. Review permission scope, small-group identifiability and free text before publishing anything. The blank download has no participant data and does not supply encryption or access control.


ROW GRAINS AND KEYS
Cases: One country group in one employer migration decision. Split groups when country, route or employing arrangement differs.
Unique key: country_group_id.

Costs: One source line item for one country group, provider, currency, service period and scope. Split mixed-currency or mixed-scope lines.
Unique key: cost_line_id.

Outcomes: One country group at one checkpoint. Use a defined observation window. Keep repeated checkpoints separate and do not sum snapshots.
Unique key: outcome_id.

Support reviews: One role-specific account of a support event or review for a country group. Shared incidents use incident_id. No person-level identifiers.
Unique key: support_record_id.

JOIN AND COHORT RULES
Cases.country_group_id is the foreign key for the other three tables. Duplicate IDs and orphan references require review before analysis. Several country groups can share a migration, and several migrations can share an employer pseudonym. Count distinct units at the stated level. Retain recruitment channel, stay/cancel decisions and follow-up disposition. Report missingness and observation windows. A voluntary sample is not automatically representative. Do not make causal savings or ROI claims from this collection template.

MONEY AND TIMING RULES
Do not sum currencies or quote/invoice versions. Treat expense, credit and refundable cash separately. Costs is the transaction source; Outcomes overlap fields summarise those same records and must not be added again. Compare FX rates only with the same pair orientation and a known reference fixing time. Dates are inclusive unless a field states otherwise. Capture timestamps in UTC with source timezone context; do not invent a timezone or convert an ambiguous time. First payroll is anchored to the first scheduled payday even if the run is missed. Payment timeliness measures usable funds availability against the due deadline; payslip timeliness measures issuance. Overdue unpaid obligations are included in late payments and are separately recorded as a subset. A payslip may be both late and corrected. Do not sum these overlapping categories.

PERMISSION AND EVIDENCE RULES
Case permission does not replace a narrower source or respondent restriction. Apply the most restrictive documented scope. Source IDs are opaque references to restricted records, not URLs granting access. Reconciled evidence, reported experience and permission are distinct fields. Sanitize free text and review identifiability before any release. This workbook has no encryption or access-control mechanism.

INPUT FIELDS
CASES
country_group_id [text; Every used row; text]
Unique group ID. Link every Costs, Outcomes and Support reviews record to this exact ID.

migration_id [text; Every used row; text]
Stable migration-decision ID. Several country groups may share one migration ID.

employer_pseudo_id [text; Every used row; text]
Stable employer pseudonym. Store the identity mapping separately with access controls. This is not an anonymous record.

country_iso2 [text; Every used row; text]
Two-letter work-country code, such as GB. Country groups describe aggregate work locations, not individual addresses.

subdivision_scope [text; If known or applicable; text]
State or regional scope only when needed to interpret the employment route. Avoid precise locations that identify a person.

route [category; Every used row; text]
Route being considered or attempted. Retain this even when the decision is to stay or cancel.
Allowed: eor_to_eor, eor_to_entity, entity_to_eor, contractor_to_eor, eor_to_peo, peo_to_eor, other

provider_before [text; If known or applicable; text]
Provider or arrangement before the proposed change. Company names are allowed. Do not enter contact names.

provider_after [text; If known or applicable; text]
Proposed or actual provider or arrangement after the change. Blank if undecided.

planned_headcount [integer; If known or applicable; count]
Aggregate people in this country group at enrolment. Update the scope note when the planned population changes.

headcount_scope [text; If known or applicable; text]
Definition and as-of date for the aggregate headcount. No employee-level list.

recruitment_channel [category; If known or applicable; text]
How the case entered the study. Preserve voluntary and provider-referred recruitment differences.
Allowed: voluntary, research_outreach, provider_referral, employer_referral, other, unknown

enrolled_on [date; If known or applicable; YYYY-MM-DD]
Date the case entered research collection.

decision_outcome [category; Every used row; text]
Retain stay, cancellation and undecided cases in the collection log, subject to withdrawal scope.
Allowed: migrate, stay, cancelled, undecided

migration_stage [category; Every used row; text]
Observed stage on stage_as_of. A cancelled or stayed case is not a completed migration.
Allowed: considering, preparing, notice_given, parallel_run, live, paused, completed, cancelled, stayed

stage_as_of [date; If known or applicable; YYYY-MM-DD]
Date the migration stage was last confirmed.

followup_anchor_on [date; If known or applicable; YYYY-MM-DD]
Fixed day-zero date used to schedule day30 and day90. Record its basis. Do not silently change the anchor.

followup_anchor_basis [category; If known or applicable; text]
Actual cutover for completed migrations; a documented planned cutover or decision date for stay/cancel cases. Keep cohorts separate.
Allowed: actual_cutover, planned_cutover, decision_date, not_set

withdrawal_on [date; If known or applicable; YYYY-MM-DD]
Date a permission withdrawal was received, if any. Follow the scope recorded in the permission reference.

withdrawal_scope [category; If known or applicable; text]
Requested withdrawal scope. Restrict or delete data when required by the agreed terms; do not retain it merely to preserve a denominator.
Allowed: future_contact, publication, all_retention, other, none, unknown

followup_disposition [category; If known or applicable; text]
Current follow-up disposition. Do not delete no-response or not-yet-due cases to improve reported outcomes.
Allowed: active, completed, not_yet_due, no_response, withdrawn, stayed, cancelled, other

collection_permission_status [category; Every used row; text]
Permission for research collection and retention under the agreed scope. This is separate from permission to publish.
Allowed: not_asked, pending, granted, limited, declined, withdrawn, unknown

collection_permission_ref [text; If known or applicable; text]
Opaque reference to the dated permission record and its scope in restricted storage. Do not attach the record.

publication_permission_status [category; Every used row; text]
Permission for the intended publication use. Granted or limited requires a scope reference and a separate disclosure review.
Allowed: not_asked, pending, granted, limited, declined, withdrawn, unknown

publication_permission_ref [text; If known or applicable; text]
Opaque reference to permitted audience, fields, quotation or aggregate use, restrictions and withdrawal terms.

source_record_id [text; Every used row; text]
Opaque evidence ID. Reuse the same ID for the same source across tables. Keep the source itself in restricted storage.

source_locator [text; If known or applicable; text]
Non-identifying page, line, section or record locator. Do not enter names, private URLs, access tokens, transcripts or call recordings.

evidence_status [category; Every used row; text]
Reported only is an account, document seen confirms access, reconciled means checked against the relevant records. Verification does not grant publication permission.
Allowed: reported_only, document_seen, reconciled, disputed, unknown

verified_on [date; If known or applicable; YYYY-MM-DD]
Date the researcher checked the evidence. Leave blank for unverified or reported-only records.

verifier_role [text; If known or applicable; text]
Role or research-team code of the checker, without a personal name.

missingness_notes [text; If known or applicable; text]
Identify missing fields and why: unknown, not asked, declined, not applicable, not yet due or lost follow-up. Do not put these words in numeric/date cells.

COSTS
cost_line_id [text; Every used row; text]
Unique line-item ID. Never reuse it for another document line.

country_group_id [text; Every used row; text]
Exact existing Cases country_group_id. Do not join by row position.

comparison_pair_id [text; If known or applicable; text]
Shared comparison ID only for equivalent quote/invoice category, currency, period, population and scope, with compatible tax and pre/post-discount bases. Otherwise leave blank.

record_kind [category; Every used row; text]
Document or observation type. Keep quote, invoice, credit and refund records separate.
Allowed: baseline_quote, baseline_invoice, replacement_quote, replacement_invoice, credit_note, refund

provider_party [category; Every used row; text]
Whether the record belongs to the prior provider, replacement provider or another supplier.
Allowed: before, after, third_party

document_on [date; If known or applicable; YYYY-MM-DD]
Issue date of the quote, invoice, credit or refund record.

period_start_on [date; If known or applicable; YYYY-MM-DD]
Inclusive start of the service period represented by the line. Not the document issue date.

period_end_on [date; If known or applicable; YYYY-MM-DD]
Inclusive end of that service period. Use a single date for one-off events when supported.

currency_iso3 [text; For every monetary line; text]
Three-letter currency of line_amount. Keep each currency separate; no automatic conversion.

category [category; Every used row; text]
Classify the source line. Use one category per row and split supported components without inventing allocations.
Allowed: salary, statutory, benefits, eor_fee, payroll_fee, fx_fee, setup, migration, termination, overlap, deposit, tax, other

charge_scope [category; Every used row; text]
Basis of the quoted or charged amount. line_amount is the total for the described scope, not an automatically multiplied rate.
Allowed: person_month, group_month, group_period, oneoff, other

scope_headcount [integer; If known or applicable; count]
Aggregate headcount covered by this line, when known. Do not assume it equals Cases planned_headcount.

scope_units [number; If known or applicable; units]
Number of units represented by this line, if explicitly stated. Explain the unit in scope_notes.

scope_notes [text; If known or applicable; text]
Describe included service, quantity, billing period, exclusions and relevant minimums. Avoid names and individual compensation.

line_amount [number; If known or applicable; currency_iso3 units]
Total amount as stated for this line and scope. Keep source signs. Use zero only when explicitly confirmed.

amount_basis [category; For every monetary line; text]
Whether the recorded amount was quoted, invoiced, paid or refunded. A quote is not an observed payment.
Allowed: quoted, invoiced, paid, refunded

tax_treatment [category; If known or applicable; text]
Whether line_amount includes tax, excludes tax or is not applicable. Unknown must remain explicit.
Allowed: included, excluded, not_applicable, unknown

cash_treatment [category; For every monetary line; text]
Separate recurring and one-off expenses from refundable cash. Refundable deposits must not be counted as recurring expense.
Allowed: recurring_expense, oneoff_expense, refundable_cash, credit, refund, unknown

discount_eligible [category; If known or applicable; text]
Whether this precise line qualifies for the stated discount. Do not apply a headline discount to ineligible categories.
Allowed: yes, no, unknown, not_applicable

discount_rate [number; If known or applicable; fraction]
Discount as a decimal fraction, for example 0.10 for 10%. Enter only when stated for this line.

discount_amount [number; If known or applicable; currency_iso3 units]
Discount for this line in currency_iso3. Do not deduct twice if line_amount already includes the discount.

discount_condition [text; If known or applicable; text]
Record eligibility conditions, duration, and whether line_amount is before or after the discount.

fx_base_amount [number; If known or applicable; fx_base_currency units]
Amount to which an FX fee or spread applies. Keep separate from the fee and the full payroll total.

fx_base_currency [text; If known or applicable; text]
Three-letter currency of fx_base_amount.

fx_fee_amount [number; If known or applicable; fx_fee_currency units]
Explicit FX fee amount only. A hidden spread is not automatically an explicit fee.

fx_fee_currency [text; If known or applicable; text]
Three-letter currency of fx_fee_amount.

fx_quoted_rate [number; If known or applicable; quote currency per base currency]
Provider conversion rate in the orientation documented in fx_rate_orientation. Do not invert silently.

fx_reference_rate [number; If known or applicable; quote currency per base currency]
Comparable reference rate at the documented fixing time and same currency orientation. Unknown remains blank.

fx_rate_orientation [text; If known or applicable; text]
Specify the pair and units, for example target-currency units per one source-currency unit. Do not infer a missing pair.

fx_reference_source [text; If known or applicable; text]
Public reference source and identifiable fixing or series. Do not use a current spot rate to represent an unknown historical fixing.

fx_fixing_at_utc [timestamp; If known or applicable; UTC YYYY-MM-DDTHH:MM:SSZ in CSV]
Exact fixing timestamp converted to UTC when the source offset is known. Leave blank if the timing cannot be established.

fx_source_timezone [text; If known or applicable; text]
Original IANA timezone or explicit UTC offset from the source, plus ambiguity notes if needed.

source_record_id [text; Every used row; text]
Opaque evidence ID. Reuse the same ID for the same source across tables. Keep the source itself in restricted storage.

source_locator [text; If known or applicable; text]
Non-identifying page, line, section or record locator. Do not enter names, private URLs, access tokens, transcripts or call recordings.

evidence_status [category; Every used row; text]
Reported only is an account, document seen confirms access, reconciled means checked against the relevant records. Verification does not grant publication permission.
Allowed: reported_only, document_seen, reconciled, disputed, unknown

verified_on [date; If known or applicable; YYYY-MM-DD]
Date the researcher checked the evidence. Leave blank for unverified or reported-only records.

verifier_role [text; If known or applicable; text]
Role or research-team code of the checker, without a personal name.

missingness_notes [text; If known or applicable; text]
Identify missing fields and why: unknown, not asked, declined, not applicable, not yet due or lost follow-up. Do not put these words in numeric/date cells.

OUTCOMES
outcome_id [text; Every used row; text]
Unique checkpoint observation ID. Retain a superseded record only with an explicit note to avoid double counting.

country_group_id [text; Every used row; text]
Exact existing Cases country_group_id.

checkpoint [category; Every used row; text]
Baseline is before the decision/change. First_payroll is the first scheduled replacement payroll, including a missed run. Day30 and day90 use the Cases anchor.
Allowed: baseline, first_payroll, day30, day90

scheduled_observation_on [date; If known or applicable; YYYY-MM-DD]
Planned observation date, including the intended day30/day90 date. Preserve it if collection happens late.

observed_on [date; If known or applicable; YYYY-MM-DD]
Actual observation date. Do not label a scheduled follow-up as observed.

followup_status [category; Every used row; text]
State whether the observation is complete, partial, due, not yet due or unavailable. Missing follow-up is not a zero outcome.
Allowed: complete, partial, due, not_yet_due, no_response, withdrawn, not_applicable

window_start_on [date; If known or applicable; YYYY-MM-DD]
Inclusive start of the payroll, cost and hours observation window.

window_end_on [date; If known or applicable; YYYY-MM-DD]
Inclusive end of the same observation window. Explain exceptions in scope fields.

planned_cutover_on [date; If known or applicable; YYYY-MM-DD]
Planned cutover date as known at this checkpoint. Preserve changes in plan across checkpoints.

actual_cutover_on [date; If known or applicable; YYYY-MM-DD]
Observed cutover date if it occurred. Leave blank for a case that stayed, cancelled or has not cut over.

scheduled_first_payday_on [date; If known or applicable; YYYY-MM-DD]
Originally scheduled date when employees should have usable funds from the first replacement payroll. Retain missed dates rather than moving this anchor to the actual run.

first_payroll_completed_on [date; If known or applicable; YYYY-MM-DD]
Date all payment obligations for the first scheduled replacement payroll had usable funds available. Blank while incomplete or unknown; explain partial completion in payment_scope.

payments_due_count [integer; If known or applicable; count]
Aggregate count of scheduled payment obligations due in this window. A payment obligation is one employee payment per payroll cycle, not a count of unique people.

payments_late_count [integer; If known or applicable; count]
Distinct due obligations for which usable funds were unavailable at the applicable deadline, including still-overdue unpaid obligations as of the documented observation cutoff.

payments_unpaid_count [integer; If known or applicable; count]
Subset of payments_late_count still unpaid after the due deadline at observation. Do not add this subset to payments_late_count.

payment_scope [text; If known or applicable; text]
Population, cycles, due deadline/timezone, observation cutoff and evidence of funds availability. Keep payment timeliness separate from payslip issuance. No person-level details.

payslips_due_count [integer; If known or applicable; count]
Count of payslips due for the documented population and window. This is the denominator for a late or corrected rate.

payslips_late_count [integer; If known or applicable; count]
Distinct payslips issued late or still unissued after their due time as of observed_on, within the same scope. Unknown is blank, never assumed zero.

payslips_corrected_count [integer; If known or applicable; count]
Distinct payslips needing correction in the same scope, counted once per payslip. A payslip may be both late and corrected.

payslip_scope [text; If known or applicable; text]
Population, payroll cycles, due-time rule and treatment of off-cycle runs. Do not collect individual payslips or identifiers here.

overlap_cost_amount [number; If known or applicable; overlap_currency units]
Observed provider-overlap expense for this window in overlap_currency. Reference Costs rows; this is a summary, not an extra expense to add again.

overlap_currency [text; If known or applicable; text]
Three-letter currency of overlap_cost_amount. If several currencies apply, leave the scalar amount blank and reference the Costs records.

overlap_cost_line_refs [text; If known or applicable; text]
Opaque cost_line_id references supporting the overlap summary. Keep the source lines in Costs authoritative.

deposit_expected_amount [number; If known or applicable; deposit_currency units]
Refundable cash expected back in deposit_currency. This is not an operating expense.

deposit_currency [text; If known or applicable; text]
Three-letter currency for deposit amounts. Use source references if there are multiple currencies.

deposit_refund_due_on [date; If known or applicable; YYYY-MM-DD]
Contractual or agreed refund due date, when evidenced.

deposit_refund_received_on [date; If known or applicable; YYYY-MM-DD]
Actual date of full refund. If only partly refunded, leave blank and describe partial receipts in the notes.

deposit_refund_amount [number; If known or applicable; deposit_currency units]
Amount actually returned by observed_on, in deposit_currency. Zero only when non-receipt is explicitly confirmed.

admin_hours [number; If known or applicable; person-hours]
Aggregate person-hours in the defined window. Use either recorded or reported effort and identify its basis in hours_scope.

hours_role_scope [text; If known or applicable; text]
Roles included, such as HR, payroll or finance. Do not enter staff names. Do not mix employer and provider effort without disclosure.

hours_scope [text; If known or applicable; text]
Tasks, window, roles, recording or recall method, and inclusion of setup/ongoing work. Use non-overlapping person-hours.

source_record_id [text; Every used row; text]
Opaque evidence ID. Reuse the same ID for the same source across tables. Keep the source itself in restricted storage.

source_locator [text; If known or applicable; text]
Non-identifying page, line, section or record locator. Do not enter names, private URLs, access tokens, transcripts or call recordings.

evidence_status [category; Every used row; text]
Reported only is an account, document seen confirms access, reconciled means checked against the relevant records. Verification does not grant publication permission.
Allowed: reported_only, document_seen, reconciled, disputed, unknown

verified_on [date; If known or applicable; YYYY-MM-DD]
Date the researcher checked the evidence. Leave blank for unverified or reported-only records.

verifier_role [text; If known or applicable; text]
Role or research-team code of the checker, without a personal name.

missingness_notes [text; If known or applicable; text]
Identify missing fields and why: unknown, not asked, declined, not applicable, not yet due or lost follow-up. Do not put these words in numeric/date cells.

SUPPORT REVIEWS
support_record_id [text; Every used row; text]
Unique row ID for this role-specific event account or review. Separate accounts of one incident have separate row IDs.

country_group_id [text; Every used row; text]
Exact existing Cases country_group_id.

incident_id [text; If known or applicable; text]
Shared opaque incident ID across role-specific accounts of the same event. Count distinct incident IDs for event totals. Leave blank for a general review.

respondent_role [category; Every used row; text]
Role providing the account. Do not combine employee reports, employer reports and provider statements as if they were one perspective.
Allowed: employee, employer_hr, employer_payroll, employer_finance, employer_founder, provider_staff, other

record_type [category; Every used row; text]
A support event describes an issue; a review describes an experience for a defined checkpoint.
Allowed: support_event, review

checkpoint [category; If known or applicable; text]
Checkpoint associated with the event or review. Other requires an observation-window explanation.
Allowed: baseline, first_payroll, day30, day90, other

observed_on [date; Every used row; YYYY-MM-DD]
As-of date for the support status or review. Required even if an issue is unresolved or reported only.

window_start_on [date; If known or applicable; YYYY-MM-DD]
Inclusive start of the period covered by the review. Use observed_on for a point-in-time account.

window_end_on [date; If known or applicable; YYYY-MM-DD]
Inclusive end of the period covered by the review. This is the censoring date for an unresolved event.

provider_party [category; If known or applicable; text]
Prior provider, replacement provider or another supplier.
Allowed: before, after, third_party

severity [category; If known or applicable; text]
Critical: payroll access/payment blocked. High: material payroll error or deadline risk. Medium: workaround needed. Low: routine query. Record the impact without personal details.
Allowed: critical, high, medium, low, not_applicable, unknown

issue_category [category; If known or applicable; text]
Main issue category. No health, immigration or case-level legal detail.
Allowed: payroll, access, contract_process, billing, support, other, not_applicable

opened_at_utc [timestamp; If known or applicable; UTC YYYY-MM-DDTHH:MM:SSZ in CSV]
Issue-open timestamp converted to UTC using the recorded source timezone/offset.

first_human_response_at_utc [timestamp; If known or applicable; UTC YYYY-MM-DDTHH:MM:SSZ in CSV]
First substantive human response, excluding automated acknowledgements. UTC.

resolved_at_utc [timestamp; If known or applicable; UTC YYYY-MM-DDTHH:MM:SSZ in CSV]
Confirmed resolution timestamp in UTC. Blank if unresolved or unconfirmed.

source_timezone [text; If known or applicable; text]
Original IANA timezone or explicit offsets. Preserve enough context to resolve daylight-saving ambiguity.

clock_basis [category; If known or applicable; text]
Basis used by the promise or evaluation. No response-time calculation is supplied.
Allowed: elapsed, business_hours, not_applicable, unknown

business_hours_definition [text; If known or applicable; text]
Relevant working hours, days, holidays and timezone if business-hours response is assessed.

named_contact_promised [category; If known or applicable; text]
Whether an assigned human contact was promised. Record the promise, not a personal name.
Allowed: yes, no, unknown, not_applicable

named_contact_provided [category; If known or applicable; text]
Whether the promised assigned contact was actually provided, as observed or reported.
Allowed: yes, no, unknown, not_applicable

contact_role [text; If known or applicable; text]
Promised or actual contact role, such as account manager. No name, email or telephone number.

promise_summary [text; If known or applicable; text]
Brief sanitized paraphrase of the support promise, scope and applicable service hours. Reference the evidence record.

experience_summary [text; If known or applicable; text]
Brief sanitized paraphrase of what happened. No verbatim private calls, individual employee identifiers or sensitive personal detail.

resolution_status [category; If known or applicable; text]
Status as of the review or latest event evidence. Unresolved events remain in the collection.
Allowed: open, resolved, partly_resolved, withdrawn, unknown

incentive_status [category; If known or applicable; text]
Whether participation or the review was incentivised. This is distinct from permission and verification.
Allowed: unpaid, incentivised, unknown

collection_permission_status [category; Every used row; text]
Permission for research collection and retention under the agreed scope. This is separate from permission to publish.
Allowed: not_asked, pending, granted, limited, declined, withdrawn, unknown

collection_permission_ref [text; If known or applicable; text]
Opaque reference to the dated permission record and its scope in restricted storage. Do not attach the record.

publication_permission_status [category; Every used row; text]
Permission for the intended publication use. Granted or limited requires a scope reference and a separate disclosure review.
Allowed: not_asked, pending, granted, limited, declined, withdrawn, unknown

publication_permission_ref [text; If known or applicable; text]
Opaque reference to permitted audience, fields, quotation or aggregate use, restrictions and withdrawal terms.

source_record_id [text; Every used row; text]
Opaque evidence ID. Reuse the same ID for the same source across tables. Keep the source itself in restricted storage.

source_locator [text; If known or applicable; text]
Non-identifying page, line, section or record locator. Do not enter names, private URLs, access tokens, transcripts or call recordings.

evidence_status [category; Every used row; text]
Reported only is an account, document seen confirms access, reconciled means checked against the relevant records. Verification does not grant publication permission.
Allowed: reported_only, document_seen, reconciled, disputed, unknown

verified_on [date; If known or applicable; YYYY-MM-DD]
Date the researcher checked the evidence. Leave blank for unverified or reported-only records.

verifier_role [text; If known or applicable; text]
Role or research-team code of the checker, without a personal name.

missingness_notes [text; If known or applicable; text]
Identify missing fields and why: unknown, not asked, declined, not applicable, not yet due or lost follow-up. Do not put these words in numeric/date cells.
