Skip to main content

Restaurant Format Guidelines

E
Written by Emmanuel Famakinwa
Updated this week

This document defines the Restaurant CSV format for integrating restaurant point-of-sale (POS) transaction data into Solink.


File Details

When sending data for a Solink integration, please ensure files are separated as follows:

  • 1 file for headers

  • 1 file for items

  • 1 file for payments

File Naming Format

File Name breakdown

Details

<datestamp>-<storeId>-<fileType>.csv

  • If you are splitting the files out by store, use <storeId>.

  • Can contain data for one or more stores as long as total group size is below 50MB

<datestamp>-<fileType>.csv

  • If all stores are in one file, the <storeId> can be omitted.

  • Can contain data for one or more stores as long as total group size is below 50MB

File Part details

File name part

Additional details

<datestamp>

Required

unique date stamp without separators

  • Formats:

    • YYYYMMDD (daily drops)

    • YYYYMMDDTHHmm (multiple drops per day)

  • Examples:

    • 20240213-header.csv

    • 20240213T1233-header.csv

<storeId>

Optional

Unique identifier representing the physical location of your store.

  • used if files contain the data for a single location.

  • Identifier is tied to your configuration and should not change

  • Formats:

    • Any Alphanumeric character

    • A-Z, a-z, 0-9

  • Examples

    • A203

    • store535

<fileType>

Required

Indicates what data can be found within the files. Must be one of the following:

  • Header

  • Item

  • Payment

Samples

Refer to the examples and tables below for information on formatting CSV if your business operates in retail industries:

Examples of data files from the restaurant industry:


File Content Formatting

Below are the Header File, Item File and Payment File formats.

Header File

The header file contains one row per transaction. Includes all retail header columns plus restaurant-specific fields. Columns marked with ✱ are required.

Column Name

Required *

Data Type

Examples

Purpose

dataType

*

Picklist

‘restaurant’

Defines what Schema will be used by Solink when processing your data.

storeId

*

String

005

10050B

C3002

Unique identifier representing the site / store the information is sourced from

registerId

*

String

001,

5023,

91591cc4-9b4b-4f26-bcb2-f6cbdd18c822

Unique identifier representing the register that generated the data within the store.

registerName

String

“Register 1”

“Kitchen Till”

“Lane 1 register”

Friendly name of register - name of the register. Useful when the registerId is a GUID / number and not easily discernible by humans

transactionDate

*

Date

YYYY-MM-DD

“2024-06-15T00:00:00.000-06:00”

Business date of the transaction in the store’s local time zone. YYYY-MM-DD expressed in ISO-8601 format.

storeName

*

String

“Clover Ridge”

“Valley Farm”

“Downtown 5”

String that provides a unique human readable description of the store

startTime

*

Date/Time

YYYY-MM-DDTHH:MM:SS.sss±HH:MM

“2024-06-15T06:15:00.000-06:00”

YYYY-MM-DDTHH:MM:SS.sssZ

“2024-06-15T06:15:00.000Z”

Date/Time Transaction started

ISO-8601 datetime string

T required on stamps to indicate timestamp

Details after the + / - represent timezone values - full list of international Timezone values can be found here

If Z is used instead of +/- offset, time provided is in UTC

endTime

Date/Time

YYYY-MM-DDTHH:MM:SS.sss±HH:MM

“2024-06-15T06:15:00.000-06:00”

YYYY-MM-DDTHH:MM:SS.sssZ

“2024-06-15T06:15:00.000Z”

Date/Time Transaction ended

ISO-8601 datetime string

T required on stamps to indicate timestamp

Details after the + / - represent timezone values - full list of international Timezone values can be found here

If Z is used instead of +/- offset, time provided is in UTC

status

*

Picklist

“VOID”

“REFUND”

“SALE”

Transaction level status. Must be one of the noted values listed in the examples section

employeeName

String

“John Smith”

“Jane Smith”

employee who generated the data or transaction.

employeeID

String

“502”

"80125F”

String representing the employee id in the system that generated the data or transaction.

transactionDiscount

Number

10

15

30

Total Transaction level discounts applied. These are separate from the item level discounts that may have been applied. For example, the POS calculates a veterans discount after all item level discounts have been applied. The discount will appear in this column.

transactionDiscountReason

String

“Customer Service | Veterans Discount”

“Upsell opportunity”

“Coupon | Loyalty”

String of '|' separated list of transaction discount reasons. WIll be appended to Video receipt

transactionTax

Number

5.24

8.11

15.52

Total tax applied to the transaction

customerId

String

50052

5ece7c5f-6e5d-4136-83db-01a519a27f8b

Customer specific identifier

receiptNumber

String

Db49aa0c-2019-4eab-b74b-e1d845d8f57a

100010253

POS receipt number. Often used to match the transaction to the receipt generated in store.

licensePlate

RestaurantV1

String

ABCD-123

License plate number

notes

String

“Flag for review”

“Void - Customer needed to make change”

“Refund - Customer wanted refund on TX because they were unsatisfied with service”

Notes associated with the transaction. Will be indexed and searchable within Solink

tableNumber

RestaurantV1

String

“5”

“VIP table 6”

Label associated with the table that generated the transaction data

guestCount

RestaurantV1

Number

5

4

12

The total number of guests that were served during the course of this transaction.

salesAssociateID

String

“502”

"80125F”

The ID of the sales associate.

salesAssociateName

String

“John Smith”

“Jane Smith”

The Name of the sales associate.

revenueCenter

String

“bar”

“patio”

“takeout”

“drive-thru”

Identifies the service area where the transaction occurred. In restaurants, it may be a dining area or channel

Item File

The item file is shared between retail and restaurant. The seat column is commonly used in restaurant data for per-seat tracking.

Column Name

Required *

Data Type

Examples

Purpose

transactionId

*

String

10002424

“10002424”

43e27ef4-67a0-40ea-9655-8ab69f7e4bae

“43e27ef4-67a0-40ea-9655-8ab69f7e4bae”

Unique identifier for the transaction. Serves as primary key across Header, Item and Payment files

storeId

String

005

10050B

C3002

Unique identifier representing the site / store the information is sourced from

registerId

String

001,

5023,

91591cc4-9b4b-4f26-bcb2-f6cbdd18c822

Unique identifier representing the register that generated the data within the store.

transactionDate

Date

YYYY-MM-DD

“2024-06-15T00:00:00.000-06:00”

Business date of the transaction in the store’s local time zone. YYYY-MM-DD. Can be expressed in ISO-8601 format.

itemTime

Date/Time

YYYY-MM-DDTHH:MM:SS.sss±HH:MM

“2024-06-15T06:15:00.000-06:00”

YYYY-MM-DDTHH:MM:SS.sssZ

“2024-06-15T06:15:00.000Z”

Date/Time Item added to transaction If used, must be contained within startTime and endTime noted in header.

ISO-8601 datetime string

T required on stamps to indicate timestamp

Details after the + / - represent timezone values - full list of international Timezone values can be found here

If Z is used instead of +/- offset, time provided is in UTC

itemStatus

*

Picklist

‘Void’

‘Return’

‘Sale’

‘Override’

'Gratuity'

Indicates specific status of item on transaction. Must be one of the identified values noted in examples

itemStatusReason

String

“Customer no longer wanted the item”

“Adusting price to match listed sale price”

Descriptive comment as to the reason this status was assigned.

quantity

*

Number

1

5

2

5.2

The quantity of the item purchased.

itemCode

String

B0CLHHS778

B08SHV2R1Z

The unique code or SKU that identifies the item in the POS service or data warehouse

itemDescription

*

String

“Levis 501 | 34 w x 40 L | Stone washed | Boot cut” .

Descriptive comment associated with the item. May consist of a ‘|' separated collection of modifiers. The additional modifiers will appear below the line item entry in the receipt.

unitPrice

*

Number

5.98

4.55

Price associated with the item.

itemDiscount

Number

15.50

20

Total discounts to be applied per item.

itemDiscountReason

String

“Coupon 2For1 ($5) | Outdoor living promo ($10) | “Student ($0.50)”

|' separated list of transaction discount reasons. May optionally include a discount contribution.

originalTransactionId

String

10002424

“10002424”

43e27ef4-67a0-40ea-9655-8ab69f7e4bae

“43e27ef4-67a0-40ea-9655-8ab69f7e4bae”

if the item is being returned, the original Transaction ID of the purchase

originalBusinessDate

String

YYYY-MM-DD

if the item is being returned, the original Business Date of the purchase

originalStoreId

String

005

10050B

C3002

if the item is being returned, the original Store ID of the purchase was made

originalRegisterId

String

001,

5023,

91591cc4-9b4b-4f26-bcb2-f6cbdd18c822

if the item is being returned, the original Register ID where the purchase was processed

itemCategory

String

clothing, accessories, food, service

The category of the item

Payment File

The payment file is shared between retail and restaurant. The seat column can be used for split-check/per-seat payments.

Column Name

Required *

Data Type

Examples

Purpose

transactionId

*

String

10002424

“10002424”

43e27ef4-67a0-40ea-9655-8ab69f7e4bae

“43e27ef4-67a0-40ea-9655-8ab69f7e4bae”

String that uniquely identifies the transaction within the sender’s data warehouse.

storeId

String

005

10050B

C3002

String that uniquely identifies the store that generated the data.

registerId

String

001,

5023,

91591cc4-9b4b-4f26-bcb2-f6cbdd18c822

String that uniquely identifies the pos register that generated the data within the store

transactionDate

Date/Time

YYYY-MM-DD

“2024-06-15T00:00:00.000-06:00”

Business date of the transaction in the store’s local time zone. YYYY-MM-DD. Can be expressed in ISO-8601 format.

tenderType

*

String

‘Credit VISA’

‘Credit AMEX’

‘Credit MasterCard’

‘Debit’

‘Cash’

‘Cheque’

‘Gift Card’

‘Loyalty’

Tender accepted for the transaction. Can be any relevant value. Providing the issuer is a useful datapoint that can be included as well.

totalPaymentTendered

*

Number

50

25

The total amount tendered of the specified tenderType

changeDue

Number

23.2

Required for Cash transactions where the totalPaymentTendered > total purchase amount

customerId

String

244402234

A redacted or otherwise PII compliant customer identifier

cardLastFour

String

4532

The last four digits of the card are used for payments.

paymentStatus

String

“Approved | Swiped | ”

|' separated payment status fields to qualify the payment tendered.

paymentTime

Date/Time

YYYY-MM-DDTHH:MM:SS.sss±HH:MM

“2024-06-15T06:15:00.000-06:00”

YYYY-MM-DDTHH:MM:SS.sssZ

“2024-06-15T06:15:00.000Z”

Date/Time that payment was tendered. If used, must be contained within startTime and endTime noted in the header.

ISO-8601 datetime string

T required on stamps to indicate timestamp

Details after the + / - represent timezone values - full list of international Timezone values can be found here

If Z is used instead of +/- offset, time provided is in UTC


Picklist Field Reference

Below are the Picklist Fields.

Status (Required — Header)

Transaction-level status. Case-insensitive. The validator accepts:

Value

Description

sale

Standard completed sale

void

Entire transaction voided

refund

Refund transaction

ItemStatus (Required — Item File)

Line-item status. Case-insensitive. Determines how the line item amount is processed:

Value

Description

SALE

Standard sale item. Unit price absolute value is used.

VOID

Voided item. Unit price absolute value is used; item type set to VOID.

RETURN

Returned item. Unit price absolute value is used; item type set to RETURN.

GRATUITY

Tip/gratuity line item.


Common Issues

Scenario

Description

Returns / exchange handling

When sending returns data to Solink - Quantity and Amount in the item file should be positive always

Refund handling

When returning tender to the customer the TransactionTax (Header) should be a negative number along with totalPaymentTendered(Payment)

Amount Mismatches

The sum of line items (Unit Price + Tax - Discount) does not equal the total payment tendered, Common drivers of this are due to unreported tax or discounts.

Orphaned Records

Missing corresponding Payment / Item / Header transactionIDs between files can result in records missing details or missing entirely

Duplicate Records

Duplicated payment / item records will result in double payments / additional items within Transaction. Duplicated headers will not result in duplicated transactions, but will overwrite older records with newer details

Did this answer your question?