Creating a document template
You may create and manage your own document templates in PaySuite. This feature enhances the process of generating personalized PDF documents using configurable Word templates. It enables Compensation Administrators to streamline document production at scale while maintaining accuracy and consistency.
The Document Templates page includes summary tiles: Templates, with the total number of available templates, as well as Ready and Draft tiles, which represent the number of templates in each status.
Below the tiles, there is a list of templates with names, codes, owners, and statuses specified.
To see the details of a ready document template, click the three-dot icon located on the far-right side of the template row in the list, and then select View from the action menu. You can also click the name of the template to be redirected to the View document template page.
Step 1 - Document template details
To create a document template, proceed as follows:
-
Click Create document template in the upper-right part of the Document Templates page. The Create document template form is opened at the first step, Document template details, as shown in the figure below:
Create document template page
-
In the Document template details section, fill in the basic details of the template:
Enter a name of the new template in the Name field.
Enter a unique code in the Code field.
Add a Description to explain the purpose or usage of the template.
-
Configure the formatting settings for numeric and date values under Numeric & date format. These settings determine how the corresponding values are rendered when the final document is generated:
Language: Select the base language and region used as the default formatting reference for the template.
Date display format: Select whether dates are rendered in a numeric format (e.g., 12/31/2025) or an alphanumeric format (e.g., Dec 31, 2025).
Thousand separator: Select the character used to separate thousands in numeric values (Comma, Dot, Space, Apostrophe, or None).
Decimal separator: Select the character used to separate decimal values (Dot or Comma).
Default decimal precision: Select the number of digits to display after the decimal separator.
The Format preview area displays a sample date and time, and a sample decimal value formatted according to your selections, so you can validate the settings before saving.
Under Upload document, click Upload or drag and drop a base DOCX file from your device to upload it to the form. This file will be used for generating the final PDF output.
In the Owners section, select additional owners by entering their names in the search bar. If you decide not to add any other owners, you will be the only owner of this template.
Click Next in the progress widget to move to the next step of the creation process: Preview.
Step 2 - Preview
This step allows the Compensation Administrator to simulate the output of a document generated from the uploaded .docx template using test data entered as variables in JSON format.
This preview helps validate:
The layout and formatting of the document
The correct resolution of all merge variables
The completeness of the variable list before the template is published
In this step, the Compensation Administrator must provide a sample payload in JSON format to populate the merge variables embedded in the uploaded Word template.
For more on the correct use of variables and loops in document templates in the context of statement generation, go to the Variables and loops in document templates section of this article.
To begin editing the variables, proceed as follows:
Click the Edit button located in the upper-right corner of the JSON editor. You may also click Use example to see our template, as illustrated in the following picture:
Example of variables
Keep in mind that each key in the JSON corresponds to a placeholder in the document (e.g., {{EmployeeName}}, {{BonusAmount}}).
Click the Preview document button to generate a PDF document that can be previewed and downloaded, as shown in the following image:
Document preview
The system will generate a PDF preview at the bottom of the screen only if all variables are matched. If any variables are missing, the preview is blocked, and the system displays a warning message identifying the undefined variables. This missing variable validation is enforced for both Preview and Publish actions to prevent incomplete or incorrect templates from being used.
Once the document template has been successfully previewed with all required variables resolved, you may click Publish in the progress widget. Publishing a document template makes it Ready and available for use across the platform – for both individual and bulk document generation from compensation rounds.
Variables and loops in document templates
To prepare DOCX templates for the Statement Generation API during compensation rounds, you must use variables and loops correctly. This ensures that documents are generated successfully for each worker.
Syntax for variables
Variables must be written in double curly brackets inside your DOCX template, for example:
{{ModelData.WorkerFirstName}}{{ModelData.WorkerLastName}}
{{Round.CompensationRoundName}}
{{CalculationData.BQVP1001.Bonus.CalculatedBonus.Currency}}{{CalculationData.BQVP1001.Bonus.CalculatedBonus.ConvertedValue}}
Supported variable sources
| Section | Source | Examples |
|---|---|---|
| ModelData | Latest comp round snapshot. Exposes worker, employment, and contracted compensation fields as strings. If no data is available, value is presented as null. |
ModelData.WorkerFirstName ModelData.WorkerLastName ModelData.EmploymentJobArchitectureExternalIdJobTitle ModelData.EmploymentLineManagerIdFirstName ModelData.BQBP1001ContractedCompensationContractedAmount ModelData.BQBP1001ContractedCompensationCurrency ModelData.BQBP1001ContractedCompensationPercentage ModelData.BQVP1001ContractedCompensationContractedAmount |
| ModelCurrencyData | Exposes contracted compensation amounts per element as structured currency objects (Value, Currency, ConvertedValue). Use this instead of ModelData when you need currency-converted amounts. |
ModelCurrencyData.BQBP1001ContractedCompensationContractedAmount.Value ModelCurrencyData.BQBP1001ContractedCompensationContractedAmount.Currency ModelCurrencyData.BQBP1001ContractedCompensationContractedAmount.ConvertedValue ModelCurrencyData.BQBP1002ContractedCompensationContractedAmount.Value ModelCurrencyData.BQVP1001ContractedCompensationContractedAmount.ConvertedValue Structure:
Copy
|
| Round | Comp round definition |
Round.CompensationRoundName Round.PlanStartDate Round.PlanEndDate |
| CalculationData | Exposes calculations based on bonus/variable pay configuration of the comp round, and any calculated columns added to the Team planner view. |
Calculated column (custom): CalculationData.CalculatedField1.CalculatedValue Bonus – top-level fields: CalculationData.BQVP1001.Assigned CalculationData.BQVP1001.Bonus.TargetBonus.Value / .Currency / .ConvertedValue CalculationData.BQVP1001.Bonus.CalculatedBonus.Value / .Currency / .ConvertedValue CalculationData.BQVP1001.Bonus.LastTargetBonus.Value / .Currency / .ConvertedValue Inside the SituationDetails loop: SituationStartDate (date-only, for example, 2025-01-01) SituationEndDate (date-only) LoA TiR SituationGoalPlanName SituationTargetBonus.Value / .Currency / .ConvertedValue SituationTargetBonusAdjusted.Value / .Currency / .ConvertedValue SituationTargetBonusInLastSituationCurrency SituationTargetBonusAdjustedInLastSituationCurrency SituationBonusInLastSituationCurrencyValue Inside the PayoutCurveResults loop: GoalAchievementGoalId GoalName GoalDescription GoalWeight GoalTarget GoalResult GoalAchievementPercentage GoalMinAchievementPercentage GoalMaxAchievementPercentage PayoutCurveType PayoutCurveName PayoutResultPercentage WeightedGoalResultPercentage MaxPayoutPercentage MinPayoutPercentage MaxAchievementPercentage MinAchievementPercentage MinPayoutCurveResultPercentage TargetPayoutCurveResultPercentage MaxPayoutCurveResultPercentage MinBonusAmount.Value / .Currency / .ConvertedValue TargetBonusAmount.Value / .Currency / .ConvertedValue MaxBonusAmount.Value / .Currency / .ConvertedValue BonusPayoutAmount.Value / .Currency / .ConvertedValue PayoutCurveThresholds (array; use a nested loop) PayoutCurveThresholdDetails.Result1Percentage … PayoutCurveThresholdDetails.Result8Percentage PayoutCurveThresholdDetails.Payout1Percentage … PayoutCurveThresholdDetails.Payout8Percentage CustomFields.{FieldName} (see Goal achievement custom fields below) |
| RoundData | Exposes all proposals of the comp round, including custom columns added to the Team planner view. Elements with a reference model return a currency object. Elements without a reference (and custom columns) return a plain number. |
Custom column (plain number): RoundData.CustomField1 Element with reference model data (currency object): RoundData.BQBP1001_NewValue.Value RoundData.BQBP1001_NewValue.Currency RoundData.BQBP1001_NewValue.ConvertedValue Element without reference model data (plain number): RoundData.BQBP1003_NewValue |
Accessing nested properties
In many cases, your data is structured in nested JSON objects. To access properties inside those objects, use dot notation: {{ParentObject.ChildObject.PropertyName}}
For example, given this part of the JSON:
"Bonus":
{
"TargetBonus":
{
"Currency": "CHF",
"ConvertedValue": "8000"
}
} You can access:
{{CalculationData.BQVP1001.Bonus.TargetBonus.Currency}} → will print CHF
{{CalculationData.BQVP1001.Bonus.TargetBonus.ConvertedValue}} → will print 8000
Syntax for loops
If the data is an array, such as Bonus.Situations or PayoutCurveResults, you must define a loop block.
Loop block inside tables:
{{loop PayoutCurveResults}}
... content ...
{{endloop}}Loop blocks outside of tables (please note that the property name must be mentioned while closing the loop here):
{{loop Bonus.SituationDetails}}
... content ...
{{endloop Bonus.SituationDetails}}Example loop outside of a table:
{{loop Bonus.SituationDetails}}
Situation Start Date: {{SituationStartDate}} Situation End Date: {{SituationEndDate}}
Goal Plan: {{SituationGoalPlanName}}
{{endloop Bonus.SituationDetails}}Inside the loop, you no longer use the full path. Instead, the current array item becomes the new “root context,” so you can directly access its properties.
Example with a table loop:
Goal ID: {{GoalAchievementGoalId}}
Goal Name: {{GoalName}}
Result: {{PayoutResultPercentage}}
{{endloop}}Please note that endloop does not repeat the property name of the loop. In a table, this looks as follows:
| Column1 | Column2 | Column3 | Column4 |
|---|---|---|---|
|
{{loop PayoutCurveResults}} {{GoalAchievementGoalId}} |
{{GoalName}} | {{PayoutResultPercentage}} |
{{WeightedGoalResultPercentage}} {{endloop}} |
Goal achievement custom fields
Data Foundation allows adding custom fields to the GoalAchievementNew entity. These custom fields are exposed in the statement payload under a dedicated CustomFields object on each PayoutCurveResults item.
The GoalAchievementNew prefix is automatically stripped from the Data Foundation field name (for instance, GoalAchievementNewCustom1 → Custom1).
If no custom fields exist, CustomFields is an empty object {} and it is always present.
Custom field values are passed through as-is from the source JSON (no type conversion).
Custom field names are namespaced under CustomFields to avoid collisions with fixed properties.
For example, if Data Foundation defines GoalAchievementNewCustom1 and GoalAchievementNewCustom2, the statement payload will contain:
"CustomFields": {
"Custom1": 10000,
"Custom2": 20000
}Inside a {{loop PayoutCurveResults}} block, reference them as:
{{CustomFields.Custom1}}
{{CustomFields.Custom2}}Flattened payout curve thresholds – PayoutCurveThresholdDetails
In addition to the existing PayoutCurveThresholds array, each PayoutCurveResults item also contains a PayoutCurveThresholdDetails object. This provides the same threshold data in a flat structure that is easier to reference directly in templates, without needing a nested loop.
Fields are named Result{N}Percentage and Payout{N}Percentage where {N} is 1–8.
All 8 pairs are always present. If a threshold at that index does not exist, the value is an empty string "" (not null).
Thresholds are mapped by position from the PayoutCurveThresholds array (index 0 → N=1, index 1 → N=2, etc.).
A maximum of 8 thresholds are supported. If there are more than 8 in the array, only the first 8 are mapped.
The existing PayoutCurveThresholds array is preserved unchanged. This is an additive change only.
For example, given a payout curve with 3 thresholds:
"PayoutCurveThresholds": [
{ "Payout": "50.00", "Result": "95.00" },
{ "Payout": "100.00", "Result": "100.00" },
{ "Payout": "150.00", "Result": "110.00" }
]The corresponding PayoutCurveThresholdDetails will be:
"PayoutCurveThresholdDetails": {
"Result1Percentage": "95.00",
"Result2Percentage": "100.00",
"Result3Percentage": "110.00",
"Result4Percentage": "",
"Result5Percentage": "",
"Result6Percentage": "",
"Result7Percentage": "",
"Result8Percentage": "",
"Payout1Percentage": "50.00",
"Payout2Percentage": "100.00",
"Payout3Percentage": "150.00",
"Payout4Percentage": "",
"Payout5Percentage": "",
"Payout6Percentage": "",
"Payout7Percentage": "",
"Payout8Percentage": ""
}Inside a {{loop PayoutCurveResults}} block, reference them as:
Threshold 1: {{PayoutCurveThresholdDetails.Result1Percentage}} / {{PayoutCurveThresholdDetails.Payout1Percentage}}
Threshold 2: {{PayoutCurveThresholdDetails.Result2Percentage}} / {{PayoutCurveThresholdDetails.Payout2Percentage}}
Threshold 3: {{PayoutCurveThresholdDetails.Result3Percentage}} / {{PayoutCurveThresholdDetails.Payout3Percentage}}Accessing custom compensation elements
Custom compensation elements are created in the Compensation Tree & Elements section of Compensation Management.
When an element is created, a comp element is auto-generated based on the parent element. The element code is significant – it must be used when accessing proposed data for that element.
If the element code is generated as BQBP2001, use the following to access the proposal:
RoundData.BQBP2001_NewValueAccessing custom columns
Custom columns are added in the Team planner view step of the comp round creation process. The Code field is used while accessing data from the document template.
If the custom column code is CustomField1, access it using:
RoundData.CustomField1Accessing calculated columns
Calculated columns are added in the Team planner view step of the comp round creation process. The Code field is used while accessing data from the document template.
If the calculated column code is CalculatedField1, you can access it using:
CalculationData.CalculatedField1.CalculatedValueJSON variable structure
The following examples show the full JSON payload structure for a Bonus and a Salary compensation element.
Example structure for Bonus BQVP1001:
{
"Round": {
"PlanEndDate": "31/12/2025",
"PlanStartDate": "01/01/2025",
"CompensationRoundName": "Bonus Plan ABC Company 2025"
},
"ModelData": {
"WorkerLastName": "Test",
"WorkerFirstName": "Employee",
"EmploymentLineManagerIdLastName": "Test",
"EmploymentLineManagerIdFirstName": "Manager"
},
"ModelCurrencyData": {
"BQVP1001ContractedCompensationContractedAmount": {
"Value": 8000,
"Currency": "EUR",
"ConvertedValue": 8000
}
},
"CalculationData": {
"CalculatedField1": {
"CalculatedValue": 85.5
},
"BQVP1001": {
"Assigned": true,
"Bonus": {
"TargetBonus": { "Value": 7504.1096, "Currency": "EUR", "ConvertedValue": 7504.1096 },
"CalculatedBonus": { "Value": 7504.1096, "Currency": "EUR", "ConvertedValue": 7504.1096 },
"LastTargetBonus": { "Value": 8000, "Currency": "EUR", "ConvertedValue": 8000 },
"SituationDetails": [
{
"LoA": 1,
"TiR": 0.4958904,
"SituationStartDate": "2025-01-01",
"SituationEndDate": "2025-06-30",
"SituationGoalPlanName": "Goal Plan 2025",
"SituationTargetBonus": { "Value": 7000, "Currency": "EUR", "ConvertedValue": 7000 },
"SituationTargetBonusAdjusted": { "Value": 3471.2328, "Currency": "EUR", "ConvertedValue": 3471.2328 },
"PayoutCurveResults": [
{
"GoalAchievementGoalId": "Goal2",
"GoalName": "Revenue Target",
"GoalDescription": "Total annual revenue vs. budget target",
"GoalResult": 95,
"GoalTarget": 100,
"GoalWeight": 25,
"GoalAchievementPercentage": 95,
"GoalMinAchievementPercentage": 80,
"GoalMaxAchievementPercentage": 150,
"PayoutCurveId": "11630db5-5a62-4671-bf8b-be7ebb09caab",
"PayoutCurveType": "Linear",
"PayoutCurveName": "Standard Linear 0-200%",
"MaxPayoutPercentage": 200,
"MinPayoutPercentage": 0,
"PayoutResultPercentage": 100,
"MaxAchievementPercentage": 200,
"MinAchievementPercentage": 0,
"WeightedGoalResultPercentage": 10,
"MinPayoutCurveResultPercentage": 50,
"TargetPayoutCurveResultPercentage": 100,
"MaxPayoutCurveResultPercentage": 200,
"MinBonusAmount": { "Value": 1735.6164, "Currency": "EUR", "ConvertedValue": 1735.6164 },
"TargetBonusAmount": { "Value": 3471.2328, "Currency": "EUR", "ConvertedValue": 3471.2328 },
"MaxBonusAmount": { "Value": 6942.4656, "Currency": "EUR", "ConvertedValue": 6942.4656 },
"BonusPayoutAmount": { "Value": 347.1233, "Currency": "EUR", "ConvertedValue": 347.1233 },
"PayoutCurveThresholds": [
{ "Payout": "50.00", "Result": "95.00" },
{ "Payout": "100.00", "Result": "100.00" },
{ "Payout": "150.00", "Result": "110.00" }
],
"PayoutCurveThresholdDetails": {
"Result1Percentage": "95.00",
"Result2Percentage": "100.00",
"Result3Percentage": "110.00",
"Result4Percentage": "",
"Result5Percentage": "",
"Result6Percentage": "",
"Result7Percentage": "",
"Result8Percentage": "",
"Payout1Percentage": "50.00",
"Payout2Percentage": "100.00",
"Payout3Percentage": "150.00",
"Payout4Percentage": "",
"Payout5Percentage": "",
"Payout6Percentage": "",
"Payout7Percentage": "",
"Payout8Percentage": ""
},
"CustomFields": {
"Custom1": 10000,
"Custom2": 20000
}
}
]
}
]
}
}
}
}Example structure for Salary BQBP1001:
{
"Round": {
"PlanEndDate": "06/10/2025 00:00:00",
"PlanStartDate": "06/03/2025 00:00:00",
"CompensationRoundName": "compRoundName123"
},
"ModelData": {
"WorkerLastName": "Test",
"WorkerFirstName": "Employee",
"EmploymentLineManagerIdLastName": "Test",
"EmploymentLineManagerIdFirstName": "Manager",
"BQBP1001ContractedCompensationContractedAmount": "100000",
"BQBP1001ContractedCompensationCurrency": "USD"
},
"ModelCurrencyData": {
"BQBP1001ContractedCompensationContractedAmount": {
"Value": 100000,
"Currency": "USD",
"ConvertedValue": 207853.413
}
},
"RoundData": {
"CustomField1": 42,
"BQBP1001_NewValue": {
"Value": 101000,
"Currency": "USD",
"ConvertedValue": 209931.947
},
"BQBP1002_NewValue": {
"Value": 5000,
"Currency": "USD",
"ConvertedValue": 10392.671
},
"BQBP1003_NewValue": 10,
"BQBP1004_NewValue": 5,
"BQBP1005_NewValue": 2
}
}Important notes
If you want to display BonusCalculationData, your document must follow the Bonus structure shown above, including the SituationDetails array and CalculatedBonus / TargetBonus / LastTargetBonus.
If you want to displayRoundData for Salary, follow the Salary structure shown above. Only _NewValue is available, and _IncreaseAmount and _IncreasePercentage are no longer part of the payload.
Elements without a reference model (for example, BQBP1003_NewValue) and custom columns (such as CustomField1) return a plain number, not a currency object.
Use ModelCurrencyData when you need contracted amounts with currency conversion. Use ModelData for flat string values.
You can mix ModelData, ModelCurrencyData, and Round fields in any template.
You must define correct loop blocks for any array-type data.
All values are converted to string using Invariant Culture (dates and numbers).
Date fields (for instance, SituationStartDate or SituationEndDate) are emitted as date-only strings like 2025-01-01 with no time component.
Important rules
For the same communication round, each generation overrides the previous generation files if the same file name is used.
If a variable is used in the DOCX template but is not included in the generation payload JSON, the document generation will fail with an error.
If a variable exists in the JSON payload but is not used in the DOCX template, no error will occur.
If an array-type field (like Bonus.SituationsDetails or PayoutCurveResults) is exposed in JSON but the DOCX template does not use a loop, this will cause a generation error.
If the result of CalculationData or RoundData for a specific element is null for a worker, document generation for that worker will fail.
Limitations
It is not possible to choose different locales (cultures) to format dates and numbers based on a worker’s culture.
It is not possible to re-run statement generation only for failed workers; each time, generation will be performed for the whole distribution group.
A maximum of 8 thresholds are supported in PayoutCurveThresholdDetails. If a payout curve has more than 8 thresholds, only the first 8 are mapped.
Troubleshooting tips
| Issue | Solution |
|---|---|
| Variable not resolved | Verify correct spelling and JSON structure. |
| Generation fails on array | Ensure you used proper loop syntax {{loop X}} ... {{endloop}}. |
| Generation fails for a worker | Check if Salary/Bonus is null for that worker. |
| _IncreaseAmount or _IncreasePercentage not resolving | These fields are no longer part of the payload. Remove them from the template |
| CustomFields is empty {} | No custom fields are defined on the GoalAchievementNew entity in Data Foundation for this worker. |
| PayoutCurveThresholdDetails.Result{N}Percentage shows an empty string | This is expected, as the payout curve has fewer than N thresholds. An empty string "" is the correct value for an unused threshold slot. |
Snapshot variables in pay information request templates
DOCX templates used in the context of pay information requests can reference variables related to the snapshot selected as the data source during document generation. These variables allow you to embed data traceability information directly in the template, which proves particularly relevant for documents issued under EUPTD Article 7.
The two most important variables include:
{{Snapshot.EffectiveDate}} – the point in time at which the underlying compensation data was captured,
{{DocumentGenerationDate}} – the date the document was produced.
Additional snapshot metadata fields can also be available under the Snapshot object (such as Snapshot.Name or Snapshot.PublishStatus), though their relevance depends on the communication scenario.
Below, you can find an example of the JSON with snapshot variables for the template preview:
{
"PayInfo": {
"RequestID": "BQM1003",
"RequestDate": "2025-10-03",
"ReferenceNumber": "ABC234",
"ResponseToWorker": "It's ok"
},
"Snapshot": {
"Name": "Q4 2025 Snapshot",
"CreatedAt": "2025-10-01 09:00:00",
"CreatedBy": "00000000-0000-0000-0000-000000000001",
"ApplyStatus": "Completed",
"Description": "Quarterly pay snapshot",
"ApplyEndDate": "2025-10-03 10:07:00",
"EffectiveDate": "2025-01-01",
"PublishStatus": "Published",
"ApplyStartDate": "2025-10-03 10:00:00",
"BaseSnapshotId": "22222222-2222-2222-2222-222222222222",
"PublishEndDate": "2025-10-02 08:05:00",
"PublishBehaviour": "Full",
"PublishStartDate": "2025-10-02 08:00:00"
},
"Category": "Worker Category",
"DocumentGenerationDate": "2025-10-03",
"DocumentGenerationDateTime": "2025-10-03 14:22:11",
"WorkerLastName": "Muller",
"WorkerTimezone": "Europe/Paris",
"WorkerFirstName": "Anna",
"WorkerWorkEmail": "anna.muller@email.com",
"WorkerExternalId": "W232",
"WorkerMiddleName": "",
"WorkerWorkRegion": "Western Europe",
"WorkerWorkCountry": "FRA",
"DemographicsGender": "Female",
"WorkerTimezoneName": "Europe/Paris",
"WorkerWorkTownCity": "",
"DemographicsBirthday": "1999-09-05",
"EmploymentHomeCountry": "",
"WorkerWorkCountryName": "France",
"WorkerWorkRegionState": "Ile de France",
"DemographicsGenderName": "Female",
"EmploymentContractType": "CT01",
"EmploymentDateFirstHire": "null",
"EmploymentLineManagerId": "W217",
"DemographicsNationality1": "null",
"EmploymentStartDateInJob": "2022-10-22",
"DemographicsMaritalStatus": "null",
"EmploymentHomeCountryName": "null",
"DemographicsEducationLevel": "EL01",
"EmploymentContractTypeName": "Permanent",
"EmploymentEmploymentStatus": "null",
"IndividualPayRangeCurrency": "EUR",
"DemographicsNationality1Name": "null",
"EmploymentStartDateInCompany": "2006-10-06",
"IndividualPayRangeLocalGrade": "L3C",
"DemographicsMaritalStatusName": "null",
"IndividualPayRangeGlobalGrade": "G3C",
"IndividualPayRangePayRangeMax": "91000",
"IndividualPayRangePayRangeMid": "75200",
"IndividualPayRangePayRangeMin": "59300",
"DemographicsEducationLevelName": "Primary",
"EmploymentCostCenterExternalId": "null",
"EmploymentEmploymentStatusName": "null",
"IndividualPayRangeCurrencyName": "Euro",
"EmploymentLineManagerIdLastName": "Mcdonald",
"EmploymentLineManagerIdUserName": "brandy.mcdonald@email.com",
"EmploymentLineManagerIdFirstName": "Brandy",
"EmploymentLineManagerIdWorkEmail": "brandy.mcdonald@email.com",
"EmploymentOrganizationExternalId": "O38",
"IndividualPayRangeLocalGradeName": "L3N",
"IndividualPayRangeGlobalGradeName": "G3N",
"BQBP1000CompensationHistoryCurrency": "null",
"BQBP1001CompensationHistoryCurrency": "EUR",
"BQIC1000CompensationHistoryCurrency": "EUR",
"BQVP1001CompensationHistoryCurrency": "EUR",
"BQVP1003CompensationHistoryCurrency": "",
"EmploymentJobArchitectureExternalId": "Architect Id",
"IndividualPayRangeBenchmarkRangeMax": "null",
"IndividualPayRangeBenchmarkRangeMid": "null",
"IndividualPayRangeBenchmarkRangeMin": "null",
"BQTCM1000CompensationHistoryCurrency": "EUR",
"BQBP1000CompensationHistoryCurrencyName": "null",
"BQBP1001CompensationHistoryCurrencyName": "Euro",
"BQTCM1000CompensationHistoryCurrencyName": "Euro",
"BQBP1000CompensationHistoryContractedAmount": "null",
"BQBP1001CompensationHistoryContractedAmount": "75000",
"BQIC1000CompensationHistoryContractedAmount": "8000",
"BQVP1001CompensationHistoryContractedAmount": "12000",
"BQVP1003CompensationHistoryContractedAmount": "4000",
"EmploymentJobArchitectureExternalIdJobLevel": "J42",
"EmploymentJobArchitectureExternalIdJobTitle": "Architect",
"BQTCM1000CompensationHistoryContractedAmount": "99000",
"EmploymentCostCenterExternalIdCostCenterName": "null",
"EmploymentJobArchitectureExternalIdJobFamily": "jobFamily3",
"PerformanceReviewRatingPerformanceRatingType": "null",
"PerformanceReviewRatingPerformanceRatingScore": "null",
"EmploymentJobArchitectureExternalIdJobCategory": "jobCategory3",
"EmploymentJobArchitectureExternalIdJobFunction": "jobFunction3",
"EmploymentOrganizationExternalIdOrganizationName": "Help Desk & Technical Support",
"EmploymentOrganizationExternalIdOrganizationType": "null",
"PerformanceReviewRatingPerformanceRatingTypeName": "null",
"BQBP1000CompensationHistoryCompensationElementExternalId": "null",
"BQBP1001CompensationHistoryCompensationElementExternalId": "BQBP1001",
"BQTCM1000CompensationHistoryCompensationElementExternalId": "BQTCM1000"
}