Redo Appointments data model
When a guest is not entirely pleased with how a service is performed, the business can offer to perform either the same service or another service for free or at a discounted price. Zenoti’s Redo Appointment functionality enables a service to be marked as a redo service which results in a reversal of the initial service provider’s commission.
While the Appointments data source brings in both redo and re-done appointments, it does not provide the mapping between the two. This data source bridges that gap. It brings in redo appointments, re-done appointments, the mapping between them, as well as additional details about each appointment.
Example use cases
Number of redo appointments
Total discount given on redo appointments
Commission factors for employees for redo appointments
Granularity of the data
At the most granular level, we have a unique identifier ‘appointment id’ for each appointment. Further, if a single appointment has segments or was serviced by multiple employees, the rows get split out to accommodate this granularity. In the example below, a 45-min massage is a redo appointment with appointment id 'abc123'. Mary serviced this guest and a discount of $70 was provided for this massage. The source appointment for this redo is a 30-min massage with appointment id 'abc'. This original appointment was serviced by two employees - Sarah and Anna.
![]() |
Note
Say an appointment is created and later a redo appointment is also created. This data source will have two records corresponding to the redone (source) appointment and redo appointment. If the redo appointment gets deleted/voided later, that record gets deleted from the data source, but the redone (source) appointment remains. However, if the redone (source) appointment gets deleted/voided while the redo appointment is valid, the redone (source) appointment record does NOT get deleted from the data source. This record is maintained to show the details of the source appointment. If the redone (source) appointment gets deleted/voided after the redo appointment is deleted/voided, the redone (source) appointment record also gets deleted from the data source.
Group | Description | Field | New Definition | Examples/Notes | Data Type |
---|---|---|---|---|---|
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | organization name | The formal name of the organization. | 'Massage Spa Express' is the formal name of an organization. | varchar(512) |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | organization account name | The domain name of the organization in Zenoti. | If you use this URL to log in to Zenoti 'https://massagespa.zenoti.com', then "massagespa" is your account name. The formal name and domain name may be different. | varchar(256) |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | center name | The center where the appointment is scheduled to be serviced. | varchar(128) | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | zone name | The zone to which the center belongs. | varchar(800) | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | center city | The city where the center is located. | varchar(128) | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | center zip | The zipcode of the center's location. | varchar(32) | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | center state name | The state where the center is located. | varchar(4096) | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | country name | The country where the center is located. | varchar(4096) | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | operating center | A flag that indicates whether the center is operational. - True: Indicates operational - False: Indicates not operational | boolean | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | center code | A unique identifier for the center. | varchar(40) | |
Center, Zone, Organization | An organization can be divided into zones, which can be further divided into centers. Here, we refer to the center where the appointment is scheduled to be serviced. | minutes to add | The number of minutes that need to be added to UTC time to get the current time at the center. Timestamps that are generated by Tableau [E.g. if you use filters such as Today, Tomorrow, etc.] are in UTC, hence this field is needed to arrive at the center time. This is not needed for timestamps that are in the datasource directly, they are already in the center time zone. | int | |
Appointment | This group of fields describes the attributes of the appointment. | appointment id | A unique identifier for each appointment. If the appointment is a segment, this is the segment id. | varchar(36) | |
Appointment | This group of fields describes the attributes of the appointment. | appointment pk | A unique identifier for each appointment. If the appointment is a segment, this is the segment pk. This is generated within Analytics. | int | |
Appointment | This group of fields describes the attributes of the appointment. | fact appointment redo wid | Unique identifier for each appointment. This is generated in analytics, it does not exist in the core system. | bigint | |
Appointment | This group of fields describes the attributes of the appointment. | invoice id | A unique identifier for the invoice. It is unique within the organization. | varchar(36) | |
Appointment | This group of fields describes the attributes of the appointment. | InvoiceNo | Invoice number that helps in identifying and tracking the invoice. | ||
Appointment | This group of fields describes the attributes of the appointment. | invoice item id | A unique identifier for each line item within the invoice. | varchar(36) | |
Appointment | This group of fields describes the attributes of the appointment. | is redo | A flag indicating whether the corresponding appointment is a redo appointment or not. - True: Indicates that the appointment is a redo appointment - False: Indicates that the appointment is not a redo appointment | boolean | |
Appointment | This group of fields describes the attributes of the appointment. | source appointment id | If the appointment is a redo appointment, this field is filled. This field populates the appointment id of the source appointment corresponding to the redo appointment. | varchar(36) | |
Appointment | This group of fields describes the attributes of the appointment. | source appointment pk | If the appointment is a redo appointment, this field is filled. This field populates the appointment pk of the source appointment corresponding to the redo appointment. | int | |
Appointment | This group of fields describes the attributes of the appointment. | is segment | A flag indicating whether the corresponding appointment is a segment or not. - True: Indicates that the appointment is a segment - False: Indicates that the appointment is not a segment | boolean | |
Appointment | This group of fields describes the attributes of the appointment. | parent appointment id | If the appointment is a segment, this field is filled. This field populates the appointment id of the parent appointment corresponding to the segment. | varchar(36) | |
Appointment | This group of fields describes the attributes of the appointment. | parent appointment pk | If the appointment is a segment, this field is filled. This field populates the appointment pk of the parent appointment corresponding to the segment. | int | |
Appointment | This group of fields describes the attributes of the appointment. | item name | The name of the service in the appointment. | varchar(512) | |
Appointment | This group of fields describes the attributes of the appointment. | item code | The unique code associated with that service. | varchar(256) | |
Appointment | This group of fields describes the attributes of the appointment. | businessunit | The business unit to which the service belongs. | varchar(65535) | |
Appointment | This group of fields describes the attributes of the appointment. | is item inactive | A flag indicating whether the service is inactive. A service is considered inactive if it has been removed from the system. - True: Indicates that the service is inactive - False: Indicates that the service is active | boolean | |
Appointment | This group of fields describes the attributes of the appointment. | item tags | The tags associated with the service. | Tags can be created for a service in the Organization view. These will be comma separated values if there are multiple tags. | varchar(65535) |
Appointment | This group of fields describes the attributes of the appointment. | appointment status | The current status of the appointment. Possible values: - Cancel - Checkin - Closed - Confirmed - Noshow - Open | varchar(100) | |
Appointment | This group of fields describes the attributes of the appointment. | start time in center | The date and time at which the appointment is scheduled to start. | If any changes are made to the appointment start time, this column will have the latest start time of the appointment. | timestamp |
Appointment | This group of fields describes the attributes of the appointment. | end time in center | The date and time at which the appointment is scheduled to end. | If any changes are made to the appointment end time, this column will have the latest end time of the appointment. | timestamp |
Appointment | This group of fields describes the attributes of the appointment. | invoice status | This field indicates whether the invoice is open or closed. | Possible values: Closed Invoice Open Invoice | varchar(100) |
Appointment | This group of fields describes the attributes of the appointment. | invoice discount | The total discount applied to the corresponding invoice item id. | float | |
Employee | This group of fields describes the attributes of the appointment. | employee first name | First name of the employee as per employee profile. | varchar(160) | |
Employee | This group of fields describes the attributes of the appointment. | employee last name | Last name of the employee as per employee profile. | varchar(256) | |
Employee | This group of fields describes the attributes of the appointment. | employee middle name | Middle name of the employee as per employee profile. | varchar(128) | |
Employee | This group of fields describes the attributes of the appointment. | employee mobile phone | Mobile number of the employee as per employee profile. | varchar(64) | |
Employee | This group of fields describes the attributes of the appointment. | employee - code | Unique code of the employee. This is the code taken from the employee's profile in Zenoti. | varchar(128) | |
Employee | This group of fields describes the attributes of the appointment. | employee gender | The gender of the employee. | Possible values: - Male - Female | varchar(14) |
Employee | This group of fields describes the attributes of the appointment. | employee job name | Job name associated with the employee. | Therapist, Manager, Aesthetician etc. | varchar(1020) |
Employee | This group of fields describes the attributes of the appointment. | employee job code | Unique code associated with the Job of the employee. | varchar(2000) | |
Employee | This group of fields describes the attributes of the appointment. | is employee inactive | A flag indicating whether the employee is inactive. An employee is considered inactive if they have been removed from the system. - True: Employee is inactive - False: Employee is active | boolean | |
Employee | This group of fields describes the attributes of the appointment. | employee tags | Tags associated with the employee | varchar(65535) | |
Employee | This group of fields describes the attributes of the appointment. | employee start date | The date on which the corresponding employee started working for the organization. | timestamp | |
Employee | This group of fields describes the attributes of the appointment. | employee last date | The date on which the corresponding employee stopped working for the organization. | timestamp | |
Employee | This group of fields describes the attributes of the appointment. | is primary employee | A flag indicating whether the corresponding employee is the primary employee to service the guest. | boolean | |
Employee | This group of fields describes the attributes of the appointment. | commission factor | The commission factor or adjustment applicable for the corresponding employee. For example, if this is 200%, the employee earns double the configured commission. If this is 50%, the employee earns half the configured commission. | float |