@epilot/sdk 2.14.5 → 2.15.0
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.
- package/definitions/focus-pocus-runtime.json +1 -0
- package/definitions/focus-pocus.json +757 -0
- package/definitions/message.json +20 -0
- package/definitions/metering-runtime.json +1 -1
- package/definitions/metering.json +134 -7
- package/dist/apis/access-token.cjs +6 -6
- package/dist/apis/access-token.js +1 -1
- package/dist/apis/address-suggestions.cjs +6 -6
- package/dist/apis/address-suggestions.js +1 -1
- package/dist/apis/address.cjs +6 -6
- package/dist/apis/address.js +1 -1
- package/dist/apis/ai-agents.cjs +6 -6
- package/dist/apis/ai-agents.js +1 -1
- package/dist/apis/app.cjs +6 -6
- package/dist/apis/app.js +1 -1
- package/dist/apis/audit-logs.cjs +6 -6
- package/dist/apis/audit-logs.js +1 -1
- package/dist/apis/automation.cjs +6 -6
- package/dist/apis/automation.js +1 -1
- package/dist/apis/billing.cjs +6 -6
- package/dist/apis/billing.js +1 -1
- package/dist/apis/blueprint-manifest.cjs +6 -6
- package/dist/apis/blueprint-manifest.js +1 -1
- package/dist/apis/calendar.cjs +6 -6
- package/dist/apis/calendar.js +1 -1
- package/dist/apis/configuration-hub.cjs +6 -6
- package/dist/apis/configuration-hub.js +1 -1
- package/dist/apis/consent.cjs +6 -6
- package/dist/apis/consent.js +1 -1
- package/dist/apis/customer-portal.cjs +6 -6
- package/dist/apis/customer-portal.js +1 -1
- package/dist/apis/dashboard.cjs +6 -6
- package/dist/apis/dashboard.js +1 -1
- package/dist/apis/data-governance.cjs +6 -6
- package/dist/apis/data-governance.js +1 -1
- package/dist/apis/deduplication.cjs +6 -6
- package/dist/apis/deduplication.js +1 -1
- package/dist/apis/design.cjs +6 -6
- package/dist/apis/design.js +1 -1
- package/dist/apis/document.cjs +6 -6
- package/dist/apis/document.js +1 -1
- package/dist/apis/email-settings.cjs +6 -6
- package/dist/apis/email-settings.js +1 -1
- package/dist/apis/email-template.cjs +6 -6
- package/dist/apis/email-template.js +1 -1
- package/dist/apis/entity-mapping.cjs +6 -6
- package/dist/apis/entity-mapping.js +1 -1
- package/dist/apis/entity.cjs +6 -6
- package/dist/apis/entity.js +1 -1
- package/dist/apis/environments.cjs +6 -6
- package/dist/apis/environments.js +1 -1
- package/dist/apis/event-catalog.cjs +6 -6
- package/dist/apis/event-catalog.js +1 -1
- package/dist/apis/file.cjs +6 -6
- package/dist/apis/file.js +1 -1
- package/dist/apis/iban.cjs +6 -6
- package/dist/apis/iban.js +1 -1
- package/dist/apis/integration-toolkit.cjs +6 -6
- package/dist/apis/integration-toolkit.js +1 -1
- package/dist/apis/journey.cjs +6 -6
- package/dist/apis/journey.js +1 -1
- package/dist/apis/kanban.cjs +6 -6
- package/dist/apis/kanban.js +1 -1
- package/dist/apis/message.cjs +6 -6
- package/dist/apis/message.d.cts +2 -2
- package/dist/apis/message.d.ts +2 -2
- package/dist/apis/message.js +1 -1
- package/dist/apis/metering.cjs +8 -8
- package/dist/apis/metering.d.cts +2 -2
- package/dist/apis/metering.d.ts +2 -2
- package/dist/apis/metering.js +2 -2
- package/dist/apis/notes.cjs +6 -6
- package/dist/apis/notes.js +1 -1
- package/dist/apis/notification.cjs +6 -6
- package/dist/apis/notification.js +1 -1
- package/dist/apis/organization.cjs +6 -6
- package/dist/apis/organization.js +1 -1
- package/dist/apis/partner-directory.cjs +6 -6
- package/dist/apis/partner-directory.js +1 -1
- package/dist/apis/permissions.cjs +6 -6
- package/dist/apis/permissions.js +1 -1
- package/dist/apis/pricing-tier.cjs +6 -6
- package/dist/apis/pricing-tier.js +1 -1
- package/dist/apis/pricing.cjs +6 -6
- package/dist/apis/pricing.js +1 -1
- package/dist/apis/purpose.cjs +6 -6
- package/dist/apis/purpose.js +1 -1
- package/dist/apis/query.cjs +6 -6
- package/dist/apis/query.js +1 -1
- package/dist/apis/sandbox.cjs +6 -6
- package/dist/apis/sandbox.js +1 -1
- package/dist/apis/sharing.cjs +6 -6
- package/dist/apis/sharing.js +1 -1
- package/dist/apis/snapshot.cjs +6 -6
- package/dist/apis/snapshot.js +1 -1
- package/dist/apis/submission.cjs +6 -6
- package/dist/apis/submission.js +1 -1
- package/dist/apis/target.cjs +6 -6
- package/dist/apis/target.js +1 -1
- package/dist/apis/targeting.cjs +6 -6
- package/dist/apis/targeting.js +1 -1
- package/dist/apis/template-variables.cjs +6 -6
- package/dist/apis/template-variables.js +1 -1
- package/dist/apis/user.cjs +6 -6
- package/dist/apis/user.js +1 -1
- package/dist/apis/validation-rules.cjs +6 -6
- package/dist/apis/validation-rules.js +1 -1
- package/dist/apis/webhooks.cjs +6 -6
- package/dist/apis/webhooks.js +1 -1
- package/dist/apis/workflow-definition.cjs +6 -6
- package/dist/apis/workflow-definition.js +1 -1
- package/dist/apis/workflow.cjs +6 -6
- package/dist/apis/workflow.js +1 -1
- package/dist/{chunk-CD4J6HXV.cjs → chunk-C4HXUTOU.cjs} +3 -3
- package/dist/{chunk-62BXSTL6.js → chunk-GB3RZYS2.js} +3 -3
- package/dist/chunk-LE4OZS7T.js +14 -0
- package/dist/chunk-XNC4FWS2.cjs +14 -0
- package/dist/index.cjs +10 -10
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/js-yaml-DLCVPJ7G.js +0 -0
- package/dist/message-F4HJQBF5.cjs +7 -0
- package/dist/message-TLEET26B.js +7 -0
- package/dist/{message.d-VMmPsZVq.d.cts → message.d-b-UwZUNb.d.cts} +3 -0
- package/dist/{message.d-VMmPsZVq.d.ts → message.d-b-UwZUNb.d.ts} +3 -0
- package/dist/metering-COO4BTOC.js +7 -0
- package/dist/metering-FJI2AU7Q.cjs +7 -0
- package/dist/{metering-runtime-7DPUSUYS.js → metering-runtime-HQ5F6R5M.js} +1 -1
- package/dist/{metering-runtime-VXOK3WJZ.cjs → metering-runtime-LSBYAJ6Z.cjs} +2 -2
- package/dist/{metering.d-DoC7rUbS.d.cts → metering.d-DomHYl06.d.cts} +133 -10
- package/dist/{metering.d-DoC7rUbS.d.ts → metering.d-DomHYl06.d.ts} +133 -10
- package/docs/message.md +2 -0
- package/docs/metering.md +73 -21
- package/package.json +12 -11
- package/dist/chunk-2KZBLHTS.cjs +0 -14
- package/dist/chunk-K2F255B3.js +0 -14
- package/dist/message-663RPFCZ.js +0 -7
- package/dist/message-CEJ6VDZ6.cjs +0 -7
- package/dist/metering-3K36TQ5Z.cjs +0 -7
- package/dist/metering-7T6NJRHT.js +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NJK5F5TF.cjs');
|
|
2
|
+
|
|
3
|
+
// src/docs/metering.json
|
|
4
|
+
var metering_default = '# Metering API\n\n- **Base URL:** `https://metering.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/metering](https://docs.epilot.io/api/metering)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.metering.getCustomerMeters(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/metering\'\n\nconst meteringClient = getClient()\nauthorize(meteringClient, () => \'<token>\')\nconst { data } = await meteringClient.getCustomerMeters(...)\n```\n\n## Operations\n\n**ECP**\n- [`getCustomerMeters`](#getcustomermeters)\n- [`getMetersByContractId`](#getmetersbycontractid)\n- [`updateMeter`](#updatemeter)\n- [`getMeter`](#getmeter)\n- [`getMeterCounters`](#getmetercounters)\n- [`getCounterDetails`](#getcounterdetails)\n- [`createPortalMeterReadings`](#createportalmeterreadings)\n\n**ECP Admin**\n- [`createMeterReading`](#createmeterreading)\n- [`createMeterReadings`](#createmeterreadings)\n- [`batchWriteMeterReadings`](#batchwritemeterreadings)\n- [`pruneMeterReadings`](#prunemeterreadings)\n- [`createMeterReadingFromSubmission`](#createmeterreadingfromsubmission)\n- [`getAllowedReadingForMeter`](#getallowedreadingformeter)\n- [`createReadingWithMeter`](#createreadingwithmeter)\n- [`getReadingsByInterval`](#getreadingsbyinterval)\n- [`updateMeterReading`](#updatemeterreading)\n- [`deleteMeterReading`](#deletemeterreading)\n\n**Metering**\n- [`getReadingChangesets`](#getreadingchangesets)\n- [`applyReadingChangeset`](#applyreadingchangeset)\n- [`dismissReadingChangeset`](#dismissreadingchangeset)\n- [`updateReadingChangeset`](#updatereadingchangeset)\n\n**Schemas**\n- [`ErrorResp`](#errorresp)\n- [`EntityId`](#entityid)\n- [`EntitySlug`](#entityslug)\n- [`BaseEntity`](#baseentity)\n- [`Entity`](#entity)\n- [`EntityItem`](#entityitem)\n- [`Id`](#id)\n- [`EntityRelation`](#entityrelation)\n- [`Meter`](#meter)\n- [`Direction`](#direction)\n- [`TariffType`](#tarifftype)\n- [`Reason`](#reason)\n- [`ReasonString`](#reasonstring)\n- [`ReadBy`](#readby)\n- [`ReadingStatus`](#readingstatus)\n- [`Reading`](#reading)\n- [`MeterReading`](#meterreading)\n- [`PortalMeterReading`](#portalmeterreading)\n- [`BatchReadingBase`](#batchreadingbase)\n- [`CreateOrUpdateBatchReading`](#createorupdatebatchreading)\n- [`DeleteBatchReading`](#deletebatchreading)\n- [`BatchReading`](#batchreading)\n- [`PruneMeterReadingsPayload`](#prunemeterreadingspayload)\n- [`UpdateMeterReading`](#updatemeterreading)\n- [`MeterCounter`](#metercounter)\n- [`CounterReadingOnSubmission`](#counterreadingonsubmission)\n- [`SubmissionMeterReading`](#submissionmeterreading)\n- [`Unit`](#unit)\n- [`Source`](#source)\n- [`ActionLabel`](#actionlabel)\n- [`Rule`](#rule)\n- [`JourneyActions`](#journeyactions)\n- [`ReadingWithMeter`](#readingwithmeter)\n- [`MeterReadingChangeset`](#meterreadingchangeset)\n- [`FuzzyConfig`](#fuzzyconfig)\n- [`ProposedReading`](#proposedreading)\n- [`ChangesetCreator`](#changesetcreator)\n- [`TimestampTolerance`](#timestamptolerance)\n- [`ActivityId`](#activityid)\n\n### `getCustomerMeters`\n\nRetrieves all meters associated with the authenticated portal customer.\n\n`GET /v1/metering/meter`\n\n```ts\nconst { data } = await client.getCustomerMeters({\n include_pending_changesets: true,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": [\n {\n "_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_title": "Example Entity",\n "_org": "123",\n "_tags": ["example", "mock"],\n "_created_at": "2021-02-09T12:41:43.662Z",\n "_updated_at": "2021-02-09T12:41:43.662Z",\n "_schema": "meter",\n "ma_lo_id": "A09-123",\n "status": "active",\n "meter_type": "three-phase-meter",\n "tariff_type": "Peak load tariff",\n "meter_number": "J-1093-1AK",\n "sector": "power",\n "location": [\n {\n "country": "Germany",\n "city": "Koln",\n "postal_code": 81475,\n "street": "Melateng\xFCrtel",\n "street_number": 71,\n "additional_info": "5. Etage",\n "_tags": ["billing", "delivery"]\n }\n ],\n "used_for": "Domestic Usage",\n "manufacturer": "Energy One",\n "calibration_date": "2022-10-10",\n "contract": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n },\n "customer": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n },\n "journey_actions": {\n "journey_id": "string",\n "action_label": {\n "en": "string",\n "de": "string"\n },\n "slug": "string",\n "rules": [\n {\n "entity": "string",\n "attribute": "string",\n "attribute_value": "string"\n }\n ]\n },\n "last_reading": "2022-10-10",\n "current_consumption": 100.5\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getMetersByContractId`\n\nRetrieves all meters associated with a given contract entity.\n\n`GET /v1/metering/contract/meters/{contract_id}`\n\n```ts\nconst { data } = await client.getMetersByContractId({\n contract_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": [\n {\n "_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_title": "Example Entity",\n "_org": "123",\n "_tags": ["example", "mock"],\n "_created_at": "2021-02-09T12:41:43.662Z",\n "_updated_at": "2021-02-09T12:41:43.662Z",\n "_schema": "meter",\n "ma_lo_id": "A09-123",\n "status": "active",\n "meter_type": "three-phase-meter",\n "tariff_type": "Peak load tariff",\n "meter_number": "J-1093-1AK",\n "sector": "power",\n "location": [\n {\n "country": "Germany",\n "city": "Koln",\n "postal_code": 81475,\n "street": "Melateng\xFCrtel",\n "street_number": 71,\n "additional_info": "5. Etage",\n "_tags": ["billing", "delivery"]\n }\n ],\n "used_for": "Domestic Usage",\n "manufacturer": "Energy One",\n "calibration_date": "2022-10-10",\n "contract": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n },\n "customer": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n }\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `updateMeter`\n\nPartially updates the details of a meter entity by ID.\n\n`PATCH /v1/metering/meter/{id}`\n\n```ts\nconst { data } = await client.updateMeter(\n {\n id: \'123e4567-e89b-12d3-a456-426614174000\',\n },\n {},\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_title": "Example Entity",\n "_org": "123",\n "_tags": ["example", "mock"],\n "_created_at": "2021-02-09T12:41:43.662Z",\n "_updated_at": "2021-02-09T12:41:43.662Z",\n "_schema": "meter",\n "ma_lo_id": "A09-123",\n "status": "active",\n "meter_type": "three-phase-meter",\n "tariff_type": "Peak load tariff",\n "meter_number": "J-1093-1AK",\n "sector": "power",\n "location": [\n {\n "country": "Germany",\n "city": "Koln",\n "postal_code": 81475,\n "street": "Melateng\xFCrtel",\n "street_number": 71,\n "additional_info": "5. Etage",\n "_tags": ["billing", "delivery"]\n }\n ],\n "used_for": "Domestic Usage",\n "manufacturer": "Energy One",\n "calibration_date": "2022-10-10",\n "contract": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n },\n "customer": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `getMeter`\n\nRetrieves the full details of a specific meter by ID, including related entities and available journey actions.\n\n`GET /v1/metering/meter/{id}`\n\n```ts\nconst { data } = await client.getMeter({\n id: \'123e4567-e89b-12d3-a456-426614174000\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "entity": {\n "_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_title": "Example Entity",\n "_org": "123",\n "_tags": ["example", "mock"],\n "_created_at": "2021-02-09T12:41:43.662Z",\n "_updated_at": "2021-02-09T12:41:43.662Z",\n "_schema": "meter",\n "ma_lo_id": "A09-123",\n "status": "active",\n "meter_type": "three-phase-meter",\n "tariff_type": "Peak load tariff",\n "meter_number": "J-1093-1AK",\n "sector": "power",\n "location": [\n {\n "country": "Germany",\n "city": "Koln",\n "postal_code": 81475,\n "street": "Melateng\xFCrtel",\n "street_number": 71,\n "additional_info": "5. Etage",\n "_tags": ["billing", "delivery"]\n }\n ],\n "used_for": "Domestic Usage",\n "manufacturer": "Energy One",\n "calibration_date": "2022-10-10",\n "contract": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n },\n "customer": {\n "$relation": [\n {\n "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_slug": "contact"\n }\n ]\n }\n },\n "journey_actions": {\n "journey_id": "string",\n "action_label": {\n "en": "string",\n "de": "string"\n },\n "slug": "string",\n "rules": [\n {\n "entity": "string",\n "attribute": "string",\n "attribute_value": "string"\n }\n ]\n },\n "relations": [\n {\n "_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_title": "Example Entity",\n "_org": "123",\n "_tags": ["example", "mock"],\n "_created_at": "2021-02-09T12:41:43.662Z",\n "_updated_at": "2021-02-09T12:41:43.662Z"\n }\n ]\n }\n}\n```\n\n</details>\n\n---\n\n### `getMeterCounters`\n\nRetrieves all meter counters associated with a given meter.\n\n`GET /v1/metering/counter`\n\n```ts\nconst { data } = await client.getMeterCounters({\n meter_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": [\n {\n "_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_title": "Example Entity",\n "_org": "123",\n "_tags": ["example", "mock"],\n "_created_at": "2021-02-09T12:41:43.662Z",\n "_updated_at": "2021-02-09T12:41:43.662Z",\n "_schema": "meter_counter",\n "obis_number": "A-34",\n "direction": "feed-in",\n "transformer_ratio": 70,\n "unit": "string",\n "forecast_reading_value": 270,\n "forecast_as_of": "2022-12-10",\n "current_consumption": 240,\n "last_reading": "2022-10-10",\n "conversion_factor": 3,\n "tariff_type": "ht"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getCounterDetails`\n\nRetrieves the full details of a single meter counter by its ID.\n\n`GET /v1/metering/counter/{counter_id}`\n\n```ts\nconst { data } = await client.getCounterDetails({\n counter_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "_title": "Example Entity",\n "_org": "123",\n "_tags": ["example", "mock"],\n "_created_at": "2021-02-09T12:41:43.662Z",\n "_updated_at": "2021-02-09T12:41:43.662Z",\n "_schema": "meter_counter",\n "obis_number": "A-34",\n "direction": "feed-in",\n "transformer_ratio": 70,\n "unit": "string",\n "forecast_reading_value": 270,\n "forecast_as_of": "2022-12-10",\n "current_consumption": 240,\n "last_reading": "2022-10-10",\n "conversion_factor": 3,\n "tariff_type": "ht"\n }\n}\n```\n\n</details>\n\n---\n\n### `createMeterReading`\n\nInserts a new meter reading.\n\n`POST /v1/metering/reading`\n\n```ts\nconst { data } = await client.createMeterReading(\n {\n direct: true,\n },\n {\n value: 240,\n read_by: \'John Doe\',\n reason: \'\',\n meter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n counter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n direction: \'feed-in\',\n timestamp: \'2022-10-10\',\n source: \'ECP\',\n status: \'valid\',\n external_id: \'string\',\n remark: \'Customer reported unusual consumption\',\n metadata: {\n registration_id: \'1234567890\',\n business_unit: \'ABC\'\n },\n note: \'string\',\n unit: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `createMeterReadings`\n\nInserts multiple meter readings at once. Limited to 100 readings per request.\n\n`POST /v1/metering/readings`\n\n```ts\nconst { data } = await client.createMeterReadings(\n {\n async: true,\n activity_id: \'example\',\n skip_validation: true,\n direct: true,\n create_ticket: true,\n },\n {\n readings: [\n {\n value: 240,\n read_by: \'John Doe\',\n reason: \'\',\n meter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n counter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n direction: \'feed-in\',\n timestamp: \'2022-10-10\',\n source: \'ECP\',\n status: \'valid\',\n external_id: \'string\',\n remark: \'Customer reported unusual consumption\',\n metadata: {\n registration_id: \'1234567890\',\n business_unit: \'ABC\'\n },\n note: \'string\',\n unit: \'string\'\n }\n ]\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": [\n {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `createPortalMeterReadings`\n\nInserts multiple meter readings at once for a given meter via the end customer portal.\nLimited to 100 readings per request.\n\n`POST /v1/metering/readings/{meter_id}`\n\n```ts\nconst { data } = await client.createPortalMeterReadings(\n {\n meter_id: \'example\',\n direct: true,\n },\n {\n readings: [\n {\n value: 240,\n read_by: \'John Doe\',\n reason: \'\',\n meter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n counter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n direction: \'feed-in\',\n timestamp: \'2022-10-10\',\n source: \'ECP\',\n status: \'valid\',\n external_id: \'string\',\n remark: \'Customer reported unusual consumption\',\n metadata: {\n registration_id: \'1234567890\',\n business_unit: \'ABC\'\n },\n note: \'string\',\n unit: \'string\'\n }\n ]\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": [\n {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `batchWriteMeterReadings`\n\nUpserts or deletes multiple meter readings at once. Limited to 100 readings per request.\n\n`POST /v2/metering/readings`\n\n```ts\nconst { data } = await client.batchWriteMeterReadings(\n {\n async: true,\n skip_validation: true,\n activity_id: \'example\',\n direct: true,\n create_ticket: true,\n },\n {\n identifiers: [\'string\'],\n readings: [\n {\n meter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n counter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n direction: \'feed-in\',\n timestamp: \'2022-10-10T10:00:00Z\',\n external_id: \'string\',\n metadata: {\n registration_id: \'1234567890\',\n business_unit: \'ABC\'\n },\n operation: \'create\',\n value: 240,\n source: \'ECP\',\n read_by: \'John Doe\',\n reason: \'\',\n status: \'valid\',\n remark: \'Customer reported unusual consumption\',\n note: \'string\',\n unit: \'string\'\n }\n ]\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": [\n {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `pruneMeterReadings`\n\nDeletes every reading of a meter whose `external_id` is NOT in the provided keep list \u2014 in a single request.\n\n`POST /v2/metering/readings/prune`\n\n```ts\nconst { data } = await client.pruneMeterReadings(\n {\n async: true,\n activity_id: \'example\',\n create_ticket: true,\n dry_run: true,\n },\n {\n meter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n counter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n source: \'ECP\',\n keep_external_ids: [\'erp-reading-1\', \'erp-reading-2\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "deleted_count": 42,\n "kept_count": 12\n }\n}\n```\n\n</details>\n\n---\n\n### `createMeterReadingFromSubmission`\n\nCreates meter readings from a journey submission payload.\n\n`POST /v1/metering/reading/submission`\n\n```ts\nconst { data } = await client.createMeterReadingFromSubmission(\n null,\n {\n org_id: \'123\',\n entity: {\n _org: \'123\',\n meterReadings: [\n {\n meterId: \'string\',\n readings: [\n {\n counterId: \'string\',\n direction: \'feed-in\',\n unit: \'string\',\n value: 240\n }\n ],\n readingValue: 240,\n readingDate: \'2022-10-10T10:10:00.000Z\',\n readBy: \'John Doe\',\n reason: \'\',\n maloId: \'A09-123\',\n obisNumber: \'A-34\',\n readingUnit: \'string\',\n meterType: \'one_tariff\',\n feedInValue: 240,\n feedOutValue: 240,\n htValue: 240,\n ntValue: 240\n }\n ]\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "message": "Successfully Processed"\n}\n```\n\n</details>\n\n---\n\n### `getAllowedReadingForMeter`\n\nReturns the allowed min/max reading range for each counter of the given meter.\n\n`GET /v1/metering/allowed/reading/{meter_id}`\n\n```ts\nconst { data } = await client.getAllowedReadingForMeter({\n meter_id: \'example\',\n timestamp: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": [\n {\n "counter_id": "string",\n "min_value": 0,\n "max_value": 0\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `createReadingWithMeter`\n\nCreates a meter reading along with meter lookup or creation by MA-LO ID and OBIS number.\n\n`POST /v1/metering/reading/with-meter`\n\n```ts\nconst { data } = await client.createReadingWithMeter(\n null,\n {\n ma_lo_id: \'A09-123\',\n meter_id: \'string\',\n obis_number: \'A-34\',\n unit: \'string\',\n direction: \'feed-in\',\n tariff_type: \'ht\',\n value: 240,\n read_by: \'John Doe\',\n reason: \'\',\n timestamp: \'2022-10-10T10:10:00.000Z\',\n source: \'ECP\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `getReadingsByInterval`\n\nRetrieves all readings specified in an interval.\nIf the start_date and end_date are equal, then it returns the readings of the specified date.\nThe start_date should be less than or equal to the end_da\n\n`GET /v1/metering/reading/{meter_id}/{counter_id}`\n\n```ts\nconst { data } = await client.getReadingsByInterval({\n meter_id: \'example\',\n counter_id: \'example\',\n start_date: \'example\',\n end_date: \'example\',\n direction: \'example\',\n size: 1,\n from: 1,\n type: \'example\',\n sort: \'example\',\n include_pending_changesets: true,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n }\n ],\n "hits": 120,\n "firstRecordCreatedAt": "2022-10-01T20:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateMeterReading`\n\nUpdates an existing meter reading identified by meter ID, counter ID, and timestamp.\n\n`PUT /v1/metering/reading/{meter_id}/{counter_id}`\n\n```ts\nconst { data } = await client.updateMeterReading(\n {\n meter_id: \'example\',\n counter_id: \'example\',\n timestamp: \'example\',\n },\n {\n value: 240,\n read_by: \'John Doe\',\n reason: \'string\',\n meter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n counter_id: \'3fa85f64-5717-4562-b3fc-2c963f66afa6\',\n direction: \'feed-in\',\n timestamp: \'2022-10-10\',\n source: \'ECP\',\n status: \'valid\',\n external_id: \'string\',\n remark: \'Customer reported unusual consumption\',\n metadata: {\n registration_id: \'1234567890\',\n business_unit: \'ABC\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `deleteMeterReading`\n\nPermanently deletes a meter reading identified by meter ID, counter ID, and timestamp.\n\n`DELETE /v1/metering/reading/{meter_id}/{counter_id}`\n\n```ts\nconst { data } = await client.deleteMeterReading({\n meter_id: \'example\',\n counter_id: \'example\',\n timestamp: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "data": {\n "meterId": "string",\n "counterId": "string",\n "timestamp": "2022-10-01T20:00:00.000Z"\n }\n}\n```\n\n</details>\n\n---\n\n### `getReadingChangesets`\n\nList pending reading changesets for a counter\n\n`GET /v1/metering/reading/{meter_id}/{counter_id}/changesets`\n\n```ts\nconst { data } = await client.getReadingChangesets({\n meter_id: \'example\',\n counter_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "changesets": [\n {\n "changeset_id": "string",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "proposed": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "previous": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "edit_mode": "external",\n "match_strategy": "exact",\n "timestamp_tolerance": "exact",\n "created_at": "1970-01-01T00:00:00.000Z",\n "created_by": {\n "type": "user",\n "id": "string"\n },\n "source": "360",\n "fuzzy_config": {\n "percentage_threshold": 0.01,\n "absolute_threshold": 0\n },\n "dismissed_reason": "string",\n "dismissed_at": "1970-01-01T00:00:00.000Z"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `applyReadingChangeset`\n\nApply (approve) a pending reading changeset\n\n`POST /v1/metering/reading/{meter_id}/{counter_id}/changesets/{changeset_id}:apply`\n\n```ts\nconst { data } = await client.applyReadingChangeset({\n meter_id: \'example\',\n counter_id: \'example\',\n changeset_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "reading": {\n "value": 240,\n "read_by": "John Doe",\n "reason": "",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "direction": "feed-in",\n "timestamp": "2022-10-10",\n "source": "ECP",\n "status": "valid",\n "external_id": "string",\n "remark": "Customer reported unusual consumption",\n "metadata": {\n "registration_id": "1234567890",\n "business_unit": "ABC"\n },\n "note": "string",\n "unit": "string"\n },\n "changeset": {\n "changeset_id": "string",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "proposed": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "previous": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "edit_mode": "external",\n "match_strategy": "exact",\n "timestamp_tolerance": "exact",\n "created_at": "1970-01-01T00:00:00.000Z",\n "created_by": {\n "type": "user",\n "id": "string"\n },\n "source": "360",\n "fuzzy_config": {\n "percentage_threshold": 0.01,\n "absolute_threshold": 0\n },\n "dismissed_reason": "string",\n "dismissed_at": "1970-01-01T00:00:00.000Z"\n }\n}\n```\n\n</details>\n\n---\n\n### `dismissReadingChangeset`\n\nDismiss (reject) a pending reading changeset\n\n`POST /v1/metering/reading/{meter_id}/{counter_id}/changesets/{changeset_id}:dismiss`\n\n```ts\nconst { data } = await client.dismissReadingChangeset(\n {\n meter_id: \'example\',\n counter_id: \'example\',\n changeset_id: \'example\',\n },\n {\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "changeset_id": "string",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "proposed": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "previous": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "edit_mode": "external",\n "match_strategy": "exact",\n "timestamp_tolerance": "exact",\n "created_at": "1970-01-01T00:00:00.000Z",\n "created_by": {\n "type": "user",\n "id": "string"\n },\n "source": "360",\n "fuzzy_config": {\n "percentage_threshold": 0.01,\n "absolute_threshold": 0\n },\n "dismissed_reason": "string",\n "dismissed_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateReadingChangeset`\n\nEdit a pending reading changeset\n\n`PATCH /v1/metering/reading/{meter_id}/{counter_id}/changesets/{changeset_id}`\n\n```ts\nconst { data } = await client.updateReadingChangeset(\n {\n meter_id: \'example\',\n counter_id: \'example\',\n changeset_id: \'example\',\n },\n {\n proposed: {\n value: 0,\n direction: \'feed-in\',\n timestamp: \'1970-01-01T00:00:00.000Z\',\n reason: \'string\',\n remark: \'string\',\n read_by: \'string\',\n status: \'valid\',\n external_id: \'string\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "changeset_id": "string",\n "meter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "counter_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "proposed": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "previous": {\n "value": 0,\n "direction": "feed-in",\n "timestamp": "1970-01-01T00:00:00.000Z",\n "reason": "string",\n "remark": "string",\n "read_by": "string",\n "status": "valid",\n "external_id": "string"\n },\n "edit_mode": "external",\n "match_strategy": "exact",\n "timestamp_tolerance": "exact",\n "created_at": "1970-01-01T00:00:00.000Z",\n "created_by": {\n "type": "user",\n "id": "string"\n },\n "source": "360",\n "fuzzy_config": {\n "percentage_threshold": 0.01,\n "absolute_threshold": 0\n },\n "dismissed_reason": "string",\n "dismissed_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n## Schemas\n\n### `ErrorResp`\n\n```ts\ntype ErrorResp = {\n message?: string\n}\n```\n\n### `EntityId`\n\n```ts\ntype EntityId = string // uuid\n```\n\n### `EntitySlug`\n\nURL-friendly identifier for the entity schema\n\n```ts\ntype EntitySlug = string\n```\n\n### `BaseEntity`\n\n```ts\ntype BaseEntity = {\n _id: string // uuid\n _title: string\n _org: string\n _tags?: string[]\n _created_at: string // date-time\n _updated_at: string // date-time\n}\n```\n\n### `Entity`\n\n```ts\ntype Entity = Record<string, unknown>\n```\n\n### `EntityItem`\n\n```ts\ntype EntityItem = {\n _id: string // uuid\n _title: string\n _org: string\n _tags?: string[]\n _created_at: string // date-time\n _updated_at: string // date-time\n}\n```\n\n### `Id`\n\n```ts\ntype Id = string\n```\n\n### `EntityRelation`\n\n```ts\ntype EntityRelation = {\n entity_id?: string // uuid\n _slug?: "contact" | "contract"\n}\n```\n\n### `Meter`\n\n```ts\ntype Meter = {\n _id: string // uuid\n _title: string\n _org: string\n _tags?: string[]\n _created_at: string // date-time\n _updated_at: string // date-time\n _schema: "meter"\n ma_lo_id?: string\n status?: "active" | "decommissioned"\n meter_type?: "three-phase-meter" | "bellow-gas-meter" | "rotary-piston-meter" | "smart-meter" | "performance-meter" | "maximum-meter" | "turbine-gas-meter" | "ultrasonic-gas-meter" | "alternating-current-meter" | "modern-metering-system" | "intelligent-measuring-system" | "electronic-meter"\n tariff_type?: string\n meter_number?: string\n sector?: "power" | "water" | "gas" | "district_heating" | "waste_water"\n location?: object\n used_for?: string\n manufacturer?: string\n calibration_date?: string\n contract?: {\n $relation?: Array<{\n entity_id?: { ... }\n _slug?: { ... }\n }>\n }\n customer?: {\n $relation?: Array<{\n entity_id?: { ... }\n _slug?: { ... }\n }>\n }\n}\n```\n\n### `Direction`\n\n```ts\ntype Direction = "feed-in" | "feed-out"\n```\n\n### `TariffType`\n\n```ts\ntype TariffType = "ht" | "nt"\n```\n\n### `Reason`\n\nThe reason for recording the reading\nIf no reason is specified or left empty, the Epilot UI will show \'Regular\' as the default display text\n\n\n```ts\ntype Reason = "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n```\n\n### `ReasonString`\n\nThis field is deprecated. Please use the Reason enum instead.\n\n\n```ts\ntype ReasonString = string\n```\n\n### `ReadBy`\n\nThe person who recorded the reading\n\n```ts\ntype ReadBy = string\n```\n\n### `ReadingStatus`\n\n```ts\ntype ReadingStatus = "valid" | "in-validation" | "implausible" | null | ""\n```\n\n### `Reading`\n\n```ts\ntype Reading = {\n value: number\n read_by?: string\n reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n meter_id?: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n source: "ECP" | "ERP" | "360" | "journey-submission"\n status?: "valid" | "in-validation" | "implausible" | null | ""\n external_id?: string\n remark?: string\n metadata?: Record<string, string>\n note?: string\n unit?: string\n}\n```\n\n### `MeterReading`\n\n```ts\ntype MeterReading = {\n value: number\n read_by?: string\n reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n meter_id: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n source: "ECP" | "ERP" | "360" | "journey-submission"\n status?: "valid" | "in-validation" | "implausible" | null | ""\n external_id?: string\n remark?: string\n metadata?: Record<string, string>\n note?: string\n unit?: string\n}\n```\n\n### `PortalMeterReading`\n\n```ts\ntype PortalMeterReading = {\n value: number\n read_by?: string\n reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n meter_id?: string // uuid\n counter_id: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n source: "ECP" | "ERP" | "360" | "journey-submission"\n status?: "valid" | "in-validation" | "implausible" | null | ""\n external_id?: string\n remark?: string\n metadata?: Record<string, string>\n note?: string\n unit?: string\n}\n```\n\n### `BatchReadingBase`\n\nBase properties shared by all batch reading operations\n\n```ts\ntype BatchReadingBase = {\n meter_id?: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n external_id?: string\n metadata?: Record<string, string>\n}\n```\n\n### `CreateOrUpdateBatchReading`\n\nSchema for create or update operations - requires value, source, and meter_id\n\n```ts\ntype CreateOrUpdateBatchReading = {\n meter_id: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n external_id?: string\n metadata?: Record<string, string>\n operation?: "create" | "update"\n value: number\n source: "ECP" | "ERP" | "360" | "journey-submission"\n read_by?: string\n reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n status?: "valid" | "in-validation" | "implausible" | null | ""\n remark?: string\n note?: string\n unit?: string\n}\n```\n\n### `DeleteBatchReading`\n\nSchema for delete operations - only requires identifier fields specified in the identifiers parameter\n\n```ts\ntype DeleteBatchReading = {\n meter_id?: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n external_id?: string\n metadata?: Record<string, string>\n operation: "delete"\n}\n```\n\n### `BatchReading`\n\nA meter reading for batch operations. The required fields depend on the operation:\n- create/update: requires value, source, and meter_id\n- delete: only requires the fields specified in the identifiers parameter\n\n\n```ts\ntype BatchReading = {\n meter_id: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n external_id?: string\n metadata?: Record<string, string>\n operation?: "create" | "update"\n value: number\n source: "ECP" | "ERP" | "360" | "journey-submission"\n read_by?: string\n reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n status?: "valid" | "in-validation" | "implausible" | null | ""\n remark?: string\n note?: string\n unit?: string\n} | {\n meter_id?: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n external_id?: string\n metadata?: Record<string, string>\n operation: "delete"\n}\n```\n\n### `PruneMeterReadingsPayload`\n\n```ts\ntype PruneMeterReadingsPayload = {\n meter_id: string // uuid\n counter_id?: string // uuid\n source?: "ECP" | "ERP" | "360" | "journey-submission"\n keep_external_ids: string[]\n}\n```\n\n### `UpdateMeterReading`\n\n```ts\ntype UpdateMeterReading = {\n value: number\n read_by?: string\n reason?: string\n meter_id: string // uuid\n counter_id?: string // uuid\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n source: "ECP" | "ERP" | "360" | "journey-submission"\n status?: "valid" | "in-validation" | "implausible" | null | ""\n external_id?: string\n remark?: string\n metadata?: Record<string, string>\n}\n```\n\n### `MeterCounter`\n\n```ts\ntype MeterCounter = {\n _id: string // uuid\n _title: string\n _org: string\n _tags?: string[]\n _created_at: string // date-time\n _updated_at: string // date-time\n _schema: "meter_counter"\n obis_number?: string\n direction?: "feed-in" | "feed-out"\n transformer_ratio?: number\n unit?: string\n forecast_reading_value?: string\n forecast_as_of?: string\n current_consumption?: number\n last_reading?: string\n conversion_factor?: number\n tariff_type?: "ht" | "nt"\n}\n```\n\n### `CounterReadingOnSubmission`\n\n```ts\ntype CounterReadingOnSubmission = {\n counterId: string\n direction: "feed-in" | "feed-out"\n unit?: string\n value: number\n}\n```\n\n### `SubmissionMeterReading`\n\n```ts\ntype SubmissionMeterReading = {\n meterId: string\n readings?: Array<{\n counterId: string\n direction: "feed-in" | "feed-out"\n unit?: string\n value: number\n }>\n readingValue?: number\n readingDate?: string\n readBy?: string\n reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n maloId?: string\n obisNumber?: string\n readingUnit?: string\n meterType?: "one_tariff" | "two_tariff" | "bi_directional"\n feedInValue?: number\n feedOutValue?: number\n htValue?: number\n ntValue?: number\n}\n```\n\n### `Unit`\n\n```ts\ntype Unit = string\n```\n\n### `Source`\n\n```ts\ntype Source = "ECP" | "ERP" | "360" | "journey-submission"\n```\n\n### `ActionLabel`\n\n```ts\ntype ActionLabel = {\n en?: string\n de?: string\n}\n```\n\n### `Rule`\n\n```ts\ntype Rule = {\n entity?: string\n attribute?: string\n attribute_value?: string\n}\n```\n\n### `JourneyActions`\n\n```ts\ntype JourneyActions = {\n journey_id?: string\n action_label?: {\n en?: string\n de?: string\n }\n slug?: string\n rules?: Array<{\n entity?: string\n attribute?: string\n attribute_value?: string\n }>\n}\n```\n\n### `ReadingWithMeter`\n\n```ts\ntype ReadingWithMeter = {\n ma_lo_id?: string\n meter_id?: string\n obis_number?: string\n unit?: string\n direction?: "feed-in" | "feed-out"\n tariff_type?: "ht" | "nt"\n value?: number\n read_by?: string\n reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"\n timestamp?: string\n source?: "ECP" | "ERP" | "360" | "journey-submission"\n}\n```\n\n### `MeterReadingChangeset`\n\n```ts\ntype MeterReadingChangeset = {\n changeset_id: string\n meter_id?: string // uuid\n counter_id?: string // uuid\n proposed: {\n value: number\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n reason?: string\n remark?: string\n read_by?: string\n status?: "valid" | "in-validation" | "implausible"\n external_id?: string\n }\n previous?: {\n value: number\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n reason?: string\n remark?: string\n read_by?: string\n status?: "valid" | "in-validation" | "implausible"\n external_id?: string\n }\n edit_mode: "external" | "approval"\n match_strategy?: "exact" | "fuzzy"\n timestamp_tolerance?: "exact" | {\n type: "same-day"\n timezone?: string\n } | {\n type: "within-seconds"\n seconds: number\n }\n created_at: string // date-time\n created_by?: {\n type?: "user" | "portal_user" | "api_client" | "automation"\n id?: string\n }\n source?: "360" | "ECP" | "ERP" | "journey-submission"\n fuzzy_config?: {\n percentage_threshold?: number\n absolute_threshold?: number\n }\n dismissed_reason?: string\n dismissed_at?: string // date-time\n}\n```\n\n### `FuzzyConfig`\n\nNumeric-threshold fuzzy matching for meter reading auto-clear.\n\nNOTE: This is intentionally different from entity-api\'s FuzzyConfig. Entity-api\'s\nfuzzy strategies (suffix, digits_only, normalize_phone, ignore_fields,\ncontains_entry, regex) are designed for strings and structured objects (IBAN, phone\n\n```ts\ntype FuzzyConfig = {\n percentage_threshold?: number\n absolute_threshold?: number\n}\n```\n\n### `ProposedReading`\n\n```ts\ntype ProposedReading = {\n value: number\n direction?: "feed-in" | "feed-out"\n timestamp?: string // date-time\n reason?: string\n remark?: string\n read_by?: string\n status?: "valid" | "in-validation" | "implausible"\n external_id?: string\n}\n```\n\n### `ChangesetCreator`\n\n```ts\ntype ChangesetCreator = {\n type?: "user" | "portal_user" | "api_client" | "automation"\n id?: string\n}\n```\n\n### `TimestampTolerance`\n\nSlack on `reading.timestamp` when auto-clear matches an incoming reading\nagainst a pending changeset. Both sides reference the SAME physical\nmeter-read event \u2014 one as stored when the user submitted, the other as\nechoed back by the ERP. The tolerance accommodates round-trip format\ndrift between the t\n\n```ts\ntype TimestampTolerance = "exact" | {\n type: "same-day"\n timezone?: string\n} | {\n type: "within-seconds"\n seconds: number\n}\n```\n\n### `ActivityId`\n\nSee https://github.com/ulid/spec\n\n```ts\ntype ActivityId = string // ulid\n```\n';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
exports.default = metering_default;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkXNC4FWS2cjs = require('./chunk-XNC4FWS2.cjs');
|
|
4
4
|
require('./chunk-NJK5F5TF.cjs');
|
|
5
|
-
exports. default =
|
|
5
|
+
exports. default = _chunkXNC4FWS2cjs.require_metering_runtime.call(void 0, );
|
|
@@ -495,7 +495,7 @@ declare namespace Components {
|
|
|
495
495
|
/**
|
|
496
496
|
* The calibration date of the meter
|
|
497
497
|
* example:
|
|
498
|
-
* 2022-10-
|
|
498
|
+
* 2022-10-10
|
|
499
499
|
*/
|
|
500
500
|
calibration_date?: string;
|
|
501
501
|
/**
|
|
@@ -570,7 +570,7 @@ declare namespace Components {
|
|
|
570
570
|
/**
|
|
571
571
|
* The date as of which the forecast reading value is applicable
|
|
572
572
|
* example:
|
|
573
|
-
* 2022-12-
|
|
573
|
+
* 2022-12-10
|
|
574
574
|
*/
|
|
575
575
|
forecast_as_of?: string;
|
|
576
576
|
/**
|
|
@@ -582,7 +582,7 @@ declare namespace Components {
|
|
|
582
582
|
/**
|
|
583
583
|
* The timestamp of the last reading
|
|
584
584
|
* example:
|
|
585
|
-
* 2022-10-
|
|
585
|
+
* 2022-10-10
|
|
586
586
|
*/
|
|
587
587
|
last_reading?: string;
|
|
588
588
|
/**
|
|
@@ -618,7 +618,7 @@ declare namespace Components {
|
|
|
618
618
|
/**
|
|
619
619
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
620
620
|
* example:
|
|
621
|
-
* 2022-10-
|
|
621
|
+
* 2022-10-10
|
|
622
622
|
*/
|
|
623
623
|
timestamp?: string; // date-time
|
|
624
624
|
source: Source;
|
|
@@ -748,7 +748,7 @@ declare namespace Components {
|
|
|
748
748
|
/**
|
|
749
749
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
750
750
|
* example:
|
|
751
|
-
* 2022-10-
|
|
751
|
+
* 2022-10-10
|
|
752
752
|
*/
|
|
753
753
|
timestamp?: string; // date-time
|
|
754
754
|
source: Source;
|
|
@@ -790,6 +790,32 @@ declare namespace Components {
|
|
|
790
790
|
status?: "valid" | "in-validation" | "implausible";
|
|
791
791
|
external_id?: string;
|
|
792
792
|
}
|
|
793
|
+
export interface PruneMeterReadingsPayload {
|
|
794
|
+
/**
|
|
795
|
+
* The ID of the meter whose readings are pruned
|
|
796
|
+
*/
|
|
797
|
+
meter_id: EntityId /* uuid */;
|
|
798
|
+
/**
|
|
799
|
+
* Optionally narrows the prune scope to a single counter of the meter
|
|
800
|
+
*/
|
|
801
|
+
counter_id?: EntityId /* uuid */;
|
|
802
|
+
/**
|
|
803
|
+
* Optionally only prune readings with this source (e.g. `ERP`)
|
|
804
|
+
*/
|
|
805
|
+
source?: Source;
|
|
806
|
+
/**
|
|
807
|
+
* Readings whose `external_id` is contained in this list are kept; every other reading in scope is deleted.
|
|
808
|
+
* An empty array deletes all readings in scope (subject to the no-external-id rule described on the endpoint).
|
|
809
|
+
* Limited to 10000 entries.
|
|
810
|
+
*
|
|
811
|
+
* example:
|
|
812
|
+
* [
|
|
813
|
+
* "erp-reading-1",
|
|
814
|
+
* "erp-reading-2"
|
|
815
|
+
* ]
|
|
816
|
+
*/
|
|
817
|
+
keep_external_ids: string[];
|
|
818
|
+
}
|
|
793
819
|
/**
|
|
794
820
|
* The person who recorded the reading
|
|
795
821
|
* example:
|
|
@@ -830,7 +856,7 @@ declare namespace Components {
|
|
|
830
856
|
/**
|
|
831
857
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
832
858
|
* example:
|
|
833
|
-
* 2022-10-
|
|
859
|
+
* 2022-10-10
|
|
834
860
|
*/
|
|
835
861
|
timestamp?: string; // date-time
|
|
836
862
|
/**
|
|
@@ -1121,7 +1147,7 @@ declare namespace Components {
|
|
|
1121
1147
|
/**
|
|
1122
1148
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
1123
1149
|
* example:
|
|
1124
|
-
* 2022-10-
|
|
1150
|
+
* 2022-10-10
|
|
1125
1151
|
*/
|
|
1126
1152
|
timestamp?: string; // date-time
|
|
1127
1153
|
/**
|
|
@@ -1583,7 +1609,7 @@ declare namespace Paths {
|
|
|
1583
1609
|
/**
|
|
1584
1610
|
* The calibration date of the meter
|
|
1585
1611
|
* example:
|
|
1586
|
-
* 2022-10-
|
|
1612
|
+
* 2022-10-10
|
|
1587
1613
|
*/
|
|
1588
1614
|
calibration_date?: string;
|
|
1589
1615
|
/**
|
|
@@ -1602,7 +1628,7 @@ declare namespace Paths {
|
|
|
1602
1628
|
/**
|
|
1603
1629
|
* The timestamp of the last reading
|
|
1604
1630
|
* example:
|
|
1605
|
-
* 2022-10-
|
|
1631
|
+
* 2022-10-10
|
|
1606
1632
|
*/
|
|
1607
1633
|
last_reading?: string;
|
|
1608
1634
|
/**
|
|
@@ -1771,6 +1797,48 @@ declare namespace Paths {
|
|
|
1771
1797
|
export type $500 = Components.Responses.InternalServerError;
|
|
1772
1798
|
}
|
|
1773
1799
|
}
|
|
1800
|
+
namespace PruneMeterReadings {
|
|
1801
|
+
namespace Parameters {
|
|
1802
|
+
export type ActivityId = /**
|
|
1803
|
+
* See https://github.com/ulid/spec
|
|
1804
|
+
* example:
|
|
1805
|
+
* 01F130Q52Q6MWSNS8N2AVXV4JN
|
|
1806
|
+
*/
|
|
1807
|
+
Components.Schemas.ActivityId /* ulid */;
|
|
1808
|
+
export type Async = boolean;
|
|
1809
|
+
export type CreateTicket = boolean;
|
|
1810
|
+
export type DryRun = boolean;
|
|
1811
|
+
}
|
|
1812
|
+
export interface QueryParameters {
|
|
1813
|
+
async?: Parameters.Async;
|
|
1814
|
+
activity_id?: Parameters.ActivityId;
|
|
1815
|
+
create_ticket?: Parameters.CreateTicket;
|
|
1816
|
+
dry_run?: Parameters.DryRun;
|
|
1817
|
+
}
|
|
1818
|
+
export type RequestBody = Components.Schemas.PruneMeterReadingsPayload;
|
|
1819
|
+
namespace Responses {
|
|
1820
|
+
export interface $200 {
|
|
1821
|
+
data?: {
|
|
1822
|
+
/**
|
|
1823
|
+
* Number of readings deleted (or that would be deleted when `dry_run=true`).
|
|
1824
|
+
* example:
|
|
1825
|
+
* 42
|
|
1826
|
+
*/
|
|
1827
|
+
deleted_count?: number;
|
|
1828
|
+
/**
|
|
1829
|
+
* Number of readings in scope that were kept.
|
|
1830
|
+
* example:
|
|
1831
|
+
* 12
|
|
1832
|
+
*/
|
|
1833
|
+
kept_count?: number;
|
|
1834
|
+
};
|
|
1835
|
+
}
|
|
1836
|
+
export type $400 = Components.Responses.InvalidRequest;
|
|
1837
|
+
export type $401 = Components.Responses.Unauthorized;
|
|
1838
|
+
export type $403 = Components.Responses.Forbidden;
|
|
1839
|
+
export type $500 = Components.Responses.InternalServerError;
|
|
1840
|
+
}
|
|
1841
|
+
}
|
|
1774
1842
|
namespace UpdateMeter {
|
|
1775
1843
|
namespace Parameters {
|
|
1776
1844
|
export type Id = Components.Schemas.EntityId /* uuid */;
|
|
@@ -1982,6 +2050,32 @@ interface OperationMethods {
|
|
|
1982
2050
|
data?: Paths.BatchWriteMeterReadings.RequestBody,
|
|
1983
2051
|
config?: AxiosRequestConfig
|
|
1984
2052
|
): OperationResponse<Paths.BatchWriteMeterReadings.Responses.$200>
|
|
2053
|
+
/**
|
|
2054
|
+
* pruneMeterReadings - pruneMeterReadings
|
|
2055
|
+
*
|
|
2056
|
+
* Deletes every reading of a meter whose `external_id` is NOT in the provided keep list — in a single request.
|
|
2057
|
+
*
|
|
2058
|
+
* The prune scope can optionally be narrowed to a single counter (`counter_id`) and/or a reading `source` (e.g. `ERP`).
|
|
2059
|
+
* Replaces the client-side pattern of paginating the full reading history and issuing chunked batch deletes.
|
|
2060
|
+
*
|
|
2061
|
+
* Readings without an `external_id`:
|
|
2062
|
+
* - when a `source` filter is provided, they are **deleted** — they cannot be referenced by any keep list
|
|
2063
|
+
* - when no `source` filter is provided, they are **kept** (conservative default)
|
|
2064
|
+
*
|
|
2065
|
+
* Deletions reuse the same internal path as `batchWriteMeterReadings` with `operation: delete`: the same
|
|
2066
|
+
* per-reading lifecycle events are emitted, and providing `activity_id` suppresses the per-reading delete
|
|
2067
|
+
* activities and attaches the given activity to the affected meter and counters instead. Delete operations
|
|
2068
|
+
* never create manual-intervention tickets; `create_ticket` is accepted for call-site parity with
|
|
2069
|
+
* `batchWriteMeterReadings`.
|
|
2070
|
+
*
|
|
2071
|
+
* `keep_external_ids` is limited to 10000 entries.
|
|
2072
|
+
*
|
|
2073
|
+
*/
|
|
2074
|
+
'pruneMeterReadings'(
|
|
2075
|
+
parameters?: Parameters<Paths.PruneMeterReadings.QueryParameters> | null,
|
|
2076
|
+
data?: Paths.PruneMeterReadings.RequestBody,
|
|
2077
|
+
config?: AxiosRequestConfig
|
|
2078
|
+
): OperationResponse<Paths.PruneMeterReadings.Responses.$200>
|
|
1985
2079
|
/**
|
|
1986
2080
|
* createMeterReadingFromSubmission - createMeterReadingFromSubmission
|
|
1987
2081
|
*
|
|
@@ -2254,6 +2348,34 @@ interface PathsDictionary {
|
|
|
2254
2348
|
config?: AxiosRequestConfig
|
|
2255
2349
|
): OperationResponse<Paths.BatchWriteMeterReadings.Responses.$200>
|
|
2256
2350
|
}
|
|
2351
|
+
['/v2/metering/readings/prune']: {
|
|
2352
|
+
/**
|
|
2353
|
+
* pruneMeterReadings - pruneMeterReadings
|
|
2354
|
+
*
|
|
2355
|
+
* Deletes every reading of a meter whose `external_id` is NOT in the provided keep list — in a single request.
|
|
2356
|
+
*
|
|
2357
|
+
* The prune scope can optionally be narrowed to a single counter (`counter_id`) and/or a reading `source` (e.g. `ERP`).
|
|
2358
|
+
* Replaces the client-side pattern of paginating the full reading history and issuing chunked batch deletes.
|
|
2359
|
+
*
|
|
2360
|
+
* Readings without an `external_id`:
|
|
2361
|
+
* - when a `source` filter is provided, they are **deleted** — they cannot be referenced by any keep list
|
|
2362
|
+
* - when no `source` filter is provided, they are **kept** (conservative default)
|
|
2363
|
+
*
|
|
2364
|
+
* Deletions reuse the same internal path as `batchWriteMeterReadings` with `operation: delete`: the same
|
|
2365
|
+
* per-reading lifecycle events are emitted, and providing `activity_id` suppresses the per-reading delete
|
|
2366
|
+
* activities and attaches the given activity to the affected meter and counters instead. Delete operations
|
|
2367
|
+
* never create manual-intervention tickets; `create_ticket` is accepted for call-site parity with
|
|
2368
|
+
* `batchWriteMeterReadings`.
|
|
2369
|
+
*
|
|
2370
|
+
* `keep_external_ids` is limited to 10000 entries.
|
|
2371
|
+
*
|
|
2372
|
+
*/
|
|
2373
|
+
'post'(
|
|
2374
|
+
parameters?: Parameters<Paths.PruneMeterReadings.QueryParameters> | null,
|
|
2375
|
+
data?: Paths.PruneMeterReadings.RequestBody,
|
|
2376
|
+
config?: AxiosRequestConfig
|
|
2377
|
+
): OperationResponse<Paths.PruneMeterReadings.Responses.$200>
|
|
2378
|
+
}
|
|
2257
2379
|
['/v1/metering/reading/submission']: {
|
|
2258
2380
|
/**
|
|
2259
2381
|
* createMeterReadingFromSubmission - createMeterReadingFromSubmission
|
|
@@ -2418,6 +2540,7 @@ type MeterReading = Components.Schemas.MeterReading;
|
|
|
2418
2540
|
type MeterReadingChangeset = Components.Schemas.MeterReadingChangeset;
|
|
2419
2541
|
type PortalMeterReading = Components.Schemas.PortalMeterReading;
|
|
2420
2542
|
type ProposedReading = Components.Schemas.ProposedReading;
|
|
2543
|
+
type PruneMeterReadingsPayload = Components.Schemas.PruneMeterReadingsPayload;
|
|
2421
2544
|
type ReadBy = Components.Schemas.ReadBy;
|
|
2422
2545
|
type Reading = Components.Schemas.Reading;
|
|
2423
2546
|
type ReadingStatus = Components.Schemas.ReadingStatus;
|
|
@@ -2432,4 +2555,4 @@ type TimestampTolerance = Components.Schemas.TimestampTolerance;
|
|
|
2432
2555
|
type Unit = Components.Schemas.Unit;
|
|
2433
2556
|
type UpdateMeterReading = Components.Schemas.UpdateMeterReading;
|
|
2434
2557
|
|
|
2435
|
-
export { type ActionLabel as A, type BaseEntity as B, type Client as C, type DeleteBatchReading as D, type Entity as E, type FuzzyConfig as F, type
|
|
2558
|
+
export { type ActionLabel as A, type BaseEntity as B, type Client as C, type DeleteBatchReading as D, type Entity as E, type FuzzyConfig as F, type SubmissionMeterReading as G, type TimestampTolerance as H, type Id as I, type JourneyActions as J, UpdateMeterReading as K, type Meter as M, type OperationMethods as O, Paths as P, type ReadBy as R, type Source as S, type TariffType as T, type Unit as U, Components as a, type PathsDictionary as b, type ActivityId as c, type BatchReading as d, type BatchReadingBase as e, type ChangesetCreator as f, type CounterReadingOnSubmission as g, type CreateOrUpdateBatchReading as h, type Direction as i, type EntityId as j, type EntityItem as k, type EntityRelation as l, type EntitySlug as m, type ErrorResp as n, type MeterCounter as o, type MeterReading as p, type MeterReadingChangeset as q, type PortalMeterReading as r, type ProposedReading as s, type PruneMeterReadingsPayload as t, type Reading as u, type ReadingStatus as v, type ReadingWithMeter as w, type Reason as x, type ReasonString as y, type Rule as z };
|
|
@@ -495,7 +495,7 @@ declare namespace Components {
|
|
|
495
495
|
/**
|
|
496
496
|
* The calibration date of the meter
|
|
497
497
|
* example:
|
|
498
|
-
* 2022-10-
|
|
498
|
+
* 2022-10-10
|
|
499
499
|
*/
|
|
500
500
|
calibration_date?: string;
|
|
501
501
|
/**
|
|
@@ -570,7 +570,7 @@ declare namespace Components {
|
|
|
570
570
|
/**
|
|
571
571
|
* The date as of which the forecast reading value is applicable
|
|
572
572
|
* example:
|
|
573
|
-
* 2022-12-
|
|
573
|
+
* 2022-12-10
|
|
574
574
|
*/
|
|
575
575
|
forecast_as_of?: string;
|
|
576
576
|
/**
|
|
@@ -582,7 +582,7 @@ declare namespace Components {
|
|
|
582
582
|
/**
|
|
583
583
|
* The timestamp of the last reading
|
|
584
584
|
* example:
|
|
585
|
-
* 2022-10-
|
|
585
|
+
* 2022-10-10
|
|
586
586
|
*/
|
|
587
587
|
last_reading?: string;
|
|
588
588
|
/**
|
|
@@ -618,7 +618,7 @@ declare namespace Components {
|
|
|
618
618
|
/**
|
|
619
619
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
620
620
|
* example:
|
|
621
|
-
* 2022-10-
|
|
621
|
+
* 2022-10-10
|
|
622
622
|
*/
|
|
623
623
|
timestamp?: string; // date-time
|
|
624
624
|
source: Source;
|
|
@@ -748,7 +748,7 @@ declare namespace Components {
|
|
|
748
748
|
/**
|
|
749
749
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
750
750
|
* example:
|
|
751
|
-
* 2022-10-
|
|
751
|
+
* 2022-10-10
|
|
752
752
|
*/
|
|
753
753
|
timestamp?: string; // date-time
|
|
754
754
|
source: Source;
|
|
@@ -790,6 +790,32 @@ declare namespace Components {
|
|
|
790
790
|
status?: "valid" | "in-validation" | "implausible";
|
|
791
791
|
external_id?: string;
|
|
792
792
|
}
|
|
793
|
+
export interface PruneMeterReadingsPayload {
|
|
794
|
+
/**
|
|
795
|
+
* The ID of the meter whose readings are pruned
|
|
796
|
+
*/
|
|
797
|
+
meter_id: EntityId /* uuid */;
|
|
798
|
+
/**
|
|
799
|
+
* Optionally narrows the prune scope to a single counter of the meter
|
|
800
|
+
*/
|
|
801
|
+
counter_id?: EntityId /* uuid */;
|
|
802
|
+
/**
|
|
803
|
+
* Optionally only prune readings with this source (e.g. `ERP`)
|
|
804
|
+
*/
|
|
805
|
+
source?: Source;
|
|
806
|
+
/**
|
|
807
|
+
* Readings whose `external_id` is contained in this list are kept; every other reading in scope is deleted.
|
|
808
|
+
* An empty array deletes all readings in scope (subject to the no-external-id rule described on the endpoint).
|
|
809
|
+
* Limited to 10000 entries.
|
|
810
|
+
*
|
|
811
|
+
* example:
|
|
812
|
+
* [
|
|
813
|
+
* "erp-reading-1",
|
|
814
|
+
* "erp-reading-2"
|
|
815
|
+
* ]
|
|
816
|
+
*/
|
|
817
|
+
keep_external_ids: string[];
|
|
818
|
+
}
|
|
793
819
|
/**
|
|
794
820
|
* The person who recorded the reading
|
|
795
821
|
* example:
|
|
@@ -830,7 +856,7 @@ declare namespace Components {
|
|
|
830
856
|
/**
|
|
831
857
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
832
858
|
* example:
|
|
833
|
-
* 2022-10-
|
|
859
|
+
* 2022-10-10
|
|
834
860
|
*/
|
|
835
861
|
timestamp?: string; // date-time
|
|
836
862
|
/**
|
|
@@ -1121,7 +1147,7 @@ declare namespace Components {
|
|
|
1121
1147
|
/**
|
|
1122
1148
|
* If the value is not provided, the system will be set with the time the request is processed.
|
|
1123
1149
|
* example:
|
|
1124
|
-
* 2022-10-
|
|
1150
|
+
* 2022-10-10
|
|
1125
1151
|
*/
|
|
1126
1152
|
timestamp?: string; // date-time
|
|
1127
1153
|
/**
|
|
@@ -1583,7 +1609,7 @@ declare namespace Paths {
|
|
|
1583
1609
|
/**
|
|
1584
1610
|
* The calibration date of the meter
|
|
1585
1611
|
* example:
|
|
1586
|
-
* 2022-10-
|
|
1612
|
+
* 2022-10-10
|
|
1587
1613
|
*/
|
|
1588
1614
|
calibration_date?: string;
|
|
1589
1615
|
/**
|
|
@@ -1602,7 +1628,7 @@ declare namespace Paths {
|
|
|
1602
1628
|
/**
|
|
1603
1629
|
* The timestamp of the last reading
|
|
1604
1630
|
* example:
|
|
1605
|
-
* 2022-10-
|
|
1631
|
+
* 2022-10-10
|
|
1606
1632
|
*/
|
|
1607
1633
|
last_reading?: string;
|
|
1608
1634
|
/**
|
|
@@ -1771,6 +1797,48 @@ declare namespace Paths {
|
|
|
1771
1797
|
export type $500 = Components.Responses.InternalServerError;
|
|
1772
1798
|
}
|
|
1773
1799
|
}
|
|
1800
|
+
namespace PruneMeterReadings {
|
|
1801
|
+
namespace Parameters {
|
|
1802
|
+
export type ActivityId = /**
|
|
1803
|
+
* See https://github.com/ulid/spec
|
|
1804
|
+
* example:
|
|
1805
|
+
* 01F130Q52Q6MWSNS8N2AVXV4JN
|
|
1806
|
+
*/
|
|
1807
|
+
Components.Schemas.ActivityId /* ulid */;
|
|
1808
|
+
export type Async = boolean;
|
|
1809
|
+
export type CreateTicket = boolean;
|
|
1810
|
+
export type DryRun = boolean;
|
|
1811
|
+
}
|
|
1812
|
+
export interface QueryParameters {
|
|
1813
|
+
async?: Parameters.Async;
|
|
1814
|
+
activity_id?: Parameters.ActivityId;
|
|
1815
|
+
create_ticket?: Parameters.CreateTicket;
|
|
1816
|
+
dry_run?: Parameters.DryRun;
|
|
1817
|
+
}
|
|
1818
|
+
export type RequestBody = Components.Schemas.PruneMeterReadingsPayload;
|
|
1819
|
+
namespace Responses {
|
|
1820
|
+
export interface $200 {
|
|
1821
|
+
data?: {
|
|
1822
|
+
/**
|
|
1823
|
+
* Number of readings deleted (or that would be deleted when `dry_run=true`).
|
|
1824
|
+
* example:
|
|
1825
|
+
* 42
|
|
1826
|
+
*/
|
|
1827
|
+
deleted_count?: number;
|
|
1828
|
+
/**
|
|
1829
|
+
* Number of readings in scope that were kept.
|
|
1830
|
+
* example:
|
|
1831
|
+
* 12
|
|
1832
|
+
*/
|
|
1833
|
+
kept_count?: number;
|
|
1834
|
+
};
|
|
1835
|
+
}
|
|
1836
|
+
export type $400 = Components.Responses.InvalidRequest;
|
|
1837
|
+
export type $401 = Components.Responses.Unauthorized;
|
|
1838
|
+
export type $403 = Components.Responses.Forbidden;
|
|
1839
|
+
export type $500 = Components.Responses.InternalServerError;
|
|
1840
|
+
}
|
|
1841
|
+
}
|
|
1774
1842
|
namespace UpdateMeter {
|
|
1775
1843
|
namespace Parameters {
|
|
1776
1844
|
export type Id = Components.Schemas.EntityId /* uuid */;
|
|
@@ -1982,6 +2050,32 @@ interface OperationMethods {
|
|
|
1982
2050
|
data?: Paths.BatchWriteMeterReadings.RequestBody,
|
|
1983
2051
|
config?: AxiosRequestConfig
|
|
1984
2052
|
): OperationResponse<Paths.BatchWriteMeterReadings.Responses.$200>
|
|
2053
|
+
/**
|
|
2054
|
+
* pruneMeterReadings - pruneMeterReadings
|
|
2055
|
+
*
|
|
2056
|
+
* Deletes every reading of a meter whose `external_id` is NOT in the provided keep list — in a single request.
|
|
2057
|
+
*
|
|
2058
|
+
* The prune scope can optionally be narrowed to a single counter (`counter_id`) and/or a reading `source` (e.g. `ERP`).
|
|
2059
|
+
* Replaces the client-side pattern of paginating the full reading history and issuing chunked batch deletes.
|
|
2060
|
+
*
|
|
2061
|
+
* Readings without an `external_id`:
|
|
2062
|
+
* - when a `source` filter is provided, they are **deleted** — they cannot be referenced by any keep list
|
|
2063
|
+
* - when no `source` filter is provided, they are **kept** (conservative default)
|
|
2064
|
+
*
|
|
2065
|
+
* Deletions reuse the same internal path as `batchWriteMeterReadings` with `operation: delete`: the same
|
|
2066
|
+
* per-reading lifecycle events are emitted, and providing `activity_id` suppresses the per-reading delete
|
|
2067
|
+
* activities and attaches the given activity to the affected meter and counters instead. Delete operations
|
|
2068
|
+
* never create manual-intervention tickets; `create_ticket` is accepted for call-site parity with
|
|
2069
|
+
* `batchWriteMeterReadings`.
|
|
2070
|
+
*
|
|
2071
|
+
* `keep_external_ids` is limited to 10000 entries.
|
|
2072
|
+
*
|
|
2073
|
+
*/
|
|
2074
|
+
'pruneMeterReadings'(
|
|
2075
|
+
parameters?: Parameters<Paths.PruneMeterReadings.QueryParameters> | null,
|
|
2076
|
+
data?: Paths.PruneMeterReadings.RequestBody,
|
|
2077
|
+
config?: AxiosRequestConfig
|
|
2078
|
+
): OperationResponse<Paths.PruneMeterReadings.Responses.$200>
|
|
1985
2079
|
/**
|
|
1986
2080
|
* createMeterReadingFromSubmission - createMeterReadingFromSubmission
|
|
1987
2081
|
*
|
|
@@ -2254,6 +2348,34 @@ interface PathsDictionary {
|
|
|
2254
2348
|
config?: AxiosRequestConfig
|
|
2255
2349
|
): OperationResponse<Paths.BatchWriteMeterReadings.Responses.$200>
|
|
2256
2350
|
}
|
|
2351
|
+
['/v2/metering/readings/prune']: {
|
|
2352
|
+
/**
|
|
2353
|
+
* pruneMeterReadings - pruneMeterReadings
|
|
2354
|
+
*
|
|
2355
|
+
* Deletes every reading of a meter whose `external_id` is NOT in the provided keep list — in a single request.
|
|
2356
|
+
*
|
|
2357
|
+
* The prune scope can optionally be narrowed to a single counter (`counter_id`) and/or a reading `source` (e.g. `ERP`).
|
|
2358
|
+
* Replaces the client-side pattern of paginating the full reading history and issuing chunked batch deletes.
|
|
2359
|
+
*
|
|
2360
|
+
* Readings without an `external_id`:
|
|
2361
|
+
* - when a `source` filter is provided, they are **deleted** — they cannot be referenced by any keep list
|
|
2362
|
+
* - when no `source` filter is provided, they are **kept** (conservative default)
|
|
2363
|
+
*
|
|
2364
|
+
* Deletions reuse the same internal path as `batchWriteMeterReadings` with `operation: delete`: the same
|
|
2365
|
+
* per-reading lifecycle events are emitted, and providing `activity_id` suppresses the per-reading delete
|
|
2366
|
+
* activities and attaches the given activity to the affected meter and counters instead. Delete operations
|
|
2367
|
+
* never create manual-intervention tickets; `create_ticket` is accepted for call-site parity with
|
|
2368
|
+
* `batchWriteMeterReadings`.
|
|
2369
|
+
*
|
|
2370
|
+
* `keep_external_ids` is limited to 10000 entries.
|
|
2371
|
+
*
|
|
2372
|
+
*/
|
|
2373
|
+
'post'(
|
|
2374
|
+
parameters?: Parameters<Paths.PruneMeterReadings.QueryParameters> | null,
|
|
2375
|
+
data?: Paths.PruneMeterReadings.RequestBody,
|
|
2376
|
+
config?: AxiosRequestConfig
|
|
2377
|
+
): OperationResponse<Paths.PruneMeterReadings.Responses.$200>
|
|
2378
|
+
}
|
|
2257
2379
|
['/v1/metering/reading/submission']: {
|
|
2258
2380
|
/**
|
|
2259
2381
|
* createMeterReadingFromSubmission - createMeterReadingFromSubmission
|
|
@@ -2418,6 +2540,7 @@ type MeterReading = Components.Schemas.MeterReading;
|
|
|
2418
2540
|
type MeterReadingChangeset = Components.Schemas.MeterReadingChangeset;
|
|
2419
2541
|
type PortalMeterReading = Components.Schemas.PortalMeterReading;
|
|
2420
2542
|
type ProposedReading = Components.Schemas.ProposedReading;
|
|
2543
|
+
type PruneMeterReadingsPayload = Components.Schemas.PruneMeterReadingsPayload;
|
|
2421
2544
|
type ReadBy = Components.Schemas.ReadBy;
|
|
2422
2545
|
type Reading = Components.Schemas.Reading;
|
|
2423
2546
|
type ReadingStatus = Components.Schemas.ReadingStatus;
|
|
@@ -2432,4 +2555,4 @@ type TimestampTolerance = Components.Schemas.TimestampTolerance;
|
|
|
2432
2555
|
type Unit = Components.Schemas.Unit;
|
|
2433
2556
|
type UpdateMeterReading = Components.Schemas.UpdateMeterReading;
|
|
2434
2557
|
|
|
2435
|
-
export { type ActionLabel as A, type BaseEntity as B, type Client as C, type DeleteBatchReading as D, type Entity as E, type FuzzyConfig as F, type
|
|
2558
|
+
export { type ActionLabel as A, type BaseEntity as B, type Client as C, type DeleteBatchReading as D, type Entity as E, type FuzzyConfig as F, type SubmissionMeterReading as G, type TimestampTolerance as H, type Id as I, type JourneyActions as J, UpdateMeterReading as K, type Meter as M, type OperationMethods as O, Paths as P, type ReadBy as R, type Source as S, type TariffType as T, type Unit as U, Components as a, type PathsDictionary as b, type ActivityId as c, type BatchReading as d, type BatchReadingBase as e, type ChangesetCreator as f, type CounterReadingOnSubmission as g, type CreateOrUpdateBatchReading as h, type Direction as i, type EntityId as j, type EntityItem as k, type EntityRelation as l, type EntitySlug as m, type ErrorResp as n, type MeterCounter as o, type MeterReading as p, type MeterReadingChangeset as q, type PortalMeterReading as r, type ProposedReading as s, type PruneMeterReadingsPayload as t, type Reading as u, type ReadingStatus as v, type ReadingWithMeter as w, type Reason as x, type ReasonString as y, type Rule as z };
|