@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.15.4 → 4.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dpr/components/_async/async-filters-form/view.njk +2 -2
  2. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
  3. package/dpr/components/_charts/chart/Buckets.js +2 -0
  4. package/dpr/components/_charts/chart/Buckets.js.map +7 -0
  5. package/dpr/components/_charts/chart/Buckets.ts +198 -0
  6. package/dpr/components/_charts/chart/DashboardVisualisation.js +2 -0
  7. package/dpr/components/_charts/chart/DashboardVisualisation.js.map +7 -0
  8. package/dpr/components/_charts/chart/DashboardVisualisation.ts +43 -0
  9. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +2 -0
  10. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +7 -0
  11. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +144 -0
  12. package/dpr/components/_charts/utils.js +1 -1
  13. package/dpr/components/_charts/utils.js.map +3 -3
  14. package/dpr/components/_charts/utils.ts +1 -1
  15. package/dpr/components/_dashboards/dashboard/types.js.map +1 -1
  16. package/dpr/components/_dashboards/dashboard/types.ts +4 -4
  17. package/dpr/components/_dashboards/scorecard/Scorecard.js +2 -0
  18. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +7 -0
  19. package/dpr/components/_dashboards/scorecard/Scorecard.ts +315 -0
  20. package/dpr/components/_dashboards/scorecard/types.js +1 -1
  21. package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
  22. package/dpr/components/_dashboards/scorecard/types.ts +20 -1
  23. package/dpr/components/_dashboards/scorecard/utils.js +1 -1
  24. package/dpr/components/_dashboards/scorecard/utils.js.map +3 -3
  25. package/dpr/components/_dashboards/scorecard/utils.test.ts +8 -437
  26. package/dpr/components/_dashboards/scorecard/utils.ts +2 -265
  27. package/dpr/components/_dashboards/scorecard/view.njk +2 -2
  28. package/dpr/components/_filters/types.d.js.map +1 -1
  29. package/dpr/components/_filters/types.d.ts +1 -0
  30. package/dpr/components/_filters/utils.js +1 -1
  31. package/dpr/components/_filters/utils.js.map +3 -3
  32. package/dpr/components/_filters/utils.ts +17 -12
  33. package/dpr/routes/journeys/request-report/filters/tests.cy.js +1 -1
  34. package/dpr/routes/journeys/request-report/filters/tests.cy.js.map +3 -3
  35. package/dpr/routes/journeys/request-report/filters/tests.cy.ts +40 -0
  36. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  37. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  38. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +3 -2
  39. package/dpr/types/api.d.js.map +1 -1
  40. package/dpr/types/api.d.ts +2 -0
  41. package/dpr/utils/datasetHelper.js +1 -1
  42. package/dpr/utils/datasetHelper.js.map +2 -2
  43. package/dpr/utils/datasetHelper.ts +1 -1
  44. package/package.json +1 -1
  45. package/dpr/components/_charts/chart/heatmap/Heatmap.js +0 -2
  46. package/dpr/components/_charts/chart/heatmap/Heatmap.js.map +0 -7
  47. package/dpr/components/_charts/chart/heatmap/Heatmap.ts +0 -278
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/types/api.d.ts"],
4
- "sourcesContent": ["/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\nimport { LoadType } from './UserReports'\n\nexport interface paths {\n '/missingRequest/{reportId}/{variantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n get?: never\n put?: never\n /** @description Submit a request for a missing report */\n post: operations['requestMissing']\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/user/caseload/active': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets a user's active caseloads */\n get: operations['definitions']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the dataset for the given report ID and report variant ID filtered by the filters provided in the query. */\n get: operations['configuredApiDataset']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/{fieldId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the dataset for the given report ID and report variant ID filtered by the filters provided in the query. */\n get: operations['configuredApiDynamicFilter']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/tables/{tableId}/result': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the resulting rows of the executed statement in a paginated fashion which has been stored in a dedicated table. */\n get: operations['getQueryExecutionResult']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/tables/{tableId}/result/summary/{summaryId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns a summary of a request, which has been stored in a dedicated table. */\n get: operations['getSummaryQueryExecutionResult']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/tables/{tableId}/count': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the number of rows of the table which contains the result of a previously executed query. Allows filtering and it is aimed at supporting the interactive journey. */\n get: operations['getInteractiveExternalTableRowCount']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/statements/{statementId}/status': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the status of the statement execution based on the statement ID provided.The following status values can be returned:\n * ABORTED - The query run was stopped by the user.\n * ALL - A status value that includes all query statuses. This value can be used to filter results.\n * FAILED - The query run failed.\n * FINISHED - The query has finished running.\n * PICKED - The query has been chosen to be run.\n * STARTED - The query run has started.\n * SUBMITTED - The query was submitted, but not yet processed.\n * Note: When the status is FAILED the error field of the response will be populated.ResultRows is the number of rows returned from the SQL statement. A -1 indicates the value is null.ResultSize is the size in bytes of the returned results. A -1 indicates the value is null.\n * For Athena:\n * Athena automatically retries your queries in cases of certain transient errors. As a result, you may see the query state transition from STARTED or FAILED to SUBMITTED.\n * */\n get: operations['getQueryExecutionStatus']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/count': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the number of records for the given report ID and report variant ID filtered by the filters provided in the query. */\n get: operations['configuredApiCount']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/dashboards/{dashboardId}/tables/{tableId}/result': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the resulting rows of the executed statement in a paginated fashion which has been stored in a dedicated table. */\n get: operations['getDashboardQueryExecutionResult']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/dashboards/{dashboardId}/statements/{statementId}/status': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the status of the dashboard statement execution based on the statement ID provided.The following status values can be returned:\n * ABORTED - The query run was stopped by the user.\n * ALL - A status value that includes all query statuses. This value can be used to filter results.\n * FAILED - The query run failed.\n * FINISHED - The query has finished running.\n * PICKED - The query has been chosen to be run.\n * STARTED - The query run has started.\n * SUBMITTED - The query was submitted, but not yet processed.\n * Note: When the status is FAILED the error field of the response will be populated.ResultRows is the number of rows returned from the SQL statement. A -1 indicates the value is null.ResultSize is the size in bytes of the returned results. A -1 indicates the value is null.\n * For Athena:\n * Athena automatically retries your queries in cases of certain transient errors. As a result, you may see the query state transition from STARTED or FAILED to SUBMITTED.\n * */\n get: operations['getDashboardExecutionStatus']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/report/tables/{tableId}/count': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the number of rows of the table which contains the result of a previously executed query. */\n get: operations['getExternalTableRowCount']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets summaries of all report definitions */\n get: operations['definitions_1']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions/{reportId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets report definition summary */\n get: operations['definitionSummary']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions/{reportId}/{variantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets report definition containing a single variant. */\n get: operations['definition']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions/{dataProductDefinitionId}/dashboards/{dashboardId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets the metric dashboard definition. */\n get: operations['dashboardDefinition']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/async/reports/{reportId}/{reportVariantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Executes asynchronously the dataset query for the given report and stores the result into an external table.The response returned contains the table ID and the execution ID. This is the asynchronous version of the /reports/{reportId}/{reportVariantId} API. */\n get: operations['asyncConfiguredApiExecuteQuery']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/async/dashboards/{reportId}/{dashboardId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Executes asynchronously the dataset query for the given dashboard and stores the result into an external table.The response returned contains the table ID and the execution ID. */\n get: operations['asyncExecuteDashboard']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/statements/{statementId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n get?: never\n put?: never\n post?: never\n /** @description Cancels the execution of a running query. */\n delete: operations['cancelReportQueryExecution']\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/dashboards/{dashboardId}/statements/{statementId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n get?: never\n put?: never\n post?: never\n /** @description Cancels the execution of a running query. */\n delete: operations['cancelDashboardQueryExecution']\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n}\nexport type webhooks = Record<string, never>\nexport interface components {\n schemas: {\n ErrorResponse: {\n /** Format: int32 */\n status: number\n /** Format: int32 */\n errorCode?: number\n userMessage?: string\n developerMessage?: string\n moreInfo?: string\n }\n MissingReportSubmission: {\n userId: string\n reportId: string\n reportVariantId: string\n reason?: string\n /** Format: int32 */\n id?: number\n }\n Count: {\n /**\n * Format: int64\n * @description The total number of records\n * @example 501\n */\n count: number\n }\n StatementExecutionStatus: {\n /** @description The status of the statement execution. */\n status: string\n /**\n * Format: int64\n * @description The amount of time in nanoseconds that the statement ran.\n * @example 10562762848\n */\n duration: number\n /**\n * Format: int64\n * @description The number of rows returned from the query.\n * @example 10\n */\n resultRows: number\n /**\n * Format: int64\n * @description The size in bytes of the returned results. A -1 indicates the value is null.\n * @example 0\n */\n resultSize?: number\n /** @description Contains a short description of the error that occurred. */\n error?: string\n /**\n * Format: int32\n * @description Specific to Athena queries. An integer value that specifies the category of a query failure error. The following list shows the category for each integer value.\n * 1 - System\n * 2 - User\n * 3 - Other\n */\n errorCategory?: number\n /** @description Specific to Athena queries. Further detail about the status of the query. */\n stateChangeReason?: string\n }\n DashboardDefinitionSummary: {\n id: string\n name: string\n description?: string\n /** @enum {string} */\n loadType?: 'sync' | 'async'\n }\n ReportDefinitionSummary: {\n id: string\n name: string\n description?: string\n variants: components['schemas']['VariantDefinitionSummary'][]\n dashboards?: components['schemas']['DashboardDefinitionSummary'][]\n authorised: boolean\n }\n VariantDefinitionSummary: {\n id: string\n name: string\n description?: string\n isMissing: boolean\n /** @enum {string} */\n loadType?: LoadType\n }\n ChildVariantDefinition: {\n id: string\n name: string\n resourceName: string\n specification?: components['schemas']['Specification']\n joinFields: string[]\n }\n DynamicFilterOption: {\n /** Format: int32 */\n minimumLength?: number\n }\n FieldDefinition: {\n name: string\n display: string\n /** @enum {string} */\n wordWrap?: 'none' | 'normal' | 'break-words'\n filter?: components['schemas']['FilterDefinition']\n sortable: boolean\n defaultsort: boolean\n /** @enum {string} */\n sortDirection?: 'asc' | 'desc'\n /** @enum {string} */\n type: 'boolean' | 'date' | 'double' | 'HTML' | 'long' | 'string' | 'time'\n mandatory: boolean\n visible: boolean\n calculated: boolean\n header: boolean\n }\n FilterDefinition: {\n /** @enum {string} */\n type: 'Radio' | 'Select' | 'multiselect' | 'daterange' | 'autocomplete' | 'text' | 'date' | 'granulardaterange'\n mandatory: boolean\n pattern?: string\n staticOptions?: components['schemas']['FilterOption'][]\n dynamicOptions?: components['schemas']['DynamicFilterOption']\n defaultValue?: string\n min?: string\n max?: string\n interactive?: boolean\n /** @enum {string} */\n defaultGranularity?: 'hourly' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'annually'\n /** @enum {string} */\n defaultQuickFilterValue?:\n | 'today'\n | 'yesterday'\n | 'last-seven-days'\n | 'last-thirty-days'\n | 'last-month'\n | 'last-full-month'\n | 'last-ninety-days'\n | 'last-three-months'\n | 'last-full-three-months'\n | 'last-year'\n | 'last-full-year'\n | 'tomorrow'\n | 'next-seven-days'\n | 'next-thirty-days'\n | 'next-month'\n | 'next-full-month'\n | 'next-ninety-days'\n | 'next-three-months'\n | 'next-full-three-months'\n | 'next-year'\n | 'next-full-year'\n }\n FilterOption: {\n name: string\n display: string\n }\n ReportSummary: {\n id: string\n /** @enum {string} */\n template: 'table-header' | 'table-footer' | 'section-header' | 'section-footer' | 'page-header' | 'page-footer'\n fields: components['schemas']['SummaryField'][]\n }\n SingleVariantReportDefinition: {\n id: string\n name: string\n description?: string\n variant: components['schemas']['VariantDefinition']\n }\n Specification: {\n /** @enum {string} */\n template:\n | 'list'\n | 'list-section'\n | 'list-tab'\n | 'summary'\n | 'summary-section'\n | 'parent-child'\n | 'parent-child-section'\n | 'row-section'\n | 'row-section-child'\n fields: components['schemas']['FieldDefinition'][]\n sections: string[]\n }\n SummaryField: {\n name: string\n display?: string\n /** @enum {string} */\n type?: 'boolean' | 'date' | 'double' | 'HTML' | 'long' | 'string' | 'time'\n header?: boolean\n mergeRows?: boolean\n }\n VariantDefinition: {\n id: string\n name: string\n resourceName: string\n description?: string\n specification?: components['schemas']['Specification']\n classification?: string\n printable?: boolean\n summaries?: components['schemas']['ReportSummary'][]\n interactive?: boolean\n childVariants?: components['schemas']['ChildVariantDefinition'][]\n }\n DashboardDefinition: {\n id: string\n name: string\n description?: string\n sections: components['schemas']['DashboardSectionDefinition'][]\n filterFields?: components['schemas']['FieldDefinition'][]\n }\n DashboardSectionDefinition: {\n id: string\n display?: string\n description?: string\n visualisations: components['schemas']['DashboardVisualisationDefinition'][]\n }\n DashboardVisualisationColumnDefinition: {\n id: string\n display: string\n /** @enum {string} */\n aggregate?: 'sum' | 'average'\n /** @enum {string} */\n unit?: 'NUMBER' | 'PERCENTAGE'\n displayValue?: boolean\n axis?: string\n }\n DashboardVisualisationColumnsDefinition: {\n keys?: components['schemas']['DashboardVisualisationColumnDefinition'][]\n measures: components['schemas']['DashboardVisualisationColumnDefinition'][]\n filters?: components['schemas']['ValueVisualisationColumnDefinition'][]\n expectNulls: boolean\n }\n DashboardVisualisationDefinition: {\n id: string\n /** @enum {string} */\n type: 'list' | 'doughnut' | 'bar' | 'bar-timeseries' | 'line' | 'scorecard' | 'scorecard-group'\n display?: string\n description?: string\n columns: components['schemas']['DashboardVisualisationColumnsDefinition']\n }\n ValueVisualisationColumnDefinition: {\n id: string\n equals: string\n }\n StatementExecutionResponse: {\n tableId: string\n executionId: string\n }\n StatementCancellationResponse: {\n /** @description A value that indicates whether the cancel statement succeeded (true). */\n cancellationSucceeded: boolean\n }\n }\n responses: never\n parameters: never\n requestBodies: never\n headers: never\n pathItems: never\n}\nexport type $defs = Record<string, never>\nexport interface operations {\n requestMissing: {\n parameters: {\n query?: never\n header?: never\n path: {\n reportId: string\n /**\n * @description The ID of the variant definition.\n * @example list\n */\n variantId: string\n }\n cookie?: never\n }\n requestBody?: {\n content: {\n 'application/json': string\n }\n }\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['MissingReportSubmission']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n definitions: {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': string[]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n configuredApiDataset: {\n parameters: {\n query: {\n selectedPage?: number\n pageSize?: number\n sortColumn?: string\n sortedAsc?: boolean\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[]\n }\n }\n }\n }\n configuredApiDynamicFilter: {\n parameters: {\n query: {\n pageSize?: number\n sortedAsc?: boolean\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description The value to match the start of the fieldId\n * @example Lond\n */\n prefix: string\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n /**\n * @description The name of the schema field which will be used as a dynamic filter.\n * @example name\n */\n fieldId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': string[]\n }\n }\n }\n }\n getQueryExecutionResult: {\n parameters: {\n query: {\n dataProductDefinitionsPath?: string\n selectedPage?: number\n pageSize?: number\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n sortColumn?: string\n sortedAsc?: boolean\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n tableId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getSummaryQueryExecutionResult: {\n parameters: {\n query: {\n dataProductDefinitionsPath?: string\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n tableId: string\n summaryId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getInteractiveExternalTableRowCount: {\n parameters: {\n query: {\n filters: {\n [key: string]: string\n }\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n tableId: string\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['Count']\n }\n }\n }\n }\n getQueryExecutionStatus: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n /**\n * @description External table ID.\n * @example reports._6b3c6dfb_f601_4795_8ee5_2ad65b7fb283\n */\n tableId?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionStatus']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n configuredApiCount: {\n parameters: {\n query: {\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['Count']\n }\n }\n }\n }\n getDashboardQueryExecutionResult: {\n parameters: {\n query: {\n dataProductDefinitionsPath?: string\n selectedPage?: number\n pageSize?: number\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n tableId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[][]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getDashboardExecutionStatus: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n /**\n * @description External table ID.\n * @example reports._6b3c6dfb_f601_4795_8ee5_2ad65b7fb283\n */\n tableId?: string\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionStatus']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getExternalTableRowCount: {\n parameters: {\n query?: never\n header?: never\n path: {\n tableId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['Count']\n }\n }\n }\n }\n definitions_1: {\n parameters: {\n query?: {\n /**\n * @description Set this parameter to filter the list to only include reports for the given rendering method.\n * @example HTML\n */\n renderMethod?: 'HTML' | 'PDF' | 'SVG'\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path?: never\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ReportDefinitionSummary'][]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n definitionSummary: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n /**\n * @description The ID of the report definition.\n * @example external-movements\n */\n reportId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ReportDefinitionSummary']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n definition: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n /**\n * @description The ID of the report definition.\n * @example external-movements\n */\n reportId: string\n /**\n * @description The ID of the variant definition.\n * @example list\n */\n variantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['SingleVariantReportDefinition']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n dashboardDefinition: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n /**\n * @description The ID of the Data Product Definition.\n * @example external-movements\n */\n dataProductDefinitionId: string\n /**\n * @description The ID of the dashboard.\n * @example dashboardId\n */\n dashboardId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['DashboardDefinition']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n asyncConfiguredApiExecuteQuery: {\n parameters: {\n query: {\n sortColumn?: string\n sortedAsc?: boolean\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n * Note: For legacy nomis and bodmis reports, for filters deriving from DPD parameters(prompts),there is no need for these to be suffixed with .start and .end. For example, filters.start_date and filters.end_date are perfectly valid in this case.\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionResponse']\n }\n }\n }\n }\n asyncExecuteDashboard: {\n parameters: {\n query: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionResponse']\n }\n }\n }\n }\n cancelReportQueryExecution: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementCancellationResponse']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n cancelDashboardQueryExecution: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementCancellationResponse']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n}\n"],
4
+ "sourcesContent": ["/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\nimport { LoadType } from './UserReports'\n\nexport interface paths {\n '/missingRequest/{reportId}/{variantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n get?: never\n put?: never\n /** @description Submit a request for a missing report */\n post: operations['requestMissing']\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/user/caseload/active': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets a user's active caseloads */\n get: operations['definitions']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the dataset for the given report ID and report variant ID filtered by the filters provided in the query. */\n get: operations['configuredApiDataset']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/{fieldId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the dataset for the given report ID and report variant ID filtered by the filters provided in the query. */\n get: operations['configuredApiDynamicFilter']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/tables/{tableId}/result': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the resulting rows of the executed statement in a paginated fashion which has been stored in a dedicated table. */\n get: operations['getQueryExecutionResult']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/tables/{tableId}/result/summary/{summaryId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns a summary of a request, which has been stored in a dedicated table. */\n get: operations['getSummaryQueryExecutionResult']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/tables/{tableId}/count': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the number of rows of the table which contains the result of a previously executed query. Allows filtering and it is aimed at supporting the interactive journey. */\n get: operations['getInteractiveExternalTableRowCount']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/statements/{statementId}/status': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the status of the statement execution based on the statement ID provided.The following status values can be returned:\n * ABORTED - The query run was stopped by the user.\n * ALL - A status value that includes all query statuses. This value can be used to filter results.\n * FAILED - The query run failed.\n * FINISHED - The query has finished running.\n * PICKED - The query has been chosen to be run.\n * STARTED - The query run has started.\n * SUBMITTED - The query was submitted, but not yet processed.\n * Note: When the status is FAILED the error field of the response will be populated.ResultRows is the number of rows returned from the SQL statement. A -1 indicates the value is null.ResultSize is the size in bytes of the returned results. A -1 indicates the value is null.\n * For Athena:\n * Athena automatically retries your queries in cases of certain transient errors. As a result, you may see the query state transition from STARTED or FAILED to SUBMITTED.\n * */\n get: operations['getQueryExecutionStatus']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/count': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the number of records for the given report ID and report variant ID filtered by the filters provided in the query. */\n get: operations['configuredApiCount']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/dashboards/{dashboardId}/tables/{tableId}/result': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the resulting rows of the executed statement in a paginated fashion which has been stored in a dedicated table. */\n get: operations['getDashboardQueryExecutionResult']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/dashboards/{dashboardId}/statements/{statementId}/status': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the status of the dashboard statement execution based on the statement ID provided.The following status values can be returned:\n * ABORTED - The query run was stopped by the user.\n * ALL - A status value that includes all query statuses. This value can be used to filter results.\n * FAILED - The query run failed.\n * FINISHED - The query has finished running.\n * PICKED - The query has been chosen to be run.\n * STARTED - The query run has started.\n * SUBMITTED - The query was submitted, but not yet processed.\n * Note: When the status is FAILED the error field of the response will be populated.ResultRows is the number of rows returned from the SQL statement. A -1 indicates the value is null.ResultSize is the size in bytes of the returned results. A -1 indicates the value is null.\n * For Athena:\n * Athena automatically retries your queries in cases of certain transient errors. As a result, you may see the query state transition from STARTED or FAILED to SUBMITTED.\n * */\n get: operations['getDashboardExecutionStatus']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/report/tables/{tableId}/count': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Returns the number of rows of the table which contains the result of a previously executed query. */\n get: operations['getExternalTableRowCount']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets summaries of all report definitions */\n get: operations['definitions_1']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions/{reportId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets report definition summary */\n get: operations['definitionSummary']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions/{reportId}/{variantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets report definition containing a single variant. */\n get: operations['definition']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/definitions/{dataProductDefinitionId}/dashboards/{dashboardId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Gets the metric dashboard definition. */\n get: operations['dashboardDefinition']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/async/reports/{reportId}/{reportVariantId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Executes asynchronously the dataset query for the given report and stores the result into an external table.The response returned contains the table ID and the execution ID. This is the asynchronous version of the /reports/{reportId}/{reportVariantId} API. */\n get: operations['asyncConfiguredApiExecuteQuery']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/async/dashboards/{reportId}/{dashboardId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n /** @description Executes asynchronously the dataset query for the given dashboard and stores the result into an external table.The response returned contains the table ID and the execution ID. */\n get: operations['asyncExecuteDashboard']\n put?: never\n post?: never\n delete?: never\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/{reportVariantId}/statements/{statementId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n get?: never\n put?: never\n post?: never\n /** @description Cancels the execution of a running query. */\n delete: operations['cancelReportQueryExecution']\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n '/reports/{reportId}/dashboards/{dashboardId}/statements/{statementId}': {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n get?: never\n put?: never\n post?: never\n /** @description Cancels the execution of a running query. */\n delete: operations['cancelDashboardQueryExecution']\n options?: never\n head?: never\n patch?: never\n trace?: never\n }\n}\nexport type webhooks = Record<string, never>\nexport interface components {\n schemas: {\n ErrorResponse: {\n /** Format: int32 */\n status: number\n /** Format: int32 */\n errorCode?: number\n userMessage?: string\n developerMessage?: string\n moreInfo?: string\n }\n MissingReportSubmission: {\n userId: string\n reportId: string\n reportVariantId: string\n reason?: string\n /** Format: int32 */\n id?: number\n }\n Count: {\n /**\n * Format: int64\n * @description The total number of records\n * @example 501\n */\n count: number\n }\n StatementExecutionStatus: {\n /** @description The status of the statement execution. */\n status: string\n /**\n * Format: int64\n * @description The amount of time in nanoseconds that the statement ran.\n * @example 10562762848\n */\n duration: number\n /**\n * Format: int64\n * @description The number of rows returned from the query.\n * @example 10\n */\n resultRows: number\n /**\n * Format: int64\n * @description The size in bytes of the returned results. A -1 indicates the value is null.\n * @example 0\n */\n resultSize?: number\n /** @description Contains a short description of the error that occurred. */\n error?: string\n /**\n * Format: int32\n * @description Specific to Athena queries. An integer value that specifies the category of a query failure error. The following list shows the category for each integer value.\n * 1 - System\n * 2 - User\n * 3 - Other\n */\n errorCategory?: number\n /** @description Specific to Athena queries. Further detail about the status of the query. */\n stateChangeReason?: string\n }\n DashboardDefinitionSummary: {\n id: string\n name: string\n description?: string\n /** @enum {string} */\n loadType?: 'sync' | 'async'\n }\n ReportDefinitionSummary: {\n id: string\n name: string\n description?: string\n variants: components['schemas']['VariantDefinitionSummary'][]\n dashboards?: components['schemas']['DashboardDefinitionSummary'][]\n authorised: boolean\n }\n VariantDefinitionSummary: {\n id: string\n name: string\n description?: string\n isMissing: boolean\n /** @enum {string} */\n loadType?: LoadType\n }\n ChildVariantDefinition: {\n id: string\n name: string\n resourceName: string\n specification?: components['schemas']['Specification']\n joinFields: string[]\n }\n DynamicFilterOption: {\n /** Format: int32 */\n minimumLength?: number\n }\n FieldDefinition: {\n name: string\n display: string\n /** @enum {string} */\n wordWrap?: 'none' | 'normal' | 'break-words'\n filter?: components['schemas']['FilterDefinition']\n sortable: boolean\n defaultsort: boolean\n /** @enum {string} */\n sortDirection?: 'asc' | 'desc'\n /** @enum {string} */\n type: 'boolean' | 'date' | 'double' | 'HTML' | 'long' | 'string' | 'time'\n mandatory: boolean\n visible: boolean\n calculated: boolean\n header: boolean\n }\n FilterDefinition: {\n /** @enum {string} */\n type: 'Radio' | 'Select' | 'multiselect' | 'daterange' | 'autocomplete' | 'text' | 'date' | 'granulardaterange'\n mandatory: boolean\n pattern?: string\n staticOptions?: components['schemas']['FilterOption'][]\n dynamicOptions?: components['schemas']['DynamicFilterOption']\n defaultValue?: string\n min?: string\n max?: string\n interactive?: boolean\n /** @enum {string} */\n defaultGranularity?: 'hourly' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'annually'\n /** @enum {string} */\n defaultQuickFilterValue?:\n | 'today'\n | 'yesterday'\n | 'last-seven-days'\n | 'last-thirty-days'\n | 'last-month'\n | 'last-full-month'\n | 'last-ninety-days'\n | 'last-three-months'\n | 'last-full-three-months'\n | 'last-year'\n | 'last-full-year'\n | 'tomorrow'\n | 'next-seven-days'\n | 'next-thirty-days'\n | 'next-month'\n | 'next-full-month'\n | 'next-ninety-days'\n | 'next-three-months'\n | 'next-full-three-months'\n | 'next-year'\n | 'next-full-year'\n /** Format: int32 */\n index?: number\n }\n FilterOption: {\n name: string\n display: string\n }\n ReportSummary: {\n id: string\n /** @enum {string} */\n template: 'table-header' | 'table-footer' | 'section-header' | 'section-footer' | 'page-header' | 'page-footer'\n fields: components['schemas']['SummaryField'][]\n }\n SingleVariantReportDefinition: {\n id: string\n name: string\n description?: string\n variant: components['schemas']['VariantDefinition']\n }\n Specification: {\n /** @enum {string} */\n template:\n | 'list'\n | 'list-section'\n | 'list-tab'\n | 'summary'\n | 'summary-section'\n | 'parent-child'\n | 'parent-child-section'\n | 'row-section'\n | 'row-section-child'\n fields: components['schemas']['FieldDefinition'][]\n sections: string[]\n }\n SummaryField: {\n name: string\n display?: string\n /** @enum {string} */\n type?: 'boolean' | 'date' | 'double' | 'HTML' | 'long' | 'string' | 'time'\n header?: boolean\n mergeRows?: boolean\n }\n VariantDefinition: {\n id: string\n name: string\n resourceName: string\n description?: string\n specification?: components['schemas']['Specification']\n classification?: string\n printable?: boolean\n summaries?: components['schemas']['ReportSummary'][]\n interactive?: boolean\n childVariants?: components['schemas']['ChildVariantDefinition'][]\n }\n DashboardDefinition: {\n id: string\n name: string\n description?: string\n sections: components['schemas']['DashboardSectionDefinition'][]\n filterFields?: components['schemas']['FieldDefinition'][]\n }\n DashboardSectionDefinition: {\n id: string\n display?: string\n description?: string\n visualisations: components['schemas']['DashboardVisualisationDefinition'][]\n }\n DashboardVisualisationColumnDefinition: {\n id: string\n display: string\n /** @enum {string} */\n aggregate?: 'sum' | 'average'\n /** @enum {string} */\n unit?: 'NUMBER' | 'PERCENTAGE'\n displayValue?: boolean\n axis?: string\n }\n DashboardVisualisationColumnsDefinition: {\n keys?: components['schemas']['DashboardVisualisationColumnDefinition'][]\n measures: components['schemas']['DashboardVisualisationColumnDefinition'][]\n filters?: components['schemas']['ValueVisualisationColumnDefinition'][]\n expectNulls: boolean\n }\n DashboardVisualisationDefinition: {\n id: string\n /** @enum {string} */\n type: 'list' | 'doughnut' | 'bar' | 'bar-timeseries' | 'line' | 'scorecard' | 'scorecard-group'\n display?: string\n description?: string\n columns: components['schemas']['DashboardVisualisationColumnsDefinition']\n }\n ValueVisualisationColumnDefinition: {\n id: string\n equals: string\n }\n StatementExecutionResponse: {\n tableId: string\n executionId: string\n }\n StatementCancellationResponse: {\n /** @description A value that indicates whether the cancel statement succeeded (true). */\n cancellationSucceeded: boolean\n }\n }\n responses: never\n parameters: never\n requestBodies: never\n headers: never\n pathItems: never\n}\nexport type $defs = Record<string, never>\nexport interface operations {\n requestMissing: {\n parameters: {\n query?: never\n header?: never\n path: {\n reportId: string\n /**\n * @description The ID of the variant definition.\n * @example list\n */\n variantId: string\n }\n cookie?: never\n }\n requestBody?: {\n content: {\n 'application/json': string\n }\n }\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['MissingReportSubmission']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n definitions: {\n parameters: {\n query?: never\n header?: never\n path?: never\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': string[]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n configuredApiDataset: {\n parameters: {\n query: {\n selectedPage?: number\n pageSize?: number\n sortColumn?: string\n sortedAsc?: boolean\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[]\n }\n }\n }\n }\n configuredApiDynamicFilter: {\n parameters: {\n query: {\n pageSize?: number\n sortedAsc?: boolean\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description The value to match the start of the fieldId\n * @example Lond\n */\n prefix: string\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n /**\n * @description The name of the schema field which will be used as a dynamic filter.\n * @example name\n */\n fieldId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': string[]\n }\n }\n }\n }\n getQueryExecutionResult: {\n parameters: {\n query: {\n dataProductDefinitionsPath?: string\n selectedPage?: number\n pageSize?: number\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n sortColumn?: string\n sortedAsc?: boolean\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n tableId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getSummaryQueryExecutionResult: {\n parameters: {\n query: {\n dataProductDefinitionsPath?: string\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n tableId: string\n summaryId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getInteractiveExternalTableRowCount: {\n parameters: {\n query: {\n filters: {\n [key: string]: string\n }\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n tableId: string\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['Count']\n }\n }\n }\n }\n getQueryExecutionStatus: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n /**\n * @description External table ID.\n * @example reports._6b3c6dfb_f601_4795_8ee5_2ad65b7fb283\n */\n tableId?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionStatus']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n configuredApiCount: {\n parameters: {\n query: {\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['Count']\n }\n }\n }\n }\n getDashboardQueryExecutionResult: {\n parameters: {\n query: {\n dataProductDefinitionsPath?: string\n selectedPage?: number\n pageSize?: number\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n tableId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': {\n [key: string]: Record<string, never>\n }[][]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getDashboardExecutionStatus: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n /**\n * @description External table ID.\n * @example reports._6b3c6dfb_f601_4795_8ee5_2ad65b7fb283\n */\n tableId?: string\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionStatus']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n getExternalTableRowCount: {\n parameters: {\n query?: never\n header?: never\n path: {\n tableId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['Count']\n }\n }\n }\n }\n definitions_1: {\n parameters: {\n query?: {\n /**\n * @description Set this parameter to filter the list to only include reports for the given rendering method.\n * @example HTML\n */\n renderMethod?: 'HTML' | 'PDF' | 'SVG'\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path?: never\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ReportDefinitionSummary'][]\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n definitionSummary: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n /**\n * @description The ID of the report definition.\n * @example external-movements\n */\n reportId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ReportDefinitionSummary']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n definition: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n /**\n * @description The ID of the report definition.\n * @example external-movements\n */\n reportId: string\n /**\n * @description The ID of the variant definition.\n * @example list\n */\n variantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['SingleVariantReportDefinition']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n dashboardDefinition: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n /**\n * @description The ID of the Data Product Definition.\n * @example external-movements\n */\n dataProductDefinitionId: string\n /**\n * @description The ID of the dashboard.\n * @example dashboardId\n */\n dashboardId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['DashboardDefinition']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n asyncConfiguredApiExecuteQuery: {\n parameters: {\n query: {\n sortColumn?: string\n sortedAsc?: boolean\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n * Note: For legacy nomis and bodmis reports, for filters deriving from DPD parameters(prompts),there is no need for these to be suffixed with .start and .end. For example, filters.start_date and filters.end_date are perfectly valid in this case.\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionResponse']\n }\n }\n }\n }\n asyncExecuteDashboard: {\n parameters: {\n query: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n /**\n * @description The filter query parameters have to start with the prefix \"filters.\" followed by the name of the filter.\n * For range filters, like date for instance, these need to be followed by a .start or .end suffix accordingly.\n * For multiselect filters, these are passed as one query parameter per filter with a comma separated list of values:\n * filters.someMultiselectFilter=a,b,c\n *\n * @example {\n * \"filters.date.start\": \"2023-04-25\",\n * \"filters.date.end\": \"2023-05-30\",\n * \"filters.someMultiselectFilter\": \"a,b,c\"\n * }\n */\n filters: {\n [key: string]: string\n }\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description default response */\n default: {\n headers: {\n /** @description Provides additional information about why no data has been returned. */\n 'x-no-data-warning'?: string\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementExecutionResponse']\n }\n }\n }\n }\n cancelReportQueryExecution: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n reportVariantId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementCancellationResponse']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n cancelDashboardQueryExecution: {\n parameters: {\n query?: {\n /**\n * @description This optional parameter sets the path of the directory of the data product definition files your application will use.\n * \"This query parameter is intended to be used in conjunction with the `dpr.lib.dataProductDefinitions.host` property to retrieve definition files from another application by using a web client.\n * @example definitions/prisons/orphanage\n */\n dataProductDefinitionsPath?: string\n }\n header?: never\n path: {\n reportId: string\n dashboardId: string\n statementId: string\n }\n cookie?: never\n }\n requestBody?: never\n responses: {\n /** @description OK */\n 200: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['StatementCancellationResponse']\n }\n }\n /** @description Bad Request */\n 400: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Forbidden */\n 403: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Too Many Requests */\n 429: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n /** @description Internal Server Error */\n 500: {\n headers: {\n [name: string]: unknown\n }\n content: {\n 'application/json': components['schemas']['ErrorResponse']\n }\n }\n }\n }\n}\n"],
5
5
  "mappings": "kWAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["api_d_exports", "__toCommonJS"]
7
7
  }
@@ -518,6 +518,8 @@ export interface components {
518
518
  | 'next-full-three-months'
519
519
  | 'next-year'
520
520
  | 'next-full-year'
521
+ /** Format: int32 */
522
+ index?: number
521
523
  }
522
524
  FilterOption: {
523
525
  name: string
@@ -1,2 +1,2 @@
1
- var h=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var q=(e,s)=>{for(var n in s)h(e,n,{get:s[n],enumerable:!0})},T=(e,s,n,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of E(s))!O.call(e,o)&&o!==n&&h(e,o,{get:()=>s[o],enumerable:!(t=k(s,o))||t.enumerable});return e};var j=e=>T(h({},"__esModule",{value:!0}),e);var H={};q(H,{default:()=>B,filterKeys:()=>R,filterRowsByDisplayColumns:()=>I,getDatasetRows:()=>g,getEarliestDataset:()=>V,getGroupKey:()=>K,getKeyIds:()=>b,getKeyVariations:()=>y,getLastestDataset:()=>v,groupRowsByKey:()=>C,groupRowsByTimestamp:()=>x});module.exports=j(H);const g=(e,s)=>{const{keys:n,measures:t,filters:o,expectNulls:r}=e.columns,a=t.map(p=>p.id),i=n?.map(p=>p.id)||[],l=o?.map(p=>p.id)||[],u=n?.some(p=>p.optional);s.length&&s[0].ts&&i.unshift("ts");const D=s.filter(p=>{const w=[];return Object.keys(p).forEach(f=>{const c=p[f].raw;let d=!0;l.includes(f)?d=(o?o.filter(m=>m.id===f).map(m=>m.equals):[]).includes(c):i.includes(f)&&u?d=!0:i.includes(f)&&!u||a.includes(f)?d=c!==""&&c!==void 0&&c!==null:r&&(d=c===""||c===void 0||c===null),w.push(d)}),w.every(f=>f)});return u?R(D,n||[]):D},y=(e,s)=>{const n=[],t=s.map(a=>a.id),o=s.every(a=>a.optional),r=[...t];return t.reverse().forEach(a=>{const i=s.find(l=>l.id===a);n.push([...r]),i&&i.optional&&r.pop()}),o&&n.push([]),n},b=(e,s)=>{let n=[];return s.every(t=>{const o=[];return e.forEach(r=>{const a=[];Object.keys(r).forEach(i=>{const l=r[i].raw;let u=!0;t.includes(i)&&(u=l!==""&&l!==void 0&&l!==null),a.push(u)}),a.every(i=>i)&&o.push(r)}),o.length>0?(n=t,!1):(n=t,!0)}),n},R=(e,s)=>{const n=y(e,s),t=b(e,n);return e.filter(o=>{const r=[];return Object.keys(o).forEach(a=>{const i=o[a].raw;let l=!0;t.includes(a)&&(l=i!==""&&i!==void 0&&i!==null),r.push(l)}),r.every(a=>a)})},v=e=>{const s=e[e.length-1]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},V=e=>{const s=e[0]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},x=e=>[...new Set(e.map(n=>n.ts.raw))].map(n=>e.filter(t=>t.ts.raw===n)),C=(e,s)=>[...new Set(e.map(t=>t[s].raw))].map(t=>e.filter(o=>o[s].raw===t)),K=(e,s)=>{if(!e||!e.length)return;const n=s[0];let t=e.length-1,o=!1;for(;!o;){const r=`${e[t]?.id}`;r&&t!==-1&&(!n[r]||!n[r].raw||n[r].raw===""||n[r].raw===null)?t-=1:o=!0}return t!==-1?e[t]:void 0},I=(e,s,n=!1)=>{const{keys:t,measures:o}=e.columns,r=t||[];let a=[...o];n&&(a=[...r,...o]);const i=a.map(l=>l.id);return s.map(l=>Object.keys(l).filter(u=>i.includes(u)).reduce((u,D)=>(u[D]=l[D],u),{}))};var B={getDatasetRows:g,getLastestDataset:v,getEarliestDataset:V,filterRowsByDisplayColumns:I,groupRowsByTimestamp:x,groupRowsByKey:C,getGroupKey:K,getKeyVariations:y,getKeyIds:b,filterKeys:R};0&&(module.exports={filterKeys,filterRowsByDisplayColumns,getDatasetRows,getEarliestDataset,getGroupKey,getKeyIds,getKeyVariations,getLastestDataset,groupRowsByKey,groupRowsByTimestamp});
1
+ var h=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var q=(e,s)=>{for(var n in s)h(e,n,{get:s[n],enumerable:!0})},T=(e,s,n,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of E(s))!O.call(e,o)&&o!==n&&h(e,o,{get:()=>s[o],enumerable:!(t=k(s,o))||t.enumerable});return e};var j=e=>T(h({},"__esModule",{value:!0}),e);var H={};q(H,{default:()=>B,filterKeys:()=>R,filterRowsByDisplayColumns:()=>I,getDatasetRows:()=>g,getEarliestDataset:()=>V,getGroupKey:()=>K,getKeyIds:()=>b,getKeyVariations:()=>y,getLastestDataset:()=>v,groupRowsByKey:()=>C,groupRowsByTimestamp:()=>x});module.exports=j(H);const g=(e,s)=>{const{keys:n,measures:t,filters:o,expectNulls:r}=e.columns,a=t.map(p=>p.id),i=n?.map(p=>p.id)||[],l=o?.map(p=>p.id)||[],u=n?.some(p=>p.optional);s.length&&s[0].ts&&i.unshift("ts");const m=s.filter(p=>{const w=[];return Object.keys(p).forEach(f=>{const c=p[f].raw;let d=!0;l.includes(f)?d=(o?o.filter(D=>D.id===f).map(D=>D.equals):[]).includes(c):i.includes(f)&&u?d=!0:i.includes(f)&&!u||a.includes(f)?d=c!==""&&c!==void 0&&c!==null:r&&(d=c===""||c===void 0||c===null),w.push(d)}),w.every(f=>f)});return u?R(m,n||[]):m},y=(e,s)=>{const n=[],t=s.map(a=>a.id),o=s.every(a=>a.optional),r=[...t];return t.reverse().forEach(a=>{const i=s.find(l=>l.id===a);n.push([...r]),i&&i.optional&&r.pop()}),o&&n.push([]),n},b=(e,s)=>{let n=[];return s.every(t=>{const o=[];return e.forEach(r=>{const a=[];Object.keys(r).forEach(i=>{const l=r[i].raw;let u=!0;t.includes(i)&&(u=l!==""&&l!==void 0&&l!==null),a.push(u)}),a.every(i=>i)&&o.push(r)}),o.length>0?(n=t,!1):(n=t,!0)}),n},R=(e,s)=>{const n=y(e,s),t=b(e,n);return e.filter(o=>{const r=[];return Object.keys(o).forEach(a=>{const i=o[a].raw;let l=!0;t.includes(a)&&(l=i!==""&&i!==void 0&&i!==null),r.push(l)}),r.every(a=>a)})},v=e=>{const s=e[e.length-1]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},V=e=>{const s=e[0]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},x=e=>[...new Set(e.map(n=>n.ts.raw))].map(n=>e.filter(t=>t.ts.raw===n)),C=(e,s)=>[...new Set(e.map(t=>t[s].raw))].map(t=>e.filter(o=>o[s].raw===t)),K=(e,s)=>{if(!e||!e.length||!s.length)return;const n=s[0];let t=e.length-1,o=!1;for(;!o;){const r=`${e[t]?.id}`;r&&t!==-1&&(!n[r]||!n[r].raw||n[r].raw===""||n[r].raw===null)?t-=1:o=!0}return t!==-1?e[t]:void 0},I=(e,s,n=!1)=>{const{keys:t,measures:o}=e.columns,r=t||[];let a=[...o];n&&(a=[...r,...o]);const i=a.map(l=>l.id);return s.map(l=>Object.keys(l).filter(u=>i.includes(u)).reduce((u,m)=>(u[m]=l[m],u),{}))};var B={getDatasetRows:g,getLastestDataset:v,getEarliestDataset:V,filterRowsByDisplayColumns:I,groupRowsByTimestamp:x,groupRowsByKey:C,getGroupKey:K,getKeyVariations:y,getKeyIds:b,filterKeys:R};0&&(module.exports={filterKeys,filterRowsByDisplayColumns,getDatasetRows,getEarliestDataset,getGroupKey,getKeyIds,getKeyVariations,getLastestDataset,groupRowsByKey,groupRowsByTimestamp});
2
2
  //# sourceMappingURL=datasetHelper.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/utils/datasetHelper.ts"],
4
- "sourcesContent": ["import { DashboardDataResponse } from '../types/Metrics'\nimport { DashboardVisualisation, DashboardVisualisationColumnKey } from '../components/_dashboards/dashboard/types'\n\nexport const getDatasetRows = (listDefinition: DashboardVisualisation, dashboardData: DashboardDataResponse[]) => {\n const { keys, measures, filters, expectNulls } = listDefinition.columns\n\n const displayColumnsIds = measures.map((col) => col.id)\n const keyColumnsIds = keys?.map((col) => col.id) || []\n const filterColIds = filters?.map((col) => col.id) || []\n const hasOptionalKeys = keys?.some((key) => key.optional)\n\n if (dashboardData.length && dashboardData[0].ts) keyColumnsIds.unshift('ts')\n\n const filtered = dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n // All rows are valid until proven otherwise\n let valid = true\n\n // 1. check if the column value is equal to a defined column value\n if (filterColIds.includes(datasetField)) {\n const filterValues = filters ? filters.filter((f) => f.id === datasetField).map((f) => f.equals) : []\n valid = filterValues.includes(value)\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && hasOptionalKeys) {\n valid = true\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && !hasOptionalKeys) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 2. check values exist in the defined columns\n } else if (displayColumnsIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 3. check that all remaining columns are null.\n } else if (expectNulls) {\n valid = value === '' || value === undefined || value === null\n }\n\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n\n if (hasOptionalKeys) {\n return filterKeys(filtered, keys || [])\n }\n\n return filtered\n}\n\nexport const getKeyVariations = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {\n const colIdVariations: string[][] = []\n const keyColumnsIds = keys.map((col) => col.id)\n const allOptional = keys.every((key) => key.optional)\n const colIdCopy = [...keyColumnsIds]\n\n keyColumnsIds.reverse().forEach((id) => {\n const key = keys.find((k) => k.id === id)\n colIdVariations.push([...colIdCopy])\n if (key && key.optional) {\n colIdCopy.pop()\n }\n })\n\n if (allOptional) colIdVariations.push([])\n return colIdVariations\n}\n\nexport const getKeyIds = (dashboardData: DashboardDataResponse[], colIdVariations: string[][]) => {\n let validHeadIds: string[] = []\n colIdVariations.every((ids: string[]) => {\n const validRows = []\n\n dashboardData.forEach((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (ids.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n if (validRow.every((val) => val)) {\n validRows.push(datasetRow)\n }\n })\n\n if (validRows.length > 0) {\n validHeadIds = ids\n return false\n }\n validHeadIds = ids\n return true\n })\n\n return validHeadIds\n}\n\nexport const filterKeys = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {\n const colIdVariations = getKeyVariations(dashboardData, keys)\n const validHeadIds = getKeyIds(dashboardData, colIdVariations)\n\n return dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (validHeadIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n}\n\nexport const getLastestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[dashboardData.length - 1]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const getEarliestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[0]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const groupRowsByTimestamp = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[][] => {\n const uniqueTimestamps = [...new Set(dashboardData.map((item) => item.ts.raw))]\n return uniqueTimestamps.map((ts) => {\n return dashboardData.filter((d) => d.ts.raw === ts)\n })\n}\n\nexport const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: string): DashboardDataResponse[][] => {\n const uniqueKeyValues = [...new Set(dashboardData.map((item) => item[key].raw))]\n return uniqueKeyValues.map((keyValue) => {\n return dashboardData.filter((d) => d[key].raw === keyValue)\n })\n}\n\nexport const getGroupKey = (keys: DashboardVisualisationColumnKey[], rawData: DashboardDataResponse[]) => {\n if (!keys || !keys.length) {\n return undefined\n }\n\n const data = rawData[0]\n let index = keys.length - 1\n let keyFound = false\n while (!keyFound) {\n const k = `${keys[index]?.id}`\n if (k && index !== -1 && (!data[k] || !data[k].raw || data[k].raw === '' || data[k].raw === null)) {\n index -= 1\n } else {\n keyFound = true\n }\n }\n\n return index !== -1 ? keys[index] : undefined\n}\n\nexport const filterRowsByDisplayColumns = (\n listDefinition: DashboardVisualisation,\n dashboardData: DashboardDataResponse[],\n includeKeys = false,\n) => {\n const { keys: keyCols, measures } = listDefinition.columns\n const keys = keyCols || []\n let displayColumns = [...measures]\n if (includeKeys) {\n displayColumns = [...keys, ...measures]\n }\n const displayColumnsIds = displayColumns.map((col) => col.id)\n\n return dashboardData.map((datasetRow: DashboardDataResponse) => {\n return Object.keys(datasetRow)\n .filter((key) => displayColumnsIds.includes(key))\n .reduce((acc, key) => {\n acc[key] = datasetRow[key]\n return acc\n }, {} as unknown as DashboardDataResponse)\n })\n}\n\nexport default {\n getDatasetRows,\n getLastestDataset,\n getEarliestDataset,\n filterRowsByDisplayColumns,\n groupRowsByTimestamp,\n groupRowsByKey,\n getGroupKey,\n getKeyVariations,\n getKeyIds,\n filterKeys,\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { DashboardDataResponse } from '../types/Metrics'\nimport { DashboardVisualisation, DashboardVisualisationColumnKey } from '../components/_dashboards/dashboard/types'\n\nexport const getDatasetRows = (listDefinition: DashboardVisualisation, dashboardData: DashboardDataResponse[]) => {\n const { keys, measures, filters, expectNulls } = listDefinition.columns\n\n const displayColumnsIds = measures.map((col) => col.id)\n const keyColumnsIds = keys?.map((col) => col.id) || []\n const filterColIds = filters?.map((col) => col.id) || []\n const hasOptionalKeys = keys?.some((key) => key.optional)\n\n if (dashboardData.length && dashboardData[0].ts) keyColumnsIds.unshift('ts')\n\n const filtered = dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n // All rows are valid until proven otherwise\n let valid = true\n\n // 1. check if the column value is equal to a defined column value\n if (filterColIds.includes(datasetField)) {\n const filterValues = filters ? filters.filter((f) => f.id === datasetField).map((f) => f.equals) : []\n valid = filterValues.includes(value)\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && hasOptionalKeys) {\n valid = true\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && !hasOptionalKeys) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 2. check values exist in the defined columns\n } else if (displayColumnsIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 3. check that all remaining columns are null.\n } else if (expectNulls) {\n valid = value === '' || value === undefined || value === null\n }\n\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n\n if (hasOptionalKeys) {\n return filterKeys(filtered, keys || [])\n }\n\n return filtered\n}\n\nexport const getKeyVariations = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {\n const colIdVariations: string[][] = []\n const keyColumnsIds = keys.map((col) => col.id)\n const allOptional = keys.every((key) => key.optional)\n const colIdCopy = [...keyColumnsIds]\n\n keyColumnsIds.reverse().forEach((id) => {\n const key = keys.find((k) => k.id === id)\n colIdVariations.push([...colIdCopy])\n if (key && key.optional) {\n colIdCopy.pop()\n }\n })\n\n if (allOptional) colIdVariations.push([])\n return colIdVariations\n}\n\nexport const getKeyIds = (dashboardData: DashboardDataResponse[], colIdVariations: string[][]) => {\n let validHeadIds: string[] = []\n colIdVariations.every((ids: string[]) => {\n const validRows = []\n\n dashboardData.forEach((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (ids.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n if (validRow.every((val) => val)) {\n validRows.push(datasetRow)\n }\n })\n\n if (validRows.length > 0) {\n validHeadIds = ids\n return false\n }\n validHeadIds = ids\n return true\n })\n\n return validHeadIds\n}\n\nexport const filterKeys = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {\n const colIdVariations = getKeyVariations(dashboardData, keys)\n const validHeadIds = getKeyIds(dashboardData, colIdVariations)\n\n return dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (validHeadIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n}\n\nexport const getLastestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[dashboardData.length - 1]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const getEarliestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[0]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const groupRowsByTimestamp = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[][] => {\n const uniqueTimestamps = [...new Set(dashboardData.map((item) => item.ts.raw))]\n return uniqueTimestamps.map((ts) => {\n return dashboardData.filter((d) => d.ts.raw === ts)\n })\n}\n\nexport const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: string): DashboardDataResponse[][] => {\n const uniqueKeyValues = [...new Set(dashboardData.map((item) => item[key].raw))]\n return uniqueKeyValues.map((keyValue) => {\n return dashboardData.filter((d) => d[key].raw === keyValue)\n })\n}\n\nexport const getGroupKey = (keys: DashboardVisualisationColumnKey[], rawData: DashboardDataResponse[]) => {\n if (!keys || !keys.length || !rawData.length) {\n return undefined\n }\n\n const data = rawData[0]\n let index = keys.length - 1\n let keyFound = false\n while (!keyFound) {\n const k = `${keys[index]?.id}`\n if (k && index !== -1 && (!data[k] || !data[k].raw || data[k].raw === '' || data[k].raw === null)) {\n index -= 1\n } else {\n keyFound = true\n }\n }\n\n return index !== -1 ? keys[index] : undefined\n}\n\nexport const filterRowsByDisplayColumns = (\n listDefinition: DashboardVisualisation,\n dashboardData: DashboardDataResponse[],\n includeKeys = false,\n) => {\n const { keys: keyCols, measures } = listDefinition.columns\n const keys = keyCols || []\n let displayColumns = [...measures]\n if (includeKeys) {\n displayColumns = [...keys, ...measures]\n }\n const displayColumnsIds = displayColumns.map((col) => col.id)\n\n return dashboardData.map((datasetRow: DashboardDataResponse) => {\n return Object.keys(datasetRow)\n .filter((key) => displayColumnsIds.includes(key))\n .reduce((acc, key) => {\n acc[key] = datasetRow[key]\n return acc\n }, {} as unknown as DashboardDataResponse)\n })\n}\n\nexport default {\n getDatasetRows,\n getLastestDataset,\n getEarliestDataset,\n filterRowsByDisplayColumns,\n groupRowsByTimestamp,\n groupRowsByKey,\n getGroupKey,\n getKeyVariations,\n getKeyIds,\n filterKeys,\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["datasetHelper_exports", "__export", "datasetHelper_default", "filterKeys", "filterRowsByDisplayColumns", "getDatasetRows", "getEarliestDataset", "getGroupKey", "getKeyIds", "getKeyVariations", "getLastestDataset", "groupRowsByKey", "groupRowsByTimestamp", "__toCommonJS", "listDefinition", "dashboardData", "keys", "measures", "filters", "expectNulls", "displayColumnsIds", "col", "keyColumnsIds", "filterColIds", "hasOptionalKeys", "key", "filtered", "datasetRow", "validRow", "datasetField", "value", "valid", "f", "val", "colIdVariations", "allOptional", "colIdCopy", "id", "k", "validHeadIds", "ids", "validRows", "latestTimestamp", "data", "item", "ts", "d", "keyValue", "rawData", "index", "keyFound", "includeKeys", "keyCols", "displayColumns", "acc"]
7
7
  }
@@ -155,7 +155,7 @@ export const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: stri
155
155
  }
156
156
 
157
157
  export const getGroupKey = (keys: DashboardVisualisationColumnKey[], rawData: DashboardDataResponse[]) => {
158
- if (!keys || !keys.length) {
158
+ if (!keys || !keys.length || !rawData.length) {
159
159
  return undefined
160
160
  }
161
161
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
3
3
  "description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
4
- "version": "4.15.4",
4
+ "version": "4.16.1",
5
5
  "main": "dpr/all.mjs",
6
6
  "sass": "dpr/all.scss",
7
7
  "engines": {
@@ -1,2 +0,0 @@
1
- var k=Object.create;var m=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var M=(o,t)=>{for(var i in t)m(o,i,{get:t[i],enumerable:!0})},d=(o,t,i,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of v(t))!g.call(o,s)&&s!==i&&m(o,s,{get:()=>t[s],enumerable:!(e=C(t,s))||e.enumerable});return o};var b=(o,t,i)=>(i=o!=null?k(x(o)):{},d(t||!o||!o.__esModule?m(i,"default",{value:o,enumerable:!0}):i,o)),B=o=>d(m({},"__esModule",{value:!0}),o);var R={};M(R,{HeatmapChart:()=>p,default:()=>T});module.exports=B(R);var u=b(require("dayjs")),D=require("with-alpha-hex"),f=require("../../../_dashboards/dashboard/types"),y=b(require("../../../../utils/datasetHelper"));class p{constructor(t,i,e){this.baseColour="#1d70b8";this.ragColours=["#00703c","#ffdd00","#d4351c"];this.buckets=[];this.data=[];this.dayDateFormat="DD/MM/YYYY";this.hasRag=!1;this.options={};this.initFromResponseData=t=>{this.hasRag=t[0][this.valueKey].rag!==void 0,this.responseData=t};this.initFromDefinition=t=>{this.definition=t,this.columns=t.columns,this.unit=this.columns.measures[0].unit?this.columns.measures[0].unit:void 0,this.type=this.definition.type.split("-")[0],this.options=t.options,this.baseColour=this.options.baseColour||this.baseColour,this.valueKey=this.columns.measures[1].id,this.label=this.columns.measures[1].display,this.onlyBucketColoursDefined=this.options?.buckets?.every(i=>!i.max&&!i.min&&i.hexColour!==void 0)};this.initBuckets=()=>{const{buckets:t}=this.options;this.setBucketCount(),this.initBucketColours(),t?this.onlyBucketColoursDefined?this.initAutomaticThresholdBucket():this.initCustomThresholdBuckets():this.hasRag||this.initAutomaticThresholdBucket()};this.initCustomThresholdBuckets=()=>{this.buckets=this.options.buckets.map((t,i)=>({...this.buckets[i],...t}))};this.initAutomaticThresholdBucket=()=>{const{min:t,max:i,bucketSize:e}=this.setAutomaticThresholdSize();let s=0;this.buckets=this.buckets.map((a,r)=>{let n=t;return r!==0&&(n=s+1),s=e*(r+1),r===this.buckets.length-1&&(s=i),{hexColour:this.options?.buckets?this.options.buckets[r]?.hexColour:a.hexColour,min:n,max:s}})};this.initBucketColours=()=>{const{useRagColours:t}=this.options;if(t&&this.bucketCount===3)this.buckets=Array.from(new Array(this.bucketCount)).map((i,e)=>({hexColour:this.ragColours[e]}));else{const i=1/this.bucketCount;this.buckets=Array.from(new Array(this.bucketCount)).map((e,s)=>{const a=i*(s+1);return{hexColour:(0,D.withAlphaHex)(this.baseColour,a)}})}};this.setAutomaticThresholdSize=()=>{const t=this.responseData.map(a=>Number(a[this.valueKey].raw)),i=Math.min(...t),e=Math.max(...t),s=Math.ceil((e-i)/this.bucketCount);return{min:i,max:e,bucketSize:s}};this.setBucketCount=()=>{const{buckets:t}=this.options;this.hasRag?this.bucketCount=Math.max(...this.responseData.map(i=>i[this.valueKey].rag))+1:t?this.bucketCount=t.length:this.bucketCount=3};this.validateDefinition=()=>{const{id:t,columns:i,type:e}=this.definition,s=[];if(i.measures.length!==2?s.push(`Measures should only have 2 columns defined. Only found ${i.measures.length}`):e===f.DashboardVisualisationType.MATRIX_TIMESERIES&&i.measures[0].id!=="ts"&&s.push(`measure at index 0 has incorrect ID. Expected ID to be "ts". Found "${i.measures[0].id}"`),s.length){const a=`Validation: Visualisaton definition: ID: ${t}, type: ${e}, errors: ${s.join(",")}`;throw new Error(a)}};this.initTimeseriesData=()=>{const t=y.default.groupRowsByTimestamp(this.responseData);this.data=t.map(i=>{const{raw:e,rag:s}=i[0][this.valueKey],a=i[0].ts.raw,r=Number(e),n=s!==void 0?Number(i[0][this.valueKey].rag):void 0;let h,l;switch(this.granularity){case"hourly":break;case"weekly":h=(0,u.default)(a,this.dayDateFormat).format("ddd"),l=(0,u.default)(a,this.dayDateFormat).week();break;case"daily":h=(0,u.default)(a,this.dayDateFormat).format("MMM YY"),l=(0,u.default)(a,this.dayDateFormat).format("D");break;case"monthly":{const c=a.split(" ");h=c[1],l=c[0]}break;case"annually":h="year",l=a;break;default:h=(0,u.default)(a,this.dayDateFormat).format("MMM YY"),l=(0,u.default)(a,this.dayDateFormat).format("D");break}return{y:l,x:h,v:r,r:n}})};this.binDataIntoBuckets=()=>{this.data=this.data.map(t=>{const{v:i,r:e}=t;let s;return e!==void 0?s=this.buckets[e].hexColour:this.buckets.forEach(a=>{const{min:r,max:n}=a;!r&&n&&i<=n&&(s=a.hexColour),r&&i>=a.min&&n&&i<=a.max&&(s=a.hexColour),r&&!n&&i>=r&&(s=a.hexColour)}),{...t,c:s}})};this.build=()=>(this.validateDefinition(),this.initTimeseriesData(),this.binDataIntoBuckets(),{type:this.type,unit:this.unit,timeseries:!0,data:{datasets:[{label:this.label,data:this.data}]}});this.granularity=i,this.initFromDefinition(e),this.initFromResponseData(t),this.initBuckets()}}var T=p;0&&(module.exports={HeatmapChart});
2
- //# sourceMappingURL=Heatmap.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/dpr/components/_charts/chart/heatmap/Heatmap.ts"],
4
- "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport dayjs from 'dayjs'\nimport { withAlphaHex } from 'with-alpha-hex'\nimport { Granularity } from '../../../_inputs/granular-date-range/types'\nimport { DashboardDataResponse } from '../../../../types/Metrics'\nimport {\n DashboardVisualisation,\n DashboardVisualisationColumns,\n DashboardVisualisationType,\n MatrixDashboardVisualisationBucket,\n MatrixDashboardVisualisationOptions,\n} from '../../../_dashboards/dashboard/types'\nimport { ChartData, ChartType, MatrixChartData, UnitType } from '../../../../types/Charts'\nimport DatasetHelper from '../../../../utils/datasetHelper'\n\nclass HeatmapChart {\n private baseColour = '#1d70b8'\n\n private ragColours: string[] = ['#00703c', '#ffdd00', '#d4351c']\n\n private buckets: MatrixDashboardVisualisationBucket[] = []\n\n private bucketCount: number\n\n private onlyBucketColoursDefined: boolean\n\n private granularity: Granularity\n\n private responseData: DashboardDataResponse[]\n\n private data: MatrixChartData[] = []\n\n private definition: DashboardVisualisation\n\n private columns: DashboardVisualisationColumns\n\n private unit: UnitType\n\n private type: ChartType\n\n private dayDateFormat = 'DD/MM/YYYY'\n\n private hasRag = false\n\n private valueKey: string\n\n private options: MatrixDashboardVisualisationOptions = {}\n\n private label: string\n\n constructor(responseData: DashboardDataResponse[], granularity: Granularity, definition: DashboardVisualisation) {\n this.granularity = granularity\n this.initFromDefinition(definition)\n this.initFromResponseData(responseData)\n this.initBuckets()\n }\n\n private initFromResponseData = (responseData: DashboardDataResponse[]) => {\n this.hasRag = responseData[0][this.valueKey].rag !== undefined\n this.responseData = responseData\n }\n\n private initFromDefinition = (definition: DashboardVisualisation) => {\n this.definition = definition\n this.columns = definition.columns\n this.unit = this.columns.measures[0].unit ? this.columns.measures[0].unit : undefined\n this.type = this.definition.type.split('-')[0] as ChartType\n\n this.options = <MatrixDashboardVisualisationOptions>definition.options\n this.baseColour = this.options.baseColour || this.baseColour\n this.valueKey = this.columns.measures[1].id\n this.label = this.columns.measures[1].display\n this.onlyBucketColoursDefined = this.options?.buckets?.every(\n (bucket) => !bucket.max && !bucket.min && bucket.hexColour !== undefined,\n )\n }\n\n private initBuckets = () => {\n const { buckets } = this.options\n this.setBucketCount()\n this.initBucketColours()\n if (buckets) {\n if (this.onlyBucketColoursDefined) {\n this.initAutomaticThresholdBucket()\n } else {\n this.initCustomThresholdBuckets()\n }\n } else if (!this.hasRag) this.initAutomaticThresholdBucket()\n }\n\n private initCustomThresholdBuckets = () => {\n this.buckets = this.options.buckets.map((bucket, i) => {\n return {\n ...this.buckets[i],\n ...bucket,\n }\n })\n }\n\n /**\n * Initialises the bucket thresholds by defining the range between the min and max\n * and dividing into 3 equal parts\n */\n private initAutomaticThresholdBucket = () => {\n const { min, max, bucketSize } = this.setAutomaticThresholdSize()\n let maxValue = 0\n this.buckets = this.buckets.map((bucket, i) => {\n let minValue = min\n if (i !== 0) minValue = maxValue + 1\n maxValue = bucketSize * (i + 1)\n if (i === this.buckets.length - 1) maxValue = max\n\n return {\n hexColour: this.options?.buckets ? this.options.buckets[i]?.hexColour : bucket.hexColour,\n min: minValue,\n max: maxValue,\n }\n })\n }\n\n private initBucketColours = () => {\n const { useRagColours } = this.options\n if (useRagColours && this.bucketCount === 3) {\n this.buckets = Array.from(new Array(this.bucketCount)).map((d, i) => {\n return {\n hexColour: this.ragColours[i],\n }\n })\n } else {\n const alphaDivision = 1 / this.bucketCount\n this.buckets = Array.from(new Array(this.bucketCount)).map((d, i) => {\n const division = alphaDivision * (i + 1)\n return {\n hexColour: withAlphaHex(this.baseColour, division),\n }\n })\n }\n }\n\n private setAutomaticThresholdSize = () => {\n const values = this.responseData.map((resData) => Number(resData[this.valueKey].raw))\n const min = Math.min(...values)\n const max = Math.max(...values)\n const bucketSize = Math.ceil((max - min) / this.bucketCount)\n\n return {\n min,\n max,\n bucketSize,\n }\n }\n\n private setBucketCount = () => {\n const { buckets } = this.options\n if (this.hasRag) {\n this.bucketCount =\n Math.max(...this.responseData.map((resData: DashboardDataResponse) => resData[this.valueKey].rag)) + 1\n } else if (buckets) {\n this.bucketCount = buckets.length\n } else {\n this.bucketCount = 3\n }\n }\n\n private validateDefinition = () => {\n const { id, columns, type } = this.definition\n const errors = []\n\n // Validate measures\n if (columns.measures.length !== 2) {\n errors.push(`Measures should only have 2 columns defined. Only found ${columns.measures.length}`)\n } else if (type === DashboardVisualisationType.MATRIX_TIMESERIES) {\n if (columns.measures[0].id !== 'ts') {\n errors.push(`measure at index 0 has incorrect ID. Expected ID to be \"ts\". Found \"${columns.measures[0].id}\"`)\n }\n }\n\n // Throw the error\n if (errors.length) {\n const message = `Validation: Visualisaton definition: ID: ${id}, type: ${type}, errors: ${errors.join(',')}`\n throw new Error(message)\n }\n }\n\n private initTimeseriesData = () => {\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(this.responseData)\n\n this.data = timeBlockData.map((tsData) => {\n const { raw, rag } = tsData[0][this.valueKey]\n const tsRaw = tsData[0].ts.raw\n\n const v = Number(raw)\n const r = rag !== undefined ? Number(tsData[0][this.valueKey].rag) : undefined\n let x\n let y\n\n switch (this.granularity) {\n case 'hourly':\n break\n case 'weekly':\n x = dayjs(tsRaw, this.dayDateFormat).format('ddd')\n y = dayjs(tsRaw, this.dayDateFormat).week()\n break\n case 'daily':\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n case 'monthly':\n {\n const ts = (<string>tsRaw).split(' ')\n x = ts[1]\n y = ts[0]\n }\n break\n case 'annually':\n x = 'year'\n y = <string>tsRaw\n break\n default:\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n }\n return { y, x, v, r }\n })\n }\n\n private binDataIntoBuckets = () => {\n this.data = this.data.map((d) => {\n const { v, r } = d\n let c\n if (r !== undefined) {\n c = this.buckets[r].hexColour\n } else {\n this.buckets.forEach((bucket) => {\n const { min, max } = bucket\n // First bucket\n if (!min && max && v <= max) {\n c = bucket.hexColour\n }\n // middle buckets\n if (min && v >= bucket.min && max && v <= bucket.max) {\n c = bucket.hexColour\n }\n // last bucket\n if (min && !max && v >= min) {\n c = bucket.hexColour\n }\n })\n }\n\n return { ...d, c }\n })\n }\n\n build = (): ChartData => {\n this.validateDefinition()\n this.initTimeseriesData()\n this.binDataIntoBuckets()\n\n return {\n type: this.type,\n unit: this.unit,\n timeseries: true,\n data: {\n datasets: [\n {\n label: this.label,\n data: this.data,\n },\n ],\n },\n }\n }\n}\n\nexport { HeatmapChart }\nexport default HeatmapChart\n"],
5
- "mappings": "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",
6
- "names": ["Heatmap_exports", "__export", "HeatmapChart", "Heatmap_default", "__toCommonJS", "import_dayjs", "import_with_alpha_hex", "import_types", "import_datasetHelper", "responseData", "granularity", "definition", "bucket", "buckets", "min", "max", "bucketSize", "maxValue", "i", "minValue", "useRagColours", "d", "alphaDivision", "division", "values", "resData", "id", "columns", "type", "errors", "message", "timeBlockData", "DatasetHelper", "tsData", "raw", "rag", "tsRaw", "v", "r", "x", "y", "dayjs", "ts", "c"]
7
- }