get_saved_estimate
What it answers
Read one saved Scope Predictor estimate by estimateId from list_saved_estimates: its saved inputs (project names, target AGI and ABR, price, pass-throughs, overrides, planned hours and brief) exactly as stored; no result is calculated. Cost per delivery hour (acphOverrides, costBasis) is derived from compensation and is returned only when the current connection owner has People (payroll) grid view on this account; otherwise it is omitted and a compensation-withheld caveat is returned. An unknown or foreign estimateId is reported as not found or inaccessible. Read only. 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 |
— |
estimateId |
string (uuid) | yes | — | — |
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.account: string (uuid)data.estimate: objectdata.estimate.id: string (uuid)data.estimate.name: stringdata.estimate.revision: string (pattern^[1-9]\d*$)data.estimate.updatedAt: string (date-time)data.estimate.updatedByName: stringdata.estimate.locked: booleandata.estimate.lockedByName: string or nulldata.estimate.inputs: objectdata.estimate.inputs.projectNames: array of stringdata.estimate.inputs.targetAgi: string (pattern^-?\d+(?:\.\d+)?$)data.estimate.inputs.targetAbr: string or null (pattern^-?\d+(?:\.\d+)?$)data.estimate.inputs.price: string or null (pattern^-?\d+(?:\.\d+)?$)data.estimate.inputs.passThroughs: array of objectdata.estimate.inputs.passThroughs[].name: stringdata.estimate.inputs.passThroughs[].amount: string (pattern^-?\d+(?:\.\d+)?$)data.estimate.inputs.passThroughs[].markupPct: string or null (pattern^-?\d+(?:\.\d+)?$)
data.estimate.inputs.adjustForOverrun: booleandata.estimate.inputs.plannedHours: string or null (pattern^-?\d+(?:\.\d+)?$)data.estimate.inputs.overrides: map of string to stringdata.estimate.inputs.overrides.*: string (pattern^-?\d+(?:\.\d+)?$)
data.estimate.inputs.brief: objectdata.estimate.inputs.brief.serviceLine: string or nulldata.estimate.inputs.brief.product: string or nulldata.estimate.inputs.brief.client: string or nulldata.estimate.inputs.brief.durationDays: string or null (pattern^-?\d+(?:\.\d+)?$)
data.estimate.inputs.acphOverrides: same shape asdata.estimate.inputs.overrides, optionaldata.estimate.inputs.costBasis: object or null, optionaldata.estimate.inputs.costBasis.startDate: string (pattern^\d{4}-\d{2}-\d{2}$)data.estimate.inputs.costBasis.endDate: string (pattern^\d{4}-\d{2}-\d{2}$)data.estimate.inputs.costBasis.acph: same shape asdata.estimate.inputs.overrides
data.definitions: map of string to string, optionaldata.definitions.*: string
data.caveats: array of objectdata.caveats[].code: string ("compensation-withheld")data.caveats[].message: string
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). It is a map of string to string: each key names a field and each value is its definition text.
Caveats
compensation-withheld.
Read every caveat before interpreting a figure. See methodology on how to communicate caveats and data-quality conditions.
Example call
{
"name": "get_saved_estimate",
"arguments": {
"estimateId": "00000000-0000-4000-8000-000000000099"
}
}
Add account with an identifier from list_accounts; omit it only when the connection reaches exactly one account.
Questions and answers
What does get_saved_estimate answer?
Read one saved Scope Predictor estimate by estimateId from list_saved_estimates: its saved inputs (project names, target AGI and ABR, price, pass-throughs, overrides, planned hours and brief) exactly as stored; no result is calculated. Cost per delivery hour (acphOverrides, costBasis) is derived from compensation and is returned only when the current connection owner has People (payroll) grid view on this account; otherwise it is omitted and a compensation-withheld caveat is returned. An unknown or foreign estimateId is reported as not found or inaccessible. Read only. Read parakeeto://methodology for shared response conventions and INVALID_ARGUMENT guidance.
Which arguments does get_saved_estimate accept?
Argument Type Required Default Allowed values account string (uuid) no — — includeDefinitions boolean no true — estimateId string (uuid) yes — —
What does get_saved_estimate return?
The result is an envelope: ok: true with data, or ok: false with error.