enroll_driver
Status: Implemented | Module: enrollment
Enroll a driver for mileage reimbursement. For self enrollment the member is the driver; for friend_or_family a third party drives the member. Requires full driver info: name, phone, DOB (must be 18+), full address, and driver-license details. The enrollment starts in pending status — admin approval is required before reimbursement. Call AFTER verify_member and BEFORE setup_payee.
Annotations
Section titled “Annotations”| Hint | Value |
|---|---|
| readOnlyHint | false |
| destructiveHint | false |
| idempotentHint | true |
| Field | Type | Required | Description |
|---|---|---|---|
session_id |
string | yes | Active session ID from verify_member |
enrollment_type |
string | yes | self or friend_or_family |
transportation_provider_id |
string | no | Org’s mileage reimbursement TP UUID (admin can backfill) |
first_name |
string | yes | Driver first name |
last_name |
string | yes | Driver last name |
middle_name |
string | no | Driver middle name |
phone |
string | yes | Driver phone, any format (normalized to E.164) |
email |
string | no | Driver email |
dob |
string | yes | Date of birth (MM/DD/YYYY or YYYY-MM-DD). Must be 18+. |
address_line_1 |
string | yes | Street address line 1 |
address_line_2 |
string | no | Apartment, suite, or unit |
address_city |
string | yes | City |
address_state |
string | yes | 2-letter code or full name (normalized to 2-letter) |
address_postal_code |
string | yes | ZIP/postal code |
license_number |
string | yes | Driver license number |
license_state |
string | yes | Issuing state (2-letter or full name) |
license_expiration |
string | yes | Expiration date (MM/DD/YYYY or YYYY-MM-DD). Must be today or later. |
Output
Section titled “Output”| Field | Type | Description |
|---|---|---|
status |
string | success or error |
enrollment_id |
string | Enrollment UUID |
driver_id |
string | TP driver UUID (generated on create) |
first_name |
string | Echoed |
last_name |
string | Echoed |
phone |
string | Normalized digits |
enrollment_type |
string | Echoed |
transportation_provider_id |
string | Echoed |
enrollment_status |
string | pending on create; existing status on idempotent match |
idempotent |
bool | True when matched an existing enrollment |
message |
string | Human summary |
guidance |
Guidance | Suggests setup_payee next |
Age + License Validation
Section titled “Age + License Validation”- Driver must be at least 18 years old (DOB + 18 years ≤ current date).
- License must not be expired (expiration date ≥ today, UTC-anchored midnight).
- Invalid/unparseable DOB or license expiration returns an
INVALID_DATEerror.
Side Effects
Section titled “Side Effects”- Loads session; requires
lob_idandmember_idfrom verification. - Inserts a row via the enrollment repository (
Create), keyed by a new UUID. - Emits a HIPAA audit entry
mcp.enroll_driverwithaction(created/idempotent) andfields_set(deterministic comma-separated list of FIELD NAMES — never values). - Error logs redact PII; only
session_idis correlated.
Compliance Notes
Section titled “Compliance Notes”Sensitive fields (name, DOB, license, phone, email) are stored in the enrollment row but never written to logs or audit metadata. The audit trail captures only which fields were supplied.
Related
Section titled “Related”- Source:
internal/app/enrollment/usecases/enroll_driver.go,internal/app/enrollment/register.go - Prerequisite: verify_member
- Next: setup_payee