{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/entur/main/json-schema/entur-employee-response-schema.json",
  "title": "EmployeeResponse",
  "description": "All items for this page",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/entur-personnel-tickets-openapi.yml#/components/schemas/EmployeeResponse",
  "required": [
    "employeeNo",
    "firstName",
    "id",
    "isDeleted",
    "postalCode",
    "surname",
    "ticketHolderCode"
  ],
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "The id of the employee",
      "format": "int64"
    },
    "employeeNo": {
      "type": "string",
      "description": "Employee number"
    },
    "company": {
      "$ref": "#/$defs/CompanyResponse"
    },
    "employmentType": {
      "$ref": "#/$defs/EmploymentType"
    },
    "dateOfBirth": {
      "type": "string",
      "description": "When the employee was born",
      "format": "date"
    },
    "ssn": {
      "type": "string",
      "description": "The employee's social security number"
    },
    "firstName": {
      "type": "string",
      "description": "The employee's first name"
    },
    "surname": {
      "type": "string",
      "description": "The employee's surname"
    },
    "addressLine": {
      "type": "string",
      "description": "The employee's postal address"
    },
    "postalCode": {
      "type": "string",
      "description": "The employee's postal code"
    },
    "preferredProduct": {
      "$ref": "#/$defs/Product"
    },
    "abstainFromTicket": {
      "type": "boolean",
      "description": "Whether a ticket should be created"
    },
    "sendTicketToPrivateAddress": {
      "type": "boolean",
      "description": "Unused",
      "deprecated": true
    },
    "jobDescription": {
      "type": "string",
      "description": "Unused",
      "deprecated": true
    },
    "hireStartDate": {
      "type": "string",
      "description": "When the employee was hired",
      "format": "date"
    },
    "payType": {
      "type": "string",
      "description": "Pay type - see the codes in the API documentation"
    },
    "hireEndDate": {
      "type": "string",
      "description": "When the employee left the company",
      "format": "date"
    },
    "hireEndCause": {
      "type": "string",
      "description": "Why the employee left the company"
    },
    "disabilityGrade": {
      "type": "integer",
      "description": "The employee's degree of disability. Default 0.",
      "format": "int32"
    },
    "disabilityFromDate": {
      "type": "string",
      "description": "Unused",
      "format": "date",
      "deprecated": true
    },
    "disabilityProofRegistered": {
      "type": "boolean",
      "description": "Deprecated. Use disability proofs.",
      "deprecated": true
    },
    "disabilityProofRegisteredDate": {
      "type": "string",
      "description": "Unused",
      "format": "date",
      "deprecated": true
    },
    "employmentPercentage": {
      "type": "integer",
      "description": "Employment percentage",
      "format": "int32"
    },
    "employmentPercentageDate": {
      "type": "string",
      "description": "Date for registered employment percentage",
      "format": "date"
    },
    "paidPercentage": {
      "type": "integer",
      "description": "The pay level. This is calculated based on the employment percentage and the type of employment. Typically holds the same value as employment percentage, unless special circumstances apply",
      "format": "int32"
    },
    "paidPercentageDate": {
      "type": "string",
      "description": "Date for last change to paidPercentage",
      "format": "date",
      "deprecated": true
    },
    "leaveFromDate": {
      "type": "string",
      "description": "When the employee starts a leave",
      "format": "date"
    },
    "isOnWaitPay": {
      "type": "boolean",
      "description": "Unused",
      "deprecated": true
    },
    "waitPayDate": {
      "type": "string",
      "description": "Unused",
      "format": "date",
      "deprecated": true
    },
    "isFeePaid": {
      "type": "boolean",
      "description": "Deprecated. Use yearlyFees",
      "deprecated": true
    },
    "note": {
      "type": "string",
      "description": "Any additional information"
    },
    "isDeleted": {
      "type": "boolean",
      "description": "Whether the employee has been marked for deletion"
    },
    "lastUpdate": {
      "type": "string",
      "description": "When the imported employee was last updated",
      "format": "date-time"
    },
    "sourceLastUpdate": {
      "type": "string",
      "description": "The source for the last update"
    },
    "familyMembers": {
      "type": "array",
      "description": "The employee's family members",
      "items": {
        "$ref": "#/$defs/FamilyMemberResponse"
      }
    },
    "ticketRights": {
      "type": "array",
      "description": "The employee's ticket rights",
      "items": {
        "$ref": "#/$defs/TicketRightResponse"
      }
    },
    "ticketHolderCode": {
      "type": "string",
      "description": "The employee's ticket holder code"
    },
    "createdAt": {
      "type": "string",
      "description": "The date of creation.",
      "format": "date-time"
    },
    "createdBy": {
      "type": "string",
      "description": "The source for the first creation"
    },
    "categories": {
      "type": "array",
      "description": "The registered categories on this employee",
      "items": {
        "$ref": "#/$defs/EmployeeCategoryResponse"
      }
    },
    "yearlyFees": {
      "type": "array",
      "description": "The status of yearly fees for the current and the next year",
      "items": {
        "$ref": "#/$defs/EmployeeYearlyFeeResponse"
      }
    },
    "disabilityProofs": {
      "type": "array",
      "description": "The status of disability proofs for the current and the next year",
      "items": {
        "$ref": "#/$defs/EmployeeDisabilityProofResponse"
      }
    },
    "customerNumber": {
      "type": "integer",
      "description": "The employees customer number in ESS. Note this profile is owned by JBD and is the profile connected to the ticket right. A 'null'-value here may indicate that the ticket right is not yet synced to ESS.",
      "format": "int64"
    }
  },
  "$defs": {
    "CompanyResponse": {
      "required": [
        "addressLine",
        "allowETickets",
        "allowLocalEmployees",
        "companyId",
        "employeeNoPrefix",
        "isDeleted",
        "name",
        "postalCode",
        "reportSeparator"
      ],
      "type": "object",
      "properties": {
        "companyId": {
          "type": "integer",
          "description": "The company ID",
          "format": "int64"
        },
        "name": {
          "type": "string",
          "description": "The company name"
        },
        "addressLine": {
          "type": "string",
          "description": "The company postal address"
        },
        "postalCode": {
          "type": "string",
          "description": "The company postal code"
        },
        "employeeNoPrefix": {
          "type": "string",
          "description": "A prefix to be prepended to all employee numbers connected to this company"
        },
        "allowLocalEmployees": {
          "type": "boolean",
          "description": "Whether local employees are allowed"
        },
        "allowETickets": {
          "type": "boolean",
          "description": "Whether the company allows the usage of e-tickets for its personnel tickets"
        },
        "isDeleted": {
          "type": "boolean",
          "description": "Whether the company is deleted"
        },
        "reportSeparator": {
          "type": "string",
          "description": "Which character to separate elements within tax report: ','(default) or ';'"
        },
        "deleted": {
          "type": "boolean",
          "writeOnly": true
        }
      },
      "description": "Companies are where employees are hired"
    },
    "EmployeeCategoryResponse": {
      "required": [
        "year"
      ],
      "type": "object",
      "properties": {
        "year": {
          "type": "integer",
          "description": "The year this category is valid",
          "format": "int32"
        },
        "category": {
          "$ref": "#/$defs/Product"
        }
      },
      "description": "Category information"
    },
    "EmployeeDisabilityProofResponse": {
      "required": [
        "isRegistered",
        "year"
      ],
      "type": "object",
      "properties": {
        "year": {
          "type": "integer",
          "description": "The year this information is valid for",
          "format": "int32"
        },
        "isRegistered": {
          "type": "boolean",
          "description": "Whether a disability proof has been registered this year"
        }
      },
      "description": "Yearly disability proof information"
    },
    "EmployeeYearlyFeeResponse": {
      "required": [
        "isPaid",
        "year"
      ],
      "type": "object",
      "properties": {
        "year": {
          "type": "integer",
          "description": "The year this fee is valid",
          "format": "int32"
        },
        "isPaid": {
          "type": "boolean",
          "description": "Whether this yearly fee has been paid"
        }
      },
      "description": "Yearly fee information"
    },
    "EmploymentType": {
      "required": [
        "code",
        "description"
      ],
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "description": "The code used for input",
          "readOnly": true
        },
        "description": {
          "type": "string",
          "description": "A description of the particular code's meaning",
          "readOnly": true
        }
      },
      "description": "Employment type. Examples include Employee, Part time, Temp"
    },
    "FamilyMemberLowIncomeResponse": {
      "required": [
        "isRegistered",
        "year"
      ],
      "type": "object",
      "properties": {
        "year": {
          "type": "integer",
          "description": "Year of registered low income",
          "format": "int32"
        },
        "isRegistered": {
          "type": "boolean",
          "description": "Whether low income is registered"
        }
      },
      "description": "Low income information"
    },
    "FamilyMemberResponse": {
      "required": [
        "employeeId",
        "firstName",
        "id",
        "isDeleted",
        "relation",
        "surname"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "The ID of the family member",
          "format": "int64"
        },
        "employeeId": {
          "type": "integer",
          "description": "The ID of the employee",
          "format": "int64"
        },
        "relation": {
          "$ref": "#/$defs/FamilyRelation"
        },
        "dateOfBirth": {
          "type": "string",
          "description": "When the family member was born",
          "format": "date"
        },
        "ssn": {
          "type": "string",
          "description": "The family members social security number"
        },
        "firstName": {
          "type": "string",
          "description": "The family member's first name"
        },
        "surname": {
          "type": "string",
          "description": "The family member's surname"
        },
        "abstainFromTicket": {
          "type": "boolean",
          "description": "Whether a ticket should be created"
        },
        "note": {
          "type": "string",
          "description": "Any additional information"
        },
        "isDeleted": {
          "type": "boolean",
          "description": "Whether the family member has been marked for deletion"
        },
        "ticketRights": {
          "type": "array",
          "description": "A list of the family member's ticket rights",
          "items": {
            "$ref": "#/$defs/TicketRightResponse"
          }
        },
        "ticketHolderCode": {
          "type": "string",
          "description": "The family members ticket holder code"
        },
        "createdAt": {
          "type": "string",
          "description": "The date of creation.",
          "format": "date-time"
        },
        "createdBy": {
          "type": "string",
          "description": "The source for the first creation"
        },
        "updatedAt": {
          "type": "string",
          "description": "The date the last time the family member was updated",
          "format": "date-time"
        },
        "updatedBy": {
          "type": "string",
          "description": "The source for the last update"
        },
        "lowIncomes": {
          "type": "array",
          "description": "The low income registrations for the current and the next year",
          "items": {
            "$ref": "#/$defs/FamilyMemberLowIncomeResponse"
          }
        },
        "customerNumber": {
          "type": "integer",
          "description": "The employees customer number in ESS. Note this profile is owned by JBD and is the profile connected to the ticket right. A 'null'-value here may indicate that the ticket right is not yet synced to ESS.",
          "format": "int64"
        }
      },
      "description": "A family member must be connected to an employee"
    },
    "FamilyRelation": {
      "required": [
        "code",
        "description"
      ],
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "description": "The code used for input",
          "readOnly": true
        },
        "description": {
          "type": "string",
          "description": "A description of the particular code's meaning",
          "readOnly": true
        }
      },
      "description": "The relation a family member has to an employee"
    },
    "ManualOrderResponse": {
      "required": [
        "fromDate",
        "id",
        "isDeleted",
        "issueDate",
        "ticketType",
        "toDate"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "Id of this manual order.",
          "format": "int64"
        },
        "ticketType": {
          "$ref": "#/$defs/TicketTypeResponse"
        },
        "issueDate": {
          "type": "string",
          "description": "When this manual order was first issued.",
          "format": "date-time"
        },
        "fromDate": {
          "type": "string",
          "description": "First date the ticket right should be available.",
          "format": "date"
        },
        "toDate": {
          "type": "string",
          "description": "Last date the ticket right should be available.",
          "format": "date"
        },
        "stations": {
          "uniqueItems": true,
          "type": "array",
          "description": "Any station pairs for this manual order.",
          "items": {
            "$ref": "#/$defs/StationPairResponse"
          }
        },
        "isDeleted": {
          "type": "boolean",
          "description": "Whether this manual order is deleted or not."
        }
      },
      "description": "A manual order. This may contain a list of station pairs."
    },
    "Product": {
      "required": [
        "id",
        "name",
        "validFrom",
        "validUntil"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "The product id",
          "format": "int64"
        },
        "name": {
          "type": "string",
          "description": "Human readable product name"
        },
        "validFrom": {
          "type": "string",
          "description": "When the product is valid from",
          "format": "date"
        },
        "validUntil": {
          "type": "string",
          "description": "When the product is valid to",
          "format": "date"
        }
      },
      "description": "A personnel ticket product"
    },
    "SimpleRule": {
      "required": [
        "id",
        "name"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "Rule id",
          "format": "int64"
        },
        "name": {
          "type": "string",
          "description": "Rule name"
        }
      },
      "description": "Rule describing who are eligible for what ticket right"
    },
    "StationPairResponse": {
      "required": [
        "fromStation",
        "id",
        "toStation"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "Id of this station pair",
          "format": "int64"
        },
        "fromStation": {
          "$ref": "#/$defs/StationResponse"
        },
        "toStation": {
          "$ref": "#/$defs/StationResponse"
        }
      },
      "description": "A set of stations on NetEX format."
    },
    "StationResponse": {
      "required": [
        "id"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Station in NetEX format."
        },
        "name": {
          "type": "string",
          "description": "Station name"
        }
      },
      "description": "Station with NetEX and name"
    },
    "SyncStatus": {
      "type": "object",
      "properties": {
        "isReadyToSync": {
          "type": "boolean",
          "description": "Whether the ticket right is ready to be sent to the ticketing system"
        },
        "syncTimestamp": {
          "type": "string",
          "description": "When the ticket right was sync'ed",
          "format": "date-time"
        },
        "errorMessage": {
          "type": "string",
          "description": "If the system has failed in sending the ticket right to the ticketing system, this will hold the error message. Default is null"
        }
      },
      "description": "Status fields related to synchronization with other services"
    },
    "TicketRightResponse": {
      "required": [
        "calculationTimestamp",
        "employeeId",
        "ticketHolderId",
        "ticketType",
        "ticketrightId",
        "validFrom",
        "validUntil"
      ],
      "type": "object",
      "properties": {
        "ticketrightId": {
          "type": "integer",
          "description": "The ticket right id",
          "format": "int64"
        },
        "ticketHolderId": {
          "type": "integer",
          "description": "The id of the ticket holder, either an employee or a family member",
          "format": "int64"
        },
        "employeeId": {
          "type": "integer",
          "description": "The id of the employee who is responsible",
          "format": "int64"
        },
        "validFrom": {
          "type": "string",
          "description": "The date from when the ticket right is valid",
          "format": "date"
        },
        "validUntil": {
          "type": "string",
          "description": "The date from when the ticket right stops being valid",
          "format": "date"
        },
        "ticketType": {
          "$ref": "#/$defs/TicketTypeResponse"
        },
        "note": {
          "type": "string",
          "description": "Any additional information"
        },
        "canSendTicket": {
          "type": "boolean",
          "description": "This field will be discontinued in the next vesion of the API.",
          "deprecated": true
        },
        "ticketCreated": {
          "type": "string",
          "description": "This field will be discontinued in the next vesion of the API.",
          "format": "date-time",
          "deprecated": true
        },
        "errorMessage": {
          "type": "string",
          "description": "This field will be discontinued in the next vesion of the API.",
          "deprecated": true
        },
        "createdByRule": {
          "$ref": "#/$defs/SimpleRule"
        },
        "calculationTimestamp": {
          "type": "string",
          "description": "When the ticketright was calculated",
          "format": "date-time"
        },
        "ticketRightsHolder": {
          "$ref": "#/$defs/TicketRightsHolderResponse"
        },
        "legacySyncStatus": {
          "$ref": "#/$defs/SyncStatus"
        },
        "essSyncStatus": {
          "$ref": "#/$defs/SyncStatus"
        },
        "manualOrder": {
          "$ref": "#/$defs/ManualOrderResponse"
        }
      },
      "description": "A ticket right granted to an employee or a family member"
    },
    "TicketRightsHolderResponse": {
      "required": [
        "id",
        "ticketHolderCode"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "The ticket right holder id",
          "format": "int64"
        },
        "ticketHolderCode": {
          "type": "string",
          "description": "The personnel ticket code for the ticket rights holder"
        },
        "ticketRight": {
          "$ref": "#/$defs/TicketRightResponse"
        },
        "firstName": {
          "type": "string",
          "description": "Unused. This field is populated by employee / family member data and will be removed in future versions.",
          "deprecated": true
        },
        "surname": {
          "type": "string",
          "description": "Unused. This field is populated by employee / family member data and will be removed in future versions.",
          "deprecated": true
        },
        "addressLine": {
          "type": "string",
          "description": "Unused. This field is populated by employee / family member data and will be removed in future versions.",
          "deprecated": true
        },
        "postalCode": {
          "type": "string",
          "description": "Unused. This field is populated by employee / family member data and will be removed in future versions.",
          "deprecated": true
        },
        "postalPlace": {
          "type": "string",
          "description": "Unused. This field is populated by employee / family member data and will be removed in future versions.",
          "deprecated": true
        },
        "countryCode": {
          "type": "string",
          "description": "Unused. This field is populated by employee / family member data and will be removed in future versions.",
          "deprecated": true
        },
        "dateOfBirth": {
          "type": "string",
          "description": "Unused. This field is populated by employee / family member data and will be removed in future versions.",
          "format": "date",
          "deprecated": true
        }
      },
      "description": "All items for this page"
    },
    "TicketTypeResponse": {
      "required": [
        "canHaveStationPairs",
        "code",
        "countryCode",
        "description",
        "generatesTicketRights",
        "id",
        "isDeleted"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "Ticket type id",
          "format": "int64"
        },
        "code": {
          "type": "string",
          "description": "Ticket type"
        },
        "description": {
          "type": "string",
          "description": "Ticket type description"
        },
        "countryCode": {
          "type": "string",
          "description": "Country code"
        },
        "generatesTicketRights": {
          "type": "boolean",
          "description": "Whether or not this this ticket type is relevant for sending as input to a Manual order. If this = false (the default), it will not generate new tickets rights by manual order."
        },
        "canHaveStationPairs": {
          "type": "boolean",
          "description": "Whether or not this ticket type is compatible with station pairs when placing a manual order. The default = false. "
        },
        "isDeleted": {
          "type": "boolean",
          "description": "Whether the ticket type is deleted."
        }
      },
      "description": "The Ticket type informs of which country it is valid in and what train class it covers."
    }
  }
}