Skip to content

Document Handling

Document types

TypeNotes
PASSPORTCustomer passport scan
RESIDENCE_PERMITIssued permit document
WORK_PERMITIssued work permit
INSURANCE_POLICYPolicy document
TAPUTitle deed
BIOMETRICBiometric photo
BANK_STATEMENTFinancial proof
RENTAL_CONTRACTAccommodation proof
TAX_CERTIFICATETax number or declaration
DIPLOMAQualification certificate
CRIMINAL_RECORDBackground check
POWER_OF_ATTORNEYPOA document
DASKEarthquake insurance certificate
OTHERCatch-all for miscellaneous

Document statuses

StatusMeaning
PENDINGUploaded, awaiting review
VERIFIEDReviewed and accepted by staff
REJECTEDRejected — reason recorded in notes
EXPIREDDocument has passed its validity date

Upload flow

  1. Customer uploads document via app-web (customer portal)
  2. Document record created in DB with status PENDING
  3. File stored in secure storage (Cloudflare R2)
  4. DOCUMENT_UPLOADED timeline event written
  5. Task created for assigned agent to review

Staff review

Staff review documents from the customer workspace documents tab:

  • View the document (PDF / image)
  • Mark as VERIFIED or REJECTED with a note
  • Rejected documents trigger a DOCUMENT_REJECTED timeline event and a customer notification

Expiry tracking

Documents with a validity period (expires_at) are monitored. The system flags documents approaching expiry:

  • Passports expiring within 6 months
  • Permits within 90 days
  • Insurance policies within 60 days

Expired documents are automatically flagged with status EXPIRED by the nightly renewal refresh job.

Storage

Documents are stored in Cloudflare R2 (object storage):

  • Access via signed URLs with short expiry (1 hour)
  • Never expose direct storage URLs — always generate signed URLs on request
  • Files are organized by customer_id / document_type / filename

Document requirements by workflow

WorkflowKey documents
Residence permitPassport, biometric photos, rental contract / tapu, health insurance, bank statement
Work permitPassport, diploma, employment contract, employer docs
Insurance (travel health)Passport only
Citizenship by investmentPassport, tapu, valuation report, SWIFT transfer proof, criminal record, birth certificate
Turquoise CardPassport, qualification proof, criminal record, financial proof

Rejected document protocol

When a document is rejected:

  1. Select REJECTED status on the document
  2. Add a clear rejection reason in the notes field
  3. The system writes a DOCUMENT_REJECTED timeline event
  4. Notify the customer via WhatsApp with specific instructions for resubmission
  5. Create a follow-up task to check for resubmission within 3 business days