Spensara Spensara Knowledge Base & Documentation Repository

Repository Docs & Knowledge Base

Consolidated Spensara documentation repository (722 Markdown & architecture documents in ../repository)
Built Word Documents (.docx): Spensara Overview (.docx) Capability Assessment (.docx) Brink POS Ingestion Analysis (.docx) The Borg Ingestion Architecture (.docx)

Branches (328)

Branch-specific documentation across extract-raw-xml, feature-fleet-import, kds_cdc_improvments, life-cycle, and tenat-admin.
branches/feature-fleet-import/architecture/docs/curated-redshift-schema.md 15,783 bytes · Updated Oct 23, 2026 10:44 AM EDT
Raw File

Curated Redshift Schema

Conventions

  • Nullable columns may be unavailable for some source systems.
  • Redshift does not enforce primary-key or foreign-key constraints on these tables. Relationships below are logical relationships.
  • Columns ending in _key are warehouse keys intended for canonical joins.
  • Columns beginning with _etl_ provide ingestion lineage and audit information.
  • business_date represents the restaurant's operational date and may differ from the calendar date of a UTC timestamp.
  • Monetary values should be interpreted using currency_code where that column is available.

Schema Summary

TablePurposeGrain
curated.kitchen_ordersKitchen order headersOne row per kitchen order
curated.kitchen_order_itemsItems prepared by the kitchenOne row per kitchen order item
curated.kitchen_item_status_eventsKitchen item status historyOne row per item status event
curated.customersCustomer recordsOne row per customer record
curated.pos_menu_itemsCanonical menu item stateOne row per menu item snapshot
curated.pos_order_itemsPOS order linesOne row per POS order item
curated.pos_ordersPOS order headersOne row per POS order
curated.employeesEmployee dimensionOne row per employee snapshot
curated.pos_jobsPOS job or role dimensionOne row per job snapshot
curated.labor_shiftsEmployee labor shiftsOne row per shift
curated.pos_destinationsOrder destination or service channel dimensionOne row per destination snapshot

Logical Relationships

ParentChildJoin condition
curated.kitchen_orderscurated.kitchen_order_itemskitchen_orders.guid = kitchen_order_items.order_guid
curated.kitchen_order_itemscurated.kitchen_item_status_eventskitchen_order_items.guid = kitchen_item_status_events.item_guid
curated.pos_orderscurated.pos_order_itemspos_orders.order_id = pos_order_items.order_id
curated.employeescurated.labor_shiftsemployees.employee_id = labor_shifts.employee_id
curated.pos_jobscurated.labor_shiftspos_jobs.job_id = labor_shifts.job_id

curated.kitchen_orders

Kitchen-facing order headers used to analyze order volume, workflow, priority, and preparation performance.

ColumnRedshift typeNullable
guidVARCHAR(36)No
store_guidVARCHAR(36)No
destinationVARCHAR(255)Yes
external_idVARCHAR(199)No
guest_tableVARCHAR(199)Yes
is_prioritySMALLINTNo
items_countINTEGERNo
order_typeVARCHAR(199)Yes
pos_terminalVARCHAR(199)Yes
preparation_timeINTEGERYes
server_nameVARCHAR(199)Yes
user_infoVARCHAR(199)Yes
doneSMALLINTNo
create_timeINTEGERNo
update_timeINTEGERNo
upload_timeINTEGERYes
is_deletedSMALLINTNo
update_deviceVARCHAR(36)Yes
phoneVARCHAR(65535)Yes
create_local_timeINTEGERYes
is_hiddenSMALLINTNo
customer_guidVARCHAR(36)Yes
smart_order_start_timeINTEGERYes
order_messagesVARCHAR(255)No
customer_nameVARCHAR(60)Yes
seatINTEGERYes
order_statusINTEGERYes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.kitchen_order_items

Kitchen order lines with preparation, routing, transfer, and completion attributes.

ColumnRedshift typeNullable
guidVARCHAR(36)No
order_guidVARCHAR(36)No
external_idVARCHAR(199)No
nameVARCHAR(199)No
categoryVARCHAR(100)Yes
device_idINTEGERYes
is_prioritySMALLINTNo
pre_modifierVARCHAR(65535)Yes
item_bump_guidVARCHAR(36)Yes
create_timeINTEGERNo
update_timeINTEGERNo
upload_timeINTEGERYes
is_deletedSMALLINTNo
update_deviceVARCHAR(36)Yes
printed_statusSMALLINTNo
create_local_timeINTEGERYes
is_hiddenSMALLINTNo
ready_since_local_timeINTEGERYes
preparation_timeINTEGERYes
quantityINTEGERNo
countINTEGERYes
condiments_countINTEGERNo
s0VARCHAR(45)Yes
s1VARCHAR(45)Yes
training_videoVARCHAR(65535)Yes
transfer_from_device_idINTEGERYes
transfer_timeINTEGERYes
untransfer_timeINTEGERYes
beepedSMALLINTNo
build_cardVARCHAR(65535)Yes
recall_timeINTEGERYes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.kitchen_item_status_events

Status transitions for kitchen order items, including preparation and completion timing.

ColumnRedshift typeNullable
guidVARCHAR(36)No
item_guidVARCHAR(36)No
statusSMALLINTNo
last_statusSMALLINTYes
upload_timeINTEGERYes
update_deviceVARCHAR(36)Yes
create_local_timeINTEGERYes
prepared_local_timeINTEGERYes
done_local_timeINTEGERYes
prepared_device_idINTEGERYes
done_device_idINTEGERYes
hide_levelSMALLINTNo
last_hide_levelSMALLINTNo
create_timeINTEGERNo
update_timeINTEGERNo
is_deletedSMALLINTNo
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.customers

Customer identity and contact records associated with a restaurant store.

ColumnRedshift typeNullable
guidVARCHAR(36)No
external_idVARCHAR(199)Yes
nameVARCHAR(255)Yes
phoneVARCHAR(255)Yes
phone2VARCHAR(255)Yes
addressVARCHAR(65535)Yes
address2VARCHAR(65535)Yes
cityVARCHAR(255)Yes
stateVARCHAR(255)Yes
zipVARCHAR(50)Yes
countryVARCHAR(255)Yes
emailVARCHAR(255)Yes
webmailVARCHAR(255)Yes
store_guidVARCHAR(36)No
create_timeINTEGERYes
update_timeINTEGERYes
upload_timeINTEGERYes
is_deletedSMALLINTNo
update_deviceVARCHAR(36)Yes
create_local_timeINTEGERYes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.pos_menu_items

Canonical menu item state, including pricing, category, kitchen routing, availability, and source lineage.

ColumnRedshift typeNullable
item_idINTEGERNo
item_nameVARCHAR(255)No
priceDECIMAL(10,2)No
category_idINTEGERNo
descriptionVARCHAR(65535)Yes
kds_delayINTEGERYes
category_nameVARCHAR(100)Yes
kds_stationINTEGERYes
is_86dDECIMAL(2,0)Yes
86d_reasonVARCHAR(65535)Yes
86d_atTIMESTAMPYes
menu_item_keyBIGINTYes
source_systemVARCHAR(100)Yes
source_menu_item_idVARCHAR(199)Yes
station_nameVARCHAR(255)Yes
availability_statusVARCHAR(100)Yes
is_activeBOOLEANYes
costDECIMAL(10,2)Yes
snapshot_dateDATEYes
effective_from_utcTIMESTAMPYes
effective_to_utcTIMESTAMPYes
tenant_keyBIGINTYes
tenant_nameVARCHAR(255)Yes
currency_codeVARCHAR(10)Yes
timezone_nameVARCHAR(100)Yes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.pos_order_items

Canonical POS order lines for basket, product-mix, pricing, and item-status analysis.

ColumnRedshift typeNullable
order_idVARCHAR(50)No
item_idINTEGERNo
item_nameVARCHAR(255)No
quantityINTEGERYes
unit_priceDECIMAL(10,2)Yes
idINTEGERNo
size_nameVARCHAR(100)Yes
modifiersVARCHAR(65535)Yes
kds_delayINTEGERYes
order_item_keyBIGINTYes
source_systemVARCHAR(100)Yes
source_order_item_idVARCHAR(199)Yes
category_idVARCHAR(199)Yes
category_nameVARCHAR(255)Yes
item_statusVARCHAR(100)Yes
modifier_summaryVARCHAR(65535)Yes
created_at_utcTIMESTAMPYes
business_dateDATEYes
tenant_keyBIGINTYes
tenant_nameVARCHAR(255)Yes
currency_codeVARCHAR(10)Yes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.pos_orders

Canonical POS order headers for sales, tax, order status, service channel, and fulfillment analysis.

ColumnRedshift typeNullable
order_idVARCHAR(50)No
order_typeVARCHAR(50)Yes
payment_methodVARCHAR(50)Yes
subtotalDECIMAL(10,2)Yes
totalDECIMAL(10,2)Yes
created_atTIMESTAMPYes
customer_numberVARCHAR(50)Yes
idINTEGERNo
table_numberVARCHAR(50)Yes
taxDECIMAL(10,2)Yes
statusVARCHAR(50)Yes
terminal_idVARCHAR(50)Yes
points_usedINTEGERYes
additional_paymentDECIMAL(10,2)Yes
pos_terminal_idVARCHAR(50)Yes
destinationVARCHAR(100)Yes
terminal_nameVARCHAR(255)Yes
order_keyBIGINTYes
source_systemVARCHAR(100)Yes
source_order_idVARCHAR(199)Yes
store_idVARCHAR(199)Yes
store_nameVARCHAR(255)Yes
status_nameVARCHAR(100)Yes
service_channelVARCHAR(100)Yes
fulfillment_channelVARCHAR(100)Yes
created_at_utcTIMESTAMPYes
business_dateDATEYes
tenant_keyBIGINTYes
tenant_nameVARCHAR(255)Yes
currency_codeVARCHAR(10)Yes
order_status_codeVARCHAR(100)Yes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.employees

Canonical employee dimension for workforce, order attribution, and labor analysis.

ColumnRedshift typeNullable
employee_idBIGINTNo
display_nameVARCHAR(1024)Yes
first_nameVARCHAR(1024)Yes
last_nameVARCHAR(1024)Yes
email_addressVARCHAR(1024)Yes
cell_phoneVARCHAR(256)Yes
home_location_idVARCHAR(256)Yes
hire_dateTIMESTAMPYes
termination_dateTIMESTAMPYes
terminatedBOOLEANYes
is_salariedBOOLEANYes
is_exemptBOOLEANYes
payroll_idVARCHAR(256)Yes
employee_unique_idVARCHAR(256)Yes
snapshot_dateDATEYes
source_systemVARCHAR(100)Yes
source_employee_idVARCHAR(199)Yes
employee_keyBIGINTYes
tenant_keyBIGINTYes
tenant_nameVARCHAR(255)Yes
currency_codeVARCHAR(10)Yes
is_activeBOOLEANYes
effective_from_utcTIMESTAMPYes
effective_to_utcTIMESTAMPYes
is_currentBOOLEANYes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.pos_jobs

Canonical POS job and employee-role dimension.

ColumnRedshift typeNullable
job_idBIGINTNo
nameVARCHAR(1024)Yes
job_unique_idVARCHAR(256)Yes
export_codeVARCHAR(256)Yes
is_bartenderBOOLEANYes
is_delivery_driverBOOLEANYes
is_delivery_dispatcherBOOLEANYes
is_hostessBOOLEANYes
trainingBOOLEANYes
location_typeVARCHAR(128)Yes
snapshot_dateDATEYes
source_systemVARCHAR(100)Yes
source_job_idVARCHAR(199)Yes
job_keyBIGINTYes
tenant_keyBIGINTYes
tenant_nameVARCHAR(255)Yes
currency_codeVARCHAR(10)Yes
is_activeBOOLEANYes
effective_from_utcTIMESTAMPYes
effective_to_utcTIMESTAMPYes
is_currentBOOLEANYes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.labor_shifts

Canonical employee shifts for worked-time, overtime, pay-rate, tip, and break analysis.

ColumnRedshift typeNullable
shift_idVARCHAR(36)No
employee_idBIGINTYes
job_idBIGINTYes
business_dateDATEYes
start_timeTIMESTAMPTZYes
end_timeTIMESTAMPTZYes
minutes_workedINTEGERYes
regular_minutes_workedINTEGERYes
overtime_minutes_workedINTEGERYes
extended_minutes_workedINTEGERYes
pay_rateDECIMAL(18,4)Yes
declared_tipsDECIMAL(18,4)Yes
shift_numberSMALLINTYes
break_countINTEGERYes
total_break_minutesINTEGERYes
source_systemVARCHAR(100)Yes
source_shift_idVARCHAR(199)Yes
labor_shift_keyBIGINTYes
tenant_keyBIGINTYes
tenant_nameVARCHAR(255)Yes
currency_codeVARCHAR(10)Yes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

curated.pos_destinations

Canonical order destination and service-channel dimension, including delivery behavior.

ColumnRedshift typeNullable
destination_idBIGINTNo
nameVARCHAR(1024)Yes
indicatorVARCHAR(256)Yes
descriptionVARCHAR(65535)Yes
is_activeBOOLEANYes
is_deliveryBOOLEANYes
delivery_minutesINTEGERYes
snapshot_dateDATEYes
source_systemVARCHAR(100)Yes
source_destination_idVARCHAR(199)Yes
destination_keyBIGINTYes
tenant_keyBIGINTYes
tenant_nameVARCHAR(255)Yes
currency_codeVARCHAR(10)Yes
effective_from_utcTIMESTAMPYes
effective_to_utcTIMESTAMPYes
is_currentBOOLEANYes
_etl_batch_idVARCHAR(256)Yes
_etl_source_typeVARCHAR(100)Yes
_etl_ingested_atTIMESTAMPNo

ETL Audit Columns

Every curated table contains the following common fields:

ColumnPurpose
_etl_batch_idIdentifies the ingestion batch that produced the row.
_etl_source_typeIdentifies the source adapter or ingestion type.
_etl_ingested_atRecords when the row was written to the curated warehouse layer.