get_utilization_trend
What it answers
Get served utilization by month or week, optionally by role category. Optional unit is months (default) or weeks. Optional range.from and range.to are required together as real YYYY-MM-DD dates and select period starts inclusively without recalculating rolling figures. Defaults to the latest 12 months or 26 weeks; always reports full available range. Named hours only, no compensation. availableRange spans all served period starts even when the selected range has no rows, or is null when none exist. Read definitions, caveats and truncation before interpreting figures. Decimal strings preserve served numeric figures; they do not recover precision previously lost by a report. includeRoleCategories defaults to false. With includeRoleCategories true, omittedRoleCategories lists categories with the reason: all their figures are zero in every returned period. The roleCategories catalog remains complete; categories with any non-zero figure, including rolling figures, retain all selected periods. Read parakeeto://methodology for shared response conventions and INVALID_ARGUMENT guidance.
Read-only.
Arguments
| Argument | Type | Required | Default | Allowed values |
|---|---|---|---|---|
account |
string (uuid) | no | — | — |
includeDefinitions |
boolean | no | true |
— |
unit |
string | no | "months" |
"months", "weeks" |
range |
object | no | — | — |
range.from |
string | yes | — | pattern ^\d{4}-\d{2}-\d{2}$ |
range.to |
string | yes | — | pattern ^\d{4}-\d{2}-\d{2}$ |
includeRoleCategories |
boolean | no | false |
— |
Returned fields
The result is an envelope: ok: true with data, or ok: false with error. Error codes: MODEL_CALCULATOR_ACCESS_REQUIRED, PAYROLL_GRID_MISSING, PAYROLL_GRID_REQUIRED, PROJECT_GRID_REQUIRED, EXPENSE_GRID_REQUIRED, PAYROLL_ENTRY_REFERENCE_STALE, ACCOUNT_NOT_FOUND, ACCOUNT_CONFIGURATION_MISSING, NO_IMPORTED_TIME, NOTHING_IMPORTED, ACCOUNT_REQUIRED, NO_REACHABLE_ACCOUNTS, FEATURE_NOT_ENTITLED, PERMISSION_DENIED, CALCULATION_FAILED, INTERNAL_ERROR, INVALID_ARGUMENT.
data: objectdata.omittedRoleCategories: object, optionaldata.omittedRoleCategories.categories: array of stringdata.omittedRoleCategories.reason: string ("All figures are zero in every returned period.")
data.account: string (uuid)data.unit: string ("months","weeks")data.definitions: object, optionaldata.definitions.grossCapacity: stringdata.definitions.deliveryCapacity: stringdata.definitions.deliveryHours: stringdata.definitions.targetUtilization: stringdata.definitions.utilization: stringdata.definitions.utilizationDelta: stringdata.definitions.rollingGrossCapacity: stringdata.definitions.rollingDeliveryCapacity: stringdata.definitions.rollingDeliveryHours: stringdata.definitions.rollingTargetUtilization: stringdata.definitions.rollingUtilization: stringdata.definitions.rollingUtilizationDelta: stringdata.definitions.rollingWindow: stringdata.definitions.annualDaysBasis: stringdata.definitions.range: stringdata.definitions.qualifications: stringdata.definitions.presentation: string
data.annualDays: string (pattern^-?\d+(?:\.\d+)?$)data.freshness: array of objectdata.freshness[].source: string ("time-entries","role-task-mappings","annual-days","dashboard-inputs")data.freshness[].everCompleted: booleandata.freshness[].completedAt: string (date-time) or null
data.gridFreshness: array of objectdata.gridFreshness[].kind: string ("payroll","expense","project")data.gridFreshness[].gridId: string (uuid)data.gridFreshness[].name: stringdata.gridFreshness[].storage: string ("sheet","database")data.gridFreshness[].sheetRefreshedAt: string (date-time) or null
data.caveats: array of object- One of:
- Variant 1 (
codeis"omission"):data.caveats[].code: string ("omission")data.caveats[].source: string ("payroll","time")data.caveats[].employeeName: string, optionaldata.caveats[].rowPosition: integer (exclusiveMinimum: 0)data.caveats[].message: string
- Variant 2 (
codeis"allocation-mismatch"):data.caveats[].code: string ("allocation-mismatch")data.caveats[].employeeName: stringdata.caveats[].startDate: string or null (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].weeklyHours: string (pattern^-?\d+(?:\.\d+)?$)data.caveats[].targetHoursSum: string (pattern^-?\d+(?:\.\d+)?$)data.caveats[].message: string
- Variant 3 (
codeis"data-condition",idis"payroll-duplicate-start-date-double-count"):data.caveats[].code: string ("data-condition")data.caveats[].id: string ("payroll-duplicate-start-date-double-count")data.caveats[].rowCount: integer (exclusiveMinimum: 0)data.caveats[].employeeName: stringdata.caveats[].startDate: string (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].roleCategories: array of stringdata.caveats[].latestPeriod: string, optional (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].periods: array of object, optionaldata.caveats[].periods[].date: string (pattern^\d{4}-\d{2}-\d{2}$)data.caveats[].periods[].roles: array of stringdata.caveats[].periods[].rollingRoles: array of stringdata.caveats[].periods[].overall: booleandata.caveats[].periods[].rollingOverall: boolean
data.caveats[].teamRoles: array of string, optionaldata.caveats[].message: string
- Variant 1 (
- One of:
data.availableRange: object or nulldata.availableRange.from: string (pattern^\d{4}-\d{2}-\d{2}$)data.availableRange.to: string (pattern^\d{4}-\d{2}-\d{2}$)
data.selectedRange: object or nulldata.selectedRange.from: string (pattern^\d{4}-\d{2}-\d{2}$)data.selectedRange.to: string (pattern^\d{4}-\d{2}-\d{2}$)
data.periods: array of objectdata.periods[].periodStart: string (pattern^\d{4}-\d{2}-\d{2}$)data.periods[].overall: objectdata.periods[].overall.grossCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.deliveryCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.deliveryHours: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.targetUtilization: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.utilization: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.rollingGrossCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.rollingDeliveryCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.rollingDeliveryHours: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.utilizationDelta: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.rollingTargetUtilization: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.rollingUtilization: string (pattern^-?\d+(?:\.\d+)?$)data.periods[].overall.rollingUtilizationDelta: string (pattern^-?\d+(?:\.\d+)?$)
data.periods[].roleCategories: array of object, optionaldata.periods[].roleCategories[].roleCategory: stringdata.periods[].roleCategories[].values: same shape asdata.periods[].overall
data.roleCategories: array of string, optional
On failure:
error: objecterror.code: string ("MODEL_CALCULATOR_ACCESS_REQUIRED","PAYROLL_GRID_MISSING","PAYROLL_GRID_REQUIRED","PROJECT_GRID_REQUIRED","EXPENSE_GRID_REQUIRED","PAYROLL_ENTRY_REFERENCE_STALE","ACCOUNT_NOT_FOUND","ACCOUNT_CONFIGURATION_MISSING","NO_IMPORTED_TIME","NOTHING_IMPORTED","ACCOUNT_REQUIRED","NO_REACHABLE_ACCOUNTS","FEATURE_NOT_ENTITLED","PERMISSION_DENIED","CALCULATION_FAILED","INTERNAL_ERROR","INVALID_ARGUMENT")error.argument: string, optional (minLength: 1)error.message: stringerror.accounts: array of object, optionalerror.accounts[].id: string (uuid)error.accounts[].name: string
error.payrollGrids: array of object, optionalerror.payrollGrids[]: same shape aserror.accounts[]
error.projectGrids: array of object, optionalerror.projectGrids[]: same shape aserror.accounts[]
error.expenseGrids: array of object, optionalerror.expenseGrids[]: same shape aserror.accounts[]
error.context: object, optionalerror.context.account: object- Further fields: see the response.
error.context.imports: array of object- Further fields: see the response.
error.context.hasTimeEntries: booleanerror.context.reports: array of object- Further fields: see the response.
Definitions
Returned in definitions when includeDefinitions is true (the default). Each value is the definition text for that field.
grossCapacitydeliveryCapacitydeliveryHourstargetUtilizationutilizationutilizationDeltarollingGrossCapacityrollingDeliveryCapacityrollingDeliveryHoursrollingTargetUtilizationrollingUtilizationrollingUtilizationDeltarollingWindowannualDaysBasisrangequalificationspresentation
Caveats
omission. Also carriessource,employeeName,rowPosition.allocation-mismatch. Also carriesemployeeName,startDate,weeklyHours,targetHoursSum.data-condition. Also carriesid,rowCount,employeeName,startDate,roleCategories,latestPeriod,periods,teamRoles.
Read every caveat before interpreting a figure. See methodology on how to communicate caveats and data-quality conditions.
Example call
{
"name": "get_utilization_trend",
"arguments": {
"unit": "months"
}
}
Add account with an identifier from list_accounts; omit it only when the connection reaches exactly one account.
Questions and answers
What does get_utilization_trend answer?
Get served utilization by month or week, optionally by role category. Optional unit is months (default) or weeks. Optional range.from and range.to are required together as real YYYY-MM-DD dates and select period starts inclusively without recalculating rolling figures. Defaults to the latest 12 months or 26 weeks; always reports full available range. Named hours only, no compensation. availableRange spans all served period starts even when the selected range has no rows, or is null when none exist. Read definitions, caveats and truncation before interpreting figures. Decimal strings preserve served numeric figures; they do not recover precision previously lost by a report. includeRoleCategories defaults to false. With includeRoleCategories true, omittedRoleCategories lists categories with the reason: all their figures are zero in every returned period. The roleCategories catalog remains complete; categories with any non-zero figure, including rolling figures, retain all selected periods. Read parakeeto://methodology for shared response conventions and INVALID_ARGUMENT guidance.
Which arguments does get_utilization_trend accept?
Argument Type Required Default Allowed values account string (uuid) no — — includeDefinitions boolean no true — unit string no "months" "months", "weeks" range object no — — range.from string yes — pattern ^\d{4}-\d{2}-\d{2}$ range.to string yes — pattern ^\d{4}-\d{2}-\d{2}$ includeRoleCategories boolean no false —
What does get_utilization_trend return?
The result is an envelope: ok: true with data, or ok: false with error.