Skip to content

NTK-10005 — Add Wristband RFID Field to Check-In Record

Field Value
Status DRAFT
Version 1.0
Author Solution Architecture (AI-Assisted)
Date 2026-03-03
Ticket NTK-10005

Affected Capabilities

Capability Impact Description
CAP-2.1 Day-of-Adventure Check-In enhanced Check-in record now captures wristband RFID tag ID for location tracking

Affected Services

Solution Contents

  • Requirements
  • Analysis
  • Decisions
  • Impact Assessments (0)
  • Implementation Guidance
  • Capability Mapping

Solutions that share services or capabilities with this design:

Solution Shared Capabilities Shared Services
NTK-10002 — NTK-10002: Adventure Category Classifica CAP-2.1 svc-check-in
NTK-10003 — Unregistered Guest Self-Service Check-in CAP-2.1 svc-check-in

Problem Statement

NovaTrek Adventures is rolling out RFID-enabled wristbands for the 2026 summer season. Each wristband has two identifiers: a printed alphanumeric code (wristband_id, already supported) and an RFID chip identifier (rfid_tag, not yet captured at the check-in record level). Without the rfid_tag on the check-in record, kiosks cannot record scanned RFID data during check-in, and staff cannot look up a guest's check-in by scanning their wristband.

The WristbandAssignment sub-schema in svc-check-in already has an rfid_tag field, but the top-level CheckIn schema and the CheckInRecord Java entity do not. The GET /check-ins endpoint also lacks RFID-based filtering.

Architecture Classification

Classification: Code-Level Task (with light architecture review)

This is NOT a full architecture engagement. The reasoning:

  1. Single service impact -- Only svc-check-in is modified. No new cross-service orchestration, communication patterns, or infrastructure components are introduced.
  2. No new API endpoints -- The change adds a field to existing schemas and a query parameter to an existing endpoint.
  3. No competing architectural approaches -- The change is straightforward: add a field, add validation, add a uniqueness constraint.
  4. Existing patterns apply -- The WristbandAssignment schema already captures rfid_tag. This ticket extends that capture to the top-level CheckIn record for direct lookup.

Architecture review is recommended at the Swagger spec change stage (before merge) to confirm: - Uniqueness constraint scope (active check-ins only vs global) - Downstream event schema compatibility - RFID format alignment with hardware team specifications

Solution Overview

Add an optional rfid_tag field to the CheckIn schema in svc-check-in, the CheckInRecord JPA entity, and the check-in event payload. Add an rfid_tag query parameter to GET /check-ins for RFID-based lookup.

Changes Summary

Component Change Type
svc-check-in Swagger spec Add rfid_tag property to CheckIn schema Schema addition
svc-check-in Swagger spec Add rfid_tag query parameter to GET /check-ins API enhancement
CheckInRecord.java Add rfidTag field with column constraint Entity change
Database Add partial unique index on rfid_tag for active check-ins DDL migration
Event payload Include rfid_tag in check-in event Event schema addition

Impacted Components

Component Impact Type Severity
svc-check-in Schema addition, query parameter addition Low
Downstream event consumers New optional field in event payload (tolerant reader pattern) Informational

Changes Required

1. Swagger Specification Update

Add to the CheckIn schema:

rfid_tag:
  type: string
  maxLength: 64
  pattern: '^[A-F0-9]{8,16}$'
  nullable: true
  description: RFID chip identifier from the guest wristband
  example: "A3F7B20145CC"

Add to GET /check-ins parameters:

- name: rfid_tag
  in: query
  required: false
  schema:
    type: string
    pattern: '^[A-F0-9]{8,16}$'
  description: Filter check-ins by RFID wristband tag

2. JPA Entity Update

Add to CheckInRecord.java:

@Column(length = 64)
private String rfidTag;

3. Database Migration

ALTER TABLE check_in_records ADD COLUMN rfid_tag VARCHAR(64);

CREATE UNIQUE INDEX idx_rfid_tag_active 
ON check_in_records (rfid_tag) 
WHERE status NOT IN ('COMPLETED', 'FAILED');

4. Event Payload Update

Include rfid_tag as a top-level field in the check-in event. Downstream consumers using tolerant reader patterns will ignore the new field until they are ready to use it.

Validation Rules

  • Format: Hexadecimal string matching regex ^[A-F0-9]{8,16}$
  • Max length: 64 characters
  • Nullable: Yes
  • Uniqueness: Unique across active check-ins (status not in COMPLETED, FAILED)

Deployment Notes

  • Database migration must run before the application deployment
  • The schema change is additive and backward-compatible -- no consumer changes required
  • Coordinate deployment with kiosk firmware update timeline (May 2026)
  • Notify downstream event consumers of the new field in advance, even though no action is required from them