Technical Documentation

Partner Integration Technical Documentation

Goals of this Document

This document should outline the technical details of building a Partner Integration that sends data to Tenzo for a joint customer between the partner and Tenzo.

Once the build of the integration is complete, the Tenzo team will be in contact to ask the partner to complete the Partner Integration Certification. This document allows for correct documentation to be completed, shares knowledge of both Tenzo and the partner platform and shares key contacts on both partner and Tenzo so that everyone is informed. It is the official sign off on the technical side of the integration.

Data Delivery

Destination

Data is to be delivered via SFTP.

Within each SFTP folder there will be a 'writeable' folder. The data must be put in this folder.

During initial development and testing phase, the SFTP credentials will be provided by either the Partnerships team, Product Manager of Integrations or Implementation Managers at Tenzo. Tenzo will also provide the Partner with a sandbox account, to allow the Partner to test sending data to Tenzo and checking it against their own platform.

Once the partner has been certified via the Partner Integration Certification, the SFTP credentials will be provided by Implementation Managers or Customer Success Managers at Tenzo.

Naming Requirements and File Type

These should be delivered to the SFTP as CSV files. The name of these files depends on the type of data being sent and must begin with:

  • "sales_"
  • "labor_" - this is actual labour (shifts taken place in the past)
  • "labor_planned_" - this is scheduled labour (shifts scheduled for the future)
  • "actual_usage_" - this is the COGS (cost of goods sold)
  • "theoretical_usage_" - this is the theoretical usage (in theory how much did we use based off of sales)
  • "wastage_" - wasted food and beverage costs per item
  • "menuitem_costs_" - cost of the menu items (dish or recipe cost)

If possible, sending one file per location/site is preferable for debugging purposes. However Tenzo can support all locations to be contained within one file.

For example the Partner could send one file for multiple locations: but one location at a time is preferable:

Date Ranges

Tenzo recommends to send different amount of data depending on the type of data. These are:

  • Sales: Previous 7 days.
  • Labour: Previous 14 days (shifts taken place) and 14 days into the future (scheduled shifts)
  • Inventory:
    • Purchases, Theoretical Usage, Wastage, Menu Item Costs: Previous 28 days
    • Actual Usage: Previous stocktake.

NOTE: Tenzo will overwrite ALL data for the date range that is sent. Tenzo cannot append additional data onto existing data. Therefore, each time data is sent, it must include a complete export of all data for the day(s).

Data Frequency

Frequency

Data should be sent at a minimum frequency of once per day.

Increases in frequency can be discussed on a per integration basis, as it's largely dependent on the type of data being sent.

Timings

Ideally the data is sent between 4am and 6am UK time (GMT in winter, BST in summer). Tenzo will ingest this data within 20 minutes from it being sent.

Data Fields

NOTE: The Tenzo format supports data at both an item and transaction level. Some metrics only make sense at a transaction level. In these cases Tenzo will take the data point from the first item on the transaction. Therefore it is always safest to repeat the transaction level data for every item on the transaction.

e.g. If there is a guest count of 4 on a table, this would be best represented as:

Tenzo would not sum the guest count → 12 in this example, but take the guest count from the 'Burger' row and therefore for the whole transaction Order ID → 1, it would have a guest count of 4.

This is also how Service Charge works.

Sales

Sales

The supported fields in the "sales" files are:

Date YYYY-MM-DD

Description: Date of the sale of the item and/or transaction.
Format: YYYY-MM-DD

Location Text field

Description: Location of the sales of the item and/or transaction.
Format: Text field

Order ID Text field

Description: The transaction ID. This is at transaction level.
Format: Text field

Employee Name Text field

Description: Name of the employee who sold the item and/or opened the table.
Format: Text field

Table Number Text field

Description: The name of the table. This is at transaction level.
Format: Text field

Time HH:MM

Description: The time that the item was sold.
Format: HH:MM

Order Type Text field

Description: The channels where the sales come from. e.g. Eat-In, Takeaway, Uber Eats, Deliveroo, Just Eat, etc.
Format: Text field

Revenue Center Text field

Description: This refers to the different tills locations in the restaurant - literally the different physical areas in the restaurant where revenue is generated. e.g. a terrace, bar, dining room, etc.
Format: Text field

Product Item Text field

Description: The name of the item that was sold.
Format: Text field

Product Category Text field

Description: The name of the category that the item was in.
Format: Text field

Product Division Text field

Description: The name of the division that the category was in. The Tenzo hierarchy is Product Items → Product Category → Product Division. e.g. Coca Cola → Soda Drinks → Wet.
Format: Text field

Guests Integer

Description: The number of covers/guest count on a table. This is at transaction level. Please see ‘NOTE’ above.
Format: Integer

Quantity Float (Decimal)

Description: The number of items that were sold.
Format: Float (Decimal)

Net Amount Float (Decimal)

Description: The amount the item was sold for. This is a unit amount, i.e. if there is a quantity of more than 1, please normalise this number to be per item. This does not include tax and discounts have been taken off. This number does not include service charge.
Format: Float (Decimal)

Gross Amount Float (Decimal)

Description: The amount the item was sold for. This is a unit amount, i.e. if there is a quantity of more than 1, please normalise this number to be per item. This does include tax and discounts have been taken off. This number does not include service charge.
Format: Float (Decimal)

Discount Name Text field

Description: The name of the discount applied to the item or transaction.
Format: Text field

Discount Amount Float (Decimal)

Description: The amount the item or transaction was discounted. If the discount is at transaction level and the data inputted is at the item level, please split the ticket discount over the items. The discount will be WITH tax, and it will use the tax rate on the item/row to calculate the tax on the discount. Discounts are positive.
Format: Float (Decimal)

Service Charge Float (Decimal)

Description: The service charge. It can also support any surcharges. If there is more than one surcharge the number in the export will need to be the aggregated sum of all surcharges for each transaction. This is at the transaction level. Please see ‘NOTE’ above.
Format: Float (Decimal)

Labor

Labor

The supported fields in the "labor" files are:

Date YYYY-MM-DD

Description: Date of the shift.
Format: YYYY-MM-DD

Location Text field

Description: The location of the shift. This is making the assumption that your front-end reporting also shows the cost being assigned to an employee’s shift location instead of home location. Tenzo can support both but please reach out to your Tenzo contact (or contact Tenzo using the emails at the bottom of this document) if your front-end reporting assigns cost to an employee’s home location.
Format: Text field

House Part Text field

Description: Where that employee worked within the location. Examples include ‘Front of House’, ‘Back of House’, etc.
Format: Text field

Role Text field

Description: The job title of the employee at the time of the shift.
Format: Text field

Employee Name Text field

Description: The employee’s first name and surname.
Format: Text field

Pay Rate TypeText field

Description: The frequency of their pay. Examples include ‘Hourly’, ‘Salaried’.
Format: Text field

Pay RateDecimal

Description: The amount each employee is paid per hour.
Format: Decimal (e.g. 12.5)

Shift Start Time HH:MM:SS

Description: The time the employee clocked in.
Format: HH:MM:SS

Shift End Time HH:MM:SS

Description: The time the employee clocked out.
Format: HH:MM:SS

End DateYYYY-MM-DD

Description: End date of the shift. This is the real life date, not business date.
Format: YYYY-MM-DD

MinutesInteger

Description: The total time of the shift, in minutes.
Format: Integer(e.g. 300)

Base AmountDecimal

Description: The base cost of the employee. This excludes all overheads (e.g. does not include holiday accrual, pension, national insurance or anything similar). It’s their pay rate x minutes worked.
Format: Decimal (e.g. 131.75)

Holiday AccrualDecimal

Description: The total amount of holiday an employee has accrued for this shift.
Format: Decimal (e.g. 131.75)

PensionDecimal

Description:The total pension contribution amount accumulated for an employee for this shift.
Format: Decimal (e.g. 131.75)

Employer TaxesDecimal

Description:The total value of employer-paid taxes accrued for an employee for this shift. In the UK this is National Insurance but this field supports any taxes accrued from any country.
Format: Decimal (e.g. 131.75)

Fully Loaded AmountDecimal

Description: The full cost of the employee. This includes all overheads (e.g. does include holiday accrual, pension, national insurance, etc.). It’s Base Cost + Overheads.
Format: Decimal (e.g. 161.97)

Labor Planned

The supported fields in the "labor_planned" files are:

Date YYYY-MM-DD

Description: Date of the shift.
Format: YYYY-MM-DD

Location Text field

Description: The location of the shift. This is making the assumption that your front-end reporting also shows the cost being assigned to an employee’s shift location instead of home location. Tenzo can support both but please reach out to your Tenzo contact (or contact Tenzo using the emails at the bottom of this document) if your front-end reporting assigns cost to an employee’s home location.
Format: Text field

House Part Text field

Description: Where that employee worked within the location. Examples include ‘Front of House’, ‘Back of House’, etc.
Format: Text field

Role Text field

Description: The job title of the employee at the time of the shift.
Format: Text field

Employee Name Text field

Description: The employee’s first name and surname.
Format: Text field

Pay Rate TypeText field

Description: The frequency of their pay. Examples include ‘Hourly’, ‘Salaried’.
Format: Text field

Pay RateDecimal

Description: The amount each employee is paid per hour.
Format: Decimal (e.g. 12.5)

Shift Start Time HH:MM:SS

Description: The time the employee clocked in.
Format: HH:MM:SS

Shift End Time HH:MM:SS

Description: The time the employee clocked out.
Format: HH:MM:SS

End DateYYYY-MM-DD

Description: End date of the shift. This is the real life date, not business date.
Format: YYYY-MM-DD

MinutesInteger

Description: The total time of the shift, in minutes.
Format: Integer(e.g. 300)

Base AmountDecimal

Description: The base cost of the employee. This excludes all overheads (e.g. does not include holiday accrual, pension, national insurance or anything similar). It’s their pay rate x minutes worked.
Format: Decimal (e.g. 131.75)

Holiday AccrualDecimal

Description: The total amount of holiday an employee has accrued for this shift.
Format: Decimal (e.g. 131.75)

PensionDecimal

Description:The total pension contribution amount accumulated for an employee for this shift.
Format: Decimal (e.g. 131.75)

Employer TaxesDecimal

Description:The total value of employer-paid taxes accrued for an employee for this shift. In the UK this is National Insurance but this field supports any taxes accrued from any country.
Format: Decimal (e.g. 131.75)

Fully Loaded AmountDecimal

Description: The full cost of the employee. This includes all overheads (e.g. does include holiday accrual, pension, national insurance, etc.). It’s Base Cost + Overheads.
Format: Decimal (e.g. 161.97)

Inventory

Actual Usage

The supported fields in the "actual_usage" files are:

Date YYYY-MM-DD

Description: The date the last stock count that took place. e.g. if you do stock takes monthly, on the 1st of the month and the last day of the month, this date would be the date of the last day of the month.
Format: YYYY-MM-DD

Location Text field

Description: The location of the usage/stock counts.
Format: Text field

Item Category Text field

Description: The category name that the inventory item is in.
Format: Text field

Item Text field

Description: The inventory item name.
Format: Text field

Amount Float (Decimal)

Description: The amount of actual usage (COGS) for the inventory item, as calculated by the partner.
Format: Float (Decimal)

Theoretical Usage

The supported fields in the "theoretical_usage" files are:

Date YYYY-MM-DD

Description: The date of when the theoretical usage happened.
Format: YYYY-MM-DD

Location Text field

Description: The location of the usage.
Format: Text field

Item Category Text field

Description: The category name that the inventory item is in.
Format: Text field

Item Text field

Description: The inventory item name.
Format: Text field

Amount Float (Decimal)

Description: The amount of theoretical usage for the inventory item, as calculated by the partner.
Format: Float (Decimal)

Wastage

The supported fields in the "wastage" files are:

Date YYYY-MM-DD

Description: The date the wastage occurred on.
Format: YYYY-MM-DD

Location Text field

Description: The location the wastage occurred at.
Format: Text field

Item Category Text field

Description: The category name that the inventory item is in.
Format: Text field

Item Text field

Description: The inventory item name.
Format: Text field

Amount Float (Decimal)

Description: The cost of the inventory item that has been wasted.
Format: Float (Decimal)

Menu Item Costs

Date YYYY-MM-DD

Description: The date the menu item cost was calculated. This is usually the latest date that it has been calculated (therefore using the latest purchases).
Format: YYYY-MM-DD

Location Text field

Description: The location the menu item is sold at.
Format: Text field

MenuitemText field

Description: The menu item name.
Format: Text field

Cost Float (Decimal)

Description: The cost of the menu item. This is the recipe cost and is built up from all the individual components of the recipe.
Format: Float (Decimal)

FAQ

How should we handle changes in data after the file has been sent?

File size permitting, we usually recommend a date range depending on the type of data. See the Date Ranges section above. These changes would appear in the file sent the next day and then would get updated on Tenzo.

What should happen if the destination is unavailable?

The file should not be sent. Tenzo will be alerted to no data on our side. However if at anytime you experience any issues, then please contact Tenzo (emails at end of this document).

Do all fields need to be populated?

All fields do not need to be populated. Tenzo will load what is in the file.

Contacts

Name Email
Partnerships partnerships@gotenzo.com
Product product@gotenzo.com