@epilot/metering-client 0.8.2 → 0.9.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.
@@ -1 +1 @@
1
- (()=>{"use strict";var e={390:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(r(871));t.default=s.default},871:e=>{e.exports=JSON.parse('{"openapi":"3.0.3","info":{"title":"Metering API","version":"1.0.0"},"tags":[{"name":"ECP","description":"APIs defined for a portal user"},{"name":"ECP Admin","description":"APIs defined for a ECP Admin"},{"name":"meter_schema","x-displayName":"Meter","description":"<SchemaDefinition schemaRef=\\"#/components/schemas/Meter\\" />\\n"},{"name":"meter_counter_schema","x-displayName":"Meter Counter","description":"<SchemaDefinition schemaRef=\\"#/components/schemas/MeterCounter\\" />\\n"}],"x-tagGroups":[{"name":"APIs","tags":["ECP","ECP Admin"]},{"name":"Schemas","tags":["meter_schema","meter_counter_schema"]}],"security":[{"EpilotAuth":[]},{"PortalAuth":[]},{"EitherAuth":[]}],"paths":{"/v1/metering/meter":{"get":{"operationId":"getCustomerMeters","summary":"Get Customer Meters","description":"Retrieves all meters related to a customer.","tags":["ECP"],"security":[{"PortalAuth":[]}],"responses":{"200":{"description":"Customer meters retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Meter"},{"type":"object","properties":{"journey_actions":{"$ref":"#/components/schemas/JourneyActions"}}},{"type":"object","properties":{"last_reading":{"type":"string","example":"2022-10-10T00:00:00.000Z","description":"The timestamp of the last reading"},"current_consumption":{"type":"number","example":100.5,"description":"The current consumption of the meter"}}}]}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/contract/meters/{contract_id}":{"get":{"operationId":"getMetersByContractId","summary":"getMetersByContractId","description":"Retrieves all meters related to a contract.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"contract_id","schema":{"$ref":"#/components/schemas/EntityId"},"required":true,"description":"The ID of the Contract."}],"responses":{"200":{"description":"Meters related to the contract retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Meter"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/meter/{id}":{"patch":{"operationId":"updateMeter","summary":"Update Meter","description":"Updates the details of a meter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"id","schema":{"$ref":"#/components/schemas/EntityId"},"required":true,"description":"The ID of the meter."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entity"}}}},"responses":{"200":{"description":"Meter updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Meter"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestUpdateMeter"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"get":{"operationId":"getMeter","summary":"Get Meter","description":"Retrieves the details of a meter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"id","schema":{"$ref":"#/components/schemas/EntityId"},"required":true,"description":"The ID of the meter."}],"responses":{"200":{"description":"Meter retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"entity":{"$ref":"#/components/schemas/Meter"},"journey_actions":{"$ref":"#/components/schemas/JourneyActions"},"relations":{"type":"array","items":{"$ref":"#/components/schemas/EntityItem"}}}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/counter":{"get":{"operationId":"getMeterCounters","summary":"Get Meter Counters","description":"Retrieves all counters for a given meter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"query","name":"meter_id","required":true,"schema":{"$ref":"#/components/schemas/EntityId"}}],"responses":{"200":{"description":"Counters retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MeterCounter"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/counter/{counter_id}":{"get":{"operationId":"getCounterDetails","summary":"Get Counter Details","description":"Retrieves the details of a meter counter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter."}],"responses":{"200":{"description":"Counter details retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterCounter"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading":{"post":{"operationId":"createMeterReading","summary":"Create Meter Reading","description":"Inserts a new meter reading.","tags":["ECP Admin","ECP"],"security":[{"EitherAuth":[]}],"requestBody":{"description":"Meter reading payload.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeterReading"}}}},"responses":{"200":{"description":"Meter reading created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterReading"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReading"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/readings":{"post":{"operationId":"createMeterReadings","summary":"Create Meter Readings","description":"Inserts multiple meter readings at once. Limited to 100 readings per request.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"query","name":"async","description":"Don\'t wait for the reading to become available in GetReadings API. Useful for large migrations","required":false,"schema":{"type":"boolean","default":true}},{"$ref":"#/components/parameters/ActivityIdQueryParam"},{"$ref":"#/components/parameters/SkipValidationQueryParam"}],"requestBody":{"description":"Meter readings payload. Limited to 100 readings per request.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"readings":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}}}}}}},"responses":{"200":{"description":"Meter readings created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReadings"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v2/metering/readings":{"post":{"operationId":"batchWriteMeterReadings","summary":"Batch Write Readings","description":"Upserts/Deletes multiple meter readings at once. Limited to 100 readings per request.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"query","name":"async","description":"Don\'t wait for the reading to become available in GetReadings API. Useful for large migrations","required":false,"schema":{"type":"boolean","default":true}},{"$ref":"#/components/parameters/SkipValidationQueryParam"},{"$ref":"#/components/parameters/ActivityIdQueryParam"}],"requestBody":{"description":"Meter readings payload. Limited to 100 readings per request.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"readings":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/MeterReading"},{"properties":{"operation":{"type":"string","enum":["create","update","delete"],"default":"create"}}}]}}}}}}},"responses":{"200":{"description":"Meter readings created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReadings"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading/submission":{"post":{"operationId":"createMeterReadingFromSubmission","summary":"Create Meter Reading from Submission","description":"Creates a reading from a journey submission.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"requestBody":{"description":"Meter reading payload.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"org_id":{"type":"string","example":"123","description":"ID of the organization"},"entity":{"type":"object","additionalProperties":true,"properties":{"_org":{"type":"string","example":"123","description":"ID of the organization"},"meterReadings":{"type":"array","items":{"$ref":"#/components/schemas/SubmissionMeterReading"}}}}}}}}},"responses":{"200":{"description":"Meter reading created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","enum":["Successfully Processed"]}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReadingFromSubmission"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/allowed/reading/{meter_id}":{"get":{"operationId":"getAllowedReadingForMeter","summary":"getAllowedReadingForMeter","description":"Get allowed reading for the given meter","tags":["ECP Admin","ECP"],"security":[{"EitherAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter."},{"in":"query","name":"timestamp","required":false,"description":"If not provided, the system will default to now.","schema":{"type":"string","example":"2022-10-01T10:10:00.000Z"}}],"responses":{"200":{"description":"Recent reading for the meter fetched successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"counter_id":{"$ref":"#/components/schemas/Id"},"min_value":{"type":"number","description":"Minimum allowed reading value for the meter"},"max_value":{"type":"number","description":"Maximum allowed reading value for the meter"}}}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading/with-meter":{"post":{"operationId":"createReadingWithMeter","summary":"Create Reading with Meter","description":"Creates a reading along with a meter.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"requestBody":{"description":"Meter reading payload.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadingWithMeter"}}}},"responses":{"200":{"description":"Reading with meter created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterReading"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateReadingWithMeter"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading/{meter_id}/{counter_id}":{"get":{"operationId":"getReadingsByInterval","summary":"Get Readings by Interval","description":"Retrieves 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_date.\\n","tags":["ECP Admin","ECP"],"security":[{"EitherAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter."},{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter."},{"in":"query","name":"start_date","required":false,"description":"If not provided, the system will default to 2000-01-01.","schema":{"type":"string","example":"2022-10-01"}},{"in":"query","name":"end_date","required":false,"description":"If not provided, the system will default to today\'s date.","schema":{"type":"string","example":"2022-10-10"}},{"in":"query","name":"direction","required":false,"schema":{"$ref":"#/components/schemas/Direction"}},{"in":"query","name":"size","description":"Returns the first n results after the specified offset (from).\\nIf this value is provided as -1, then it returns all results at once.\\n","required":false,"schema":{"type":"number","example":20,"default":20}},{"in":"query","name":"from","required":false,"schema":{"type":"number","example":0,"default":0}},{"in":"query","name":"type","required":true,"description":"Since meter readings are cumulative, users may need to request actual consumptions, which are the difference between consecutive measurements.\\nIf this value is provided as \\"cumulative\\", then actual readings will be returned.\\nIf this value is provided as \\"relative\\", then actual consumption will be returned.\\n","schema":{"type":"string","default":"cumulative","enum":["cumulative","relative"]}},{"in":"query","name":"sort","required":false,"schema":{"type":"string","default":"asc","enum":["asc","desc"]},"description":"If this value is provided as \\"asc\\", then the results will be sorted by the timestamp field in ascending order.\\nIf this value is provided as \\"desc\\", then the results will be sorted by the timestamp field in descending order.\\n"}],"responses":{"200":{"description":"Readings retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}},"hits":{"type":"number","example":120},"firstRecordCreatedAt":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"put":{"operationId":"updateMeterReading","summary":"Update Meter Reading","description":"Updates a meter reading.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter entity."},{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter entity."},{"in":"query","name":"timestamp","required":true,"description":"The timestamp when the reading was created.","schema":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}],"requestBody":{"description":"Update meter reading payload.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeterReading"}}}},"responses":{"200":{"description":"Meter reading updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterReading"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestUpdateMeterReading"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"delete":{"operationId":"deleteMeterReading","summary":"Delete Meter Reading","description":"Deletes a meter reading.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter entity."},{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter entity."},{"in":"query","name":"timestamp","required":true,"description":"The timestamp when the reading was created.","schema":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}],"responses":{"200":{"description":"Meter reading deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"meterId":{"$ref":"#/components/schemas/Id"},"counterId":{"$ref":"#/components/schemas/Id"},"timestamp":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}},"components":{"responses":{"InvalidRequest":{"description":"The request could not be validated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"Unauthorized":{"description":"Could not authenticate the user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"Forbidden":{"description":"The user is not allowed to access this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"InvalidRequestUpdateMeter":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["missing_params"]}}}]}}}},"InvalidRequestCreateMeterReading":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["contract_period","no_counter","no_direction","timestamp_future","less_than_previous","greater_than_subsequent","meter_decommissioned"]}}}]}}}},"InvalidRequestCreateMeterReadings":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["too_many_records","timestamp_future","duplicate_reading","less_than_previous"]}}}]}}}},"InvalidRequestCreateMeterReadingFromSubmission":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["timestamp_future","less_than_previous","greater_than_subsequent"]}}}]}}}},"InvalidRequestCreateReadingWithMeter":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["missing_params","timestamp_future","less_than_previous","contract_period","greater_than_subsequent"]}}}]}}}},"InvalidRequestUpdateMeterReading":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["missing_params","timestamp_future","less_than_previous","greater_than_subsequent"]}}}]}}}}},"securitySchemes":{"EpilotAuth":{"type":"http","scheme":"bearer","description":"Authorization header with ePilot OAuth2 bearer token","bearerFormat":"JWT"},"PortalAuth":{"type":"http","scheme":"bearer","description":"Authorization header with customer portal OAuth2 bearer token","bearerFormat":"JWT"},"EitherAuth":{"type":"http","scheme":"bearer","description":"Portal or Epilot Bearer Token"},"AsOrganization":{"type":"apiKey","in":"header","name":"x-ivy-org-id","description":"Set organization id as internal user"}},"schemas":{"ErrorResp":{"type":"object","properties":{"message":{"type":"string","description":"Error message"}}},"EntityId":{"type":"string","format":"uuid"},"EntitySlug":{"description":"URL-friendly identifier for the entity schema","type":"string","example":"contact"},"BaseEntity":{"type":"object","properties":{"_id":{"$ref":"#/components/schemas/EntityId","description":"Entity ID","example":"3fa85f64-5717-4562-b3fc-2c963f66afa6"},"_title":{"type":"string","description":"Title of the entity","example":"Example Entity"},"_org":{"type":"string","description":"Organization ID the entity belongs to","example":"123"},"_tags":{"type":"array","items":{"type":"string"},"description":"Array of entity tags","example":["example","mock"]},"_created_at":{"type":"string","format":"date-time","description":"Creation timestamp of the entity","example":"2021-02-09T12:41:43.662Z"},"_updated_at":{"type":"string","format":"date-time","description":"Last update timestamp of the entity","example":"2021-02-09T12:41:43.662Z"}},"required":["_id","_title","_org","_created_at","_updated_at"]},"Entity":{"type":"object","properties":{},"additionalProperties":true},"EntityItem":{"allOf":[{"$ref":"#/components/schemas/BaseEntity"},{"$ref":"#/components/schemas/Entity"}]},"Id":{"type":"string"},"EntityRelation":{"type":"object","properties":{"entity_id":{"$ref":"#/components/schemas/EntityId"},"_slug":{"type":"string","enum":["contact","contract"]}}},"Meter":{"allOf":[{"$ref":"#/components/schemas/BaseEntity"},{"type":"object","required":["_schema"],"properties":{"_schema":{"type":"string","enum":["meter"],"description":"The schema type of the meter"},"ma_lo_id":{"type":"string","example":"A09-123","description":"The MA-LO ID of the meter"},"status":{"type":"string","enum":["active","decommissioned"],"description":"The status of the meter"},"meter_type":{"type":"string","enum":["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"],"description":"The type of the meter"},"tariff_type":{"type":"string","example":"Peak load tariff","description":"The tariff type of the meter"},"meter_number":{"type":"string","example":"J-1093-1AK","description":"The number of the meter"},"sector":{"type":"string","enum":["power","water","gas","district_heating","waste_water"],"description":"The sector to which the meter belongs"},"location":{"type":"object","example":[{"country":"Germany","city":"Koln","postal_code":81475,"street":"Melatengürtel","street_number":71,"additional_info":"5. Etage","_tags":["billing","delivery"]}],"description":"The location information of the meter"},"used_for":{"type":"string","example":"Domestic Usage","description":"The usage purpose of the meter"},"manufacturer":{"type":"string","example":"Energy One","description":"The manufacturer of the meter"},"calibration_date":{"type":"string","example":"2022-10-10T00:00:00.000Z","description":"The calibration date of the meter"},"contract":{"type":"object","properties":{"$relation":{"type":"array","items":{"$ref":"#/components/schemas/EntityRelation"}}},"description":"The contract associated with the meter"},"customer":{"type":"object","properties":{"$relation":{"type":"array","items":{"$ref":"#/components/schemas/EntityRelation"}}},"description":"The customer associated with the meter"}}}]},"Direction":{"type":"string","enum":["feed-in","feed-out"]},"TariffType":{"type":"string","enum":["ht","nt"]},"Reason":{"type":"string","nullable":true,"example":"Storing the feed-in record","description":"The reason for recording the reading"},"ReadBy":{"type":"string","nullable":true,"example":"John Doe","description":"The person who recorded the reading"},"ReadingStatus":{"type":"string","nullable":true,"enum":["valid","in-validation","implausible",null,""]},"MeterReading":{"type":"object","required":["value","meter_id","source"],"properties":{"value":{"type":"number","example":240,"description":"The reading value of the meter"},"read_by":{"$ref":"#/components/schemas/ReadBy"},"reason":{"$ref":"#/components/schemas/Reason"},"meter_id":{"$ref":"#/components/schemas/EntityId","description":"The ID of the associated meter"},"counter_id":{"$ref":"#/components/schemas/EntityId","description":"The ID of the associated meter counter"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the reading (feed-in or feed-out)"},"timestamp":{"type":"string","description":"If the value is not provided, the system will be set with the time the request is processed.","example":"2022-10-10T00:00:00.000Z"},"source":{"$ref":"#/components/schemas/Source","description":"The source of the reading"},"status":{"$ref":"#/components/schemas/ReadingStatus","description":"The status of the reading"}}},"MeterCounter":{"allOf":[{"$ref":"#/components/schemas/BaseEntity"},{"type":"object","required":["_schema"],"properties":{"_id":{"$ref":"#/components/schemas/EntityId"},"_schema":{"type":"string","enum":["meter_counter"]},"obis_number":{"type":"string","example":"A-34","description":"The OBIS number of the meter counter"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the meter counter"},"transformer_ratio":{"type":"number","example":70,"description":"The transformer ratio of the meter counter"},"unit":{"$ref":"#/components/schemas/Unit","description":"The unit of measurement for the meter counter"},"forecast_reading_value":{"type":"string","example":270,"description":"The forecast reading value of the meter counter"},"forecast_as_of":{"type":"string","example":"2022-12-10T00:00:00.000Z","description":"The date as of which the forecast reading value is applicable"},"current_consumption":{"type":"number","example":240,"description":"The current consumption value of the meter counter"},"last_reading":{"type":"string","example":"2022-10-10T00:00:00.000Z","description":"The timestamp of the last reading"},"conversion_factor":{"type":"number","example":3,"description":"The conversion factor for the meter counter"},"tariff_type":{"$ref":"#/components/schemas/TariffType","description":"The tariff type of the meter counter"}}}]},"CounterReadingOnSubmission":{"type":"object","required":["counterId","direction","value"],"properties":{"counterId":{"$ref":"#/components/schemas/Id","description":"The ID of the associated meter counter"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the reading (feed-in or feed-out)"},"unit":{"type":"string","enum":["w","wh","kw","kWh","kvarh","mw","mWh","unit","cubic-meter","hour","day","month","year","percentage"],"description":"The unit of measurement for the reading"},"value":{"type":"number","example":240,"description":"The reading value of the meter counter"}}},"SubmissionMeterReading":{"type":"object","required":["meterId"],"nullable":true,"properties":{"meterId":{"$ref":"#/components/schemas/Id","description":"The ID of the associated meter"},"readings":{"type":"array","items":{"$ref":"#/components/schemas/CounterReadingOnSubmission"},"description":"- The counter readings of a meter\\n- This is only sent when the user is authenticated while submitting a journey\\n"},"readingValue":{"type":"number","example":240,"description":"The reading value of the meter when the counterId is passed or when the meterType is one-tariff"},"readingDate":{"type":"string","description":"If the value is not provided, the system will be set with the time the request is processed.","example":"2022-10-10T10:10:00.000Z"},"readBy":{"type":"string","example":"John Doe","description":"The person who recorded the reading"},"reason":{"$ref":"#/components/schemas/Reason"},"maloId":{"type":"string","example":"A09-123","description":"The MA-LO ID of the meter"},"obisNumber":{"type":"string","example":"A-34","description":"The OBIS number of the meter counter"},"readingUnit":{"$ref":"#/components/schemas/Unit","description":"The unit of measurement for the reading"},"meterType":{"type":"string","enum":["one_tariff","two_tariff","bi_directional"],"description":"The type of the meter"},"feedInValue":{"type":"number","example":240,"description":"The feed-in value of the meter when meterType is one-tariff or bi-directional"},"feedOutValue":{"type":"number","example":240,"description":"The feed-out value of the meter when meterType is bi-directional"},"htValue":{"type":"number","example":240,"description":"The high-peak tariff value of the meter when meterType is two-tariff"},"ntValue":{"type":"number","example":240,"description":"The off-peak tariff value of the meter when meterType is two-tariff"}}},"Unit":{"type":"string","enum":["w","wh","kw","kWh","kvarh","mw","mWh","unit","cubic-meter","hour","day","month","year","percentage"]},"Source":{"type":"string","enum":["ECP","ERP","360","journey-submission"]},"ActionLabel":{"type":"object","properties":{"en":{"type":"string","nullable":true},"de":{"type":"string","nullable":true}}},"Rule":{"type":"object","properties":{"entity":{"type":"string","nullable":true},"attribute":{"type":"string","nullable":true},"attribute_value":{"type":"string","nullable":true}}},"JourneyActions":{"type":"object","properties":{"journey_id":{"type":"string","nullable":true},"action_label":{"type":"object","$ref":"#/components/schemas/ActionLabel","nullable":true},"slug":{"type":"string","nullable":true},"rules":{"type":"array","items":{"$ref":"#/components/schemas/Rule"},"nullable":true}}},"ReadingWithMeter":{"type":"object","properties":{"ma_lo_id":{"type":"string","example":"A09-123","description":"The MA-LO ID of the meter"},"meter_id":{"$ref":"#/components/schemas/Id","description":"The ID of the associated meter"},"obis_number":{"type":"string","example":"A-34","description":"The OBIS number of the meter counter"},"unit":{"$ref":"#/components/schemas/Unit","description":"The unit of measurement for the reading"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the reading"},"tariff_type":{"$ref":"#/components/schemas/TariffType","description":"The tariff type of the reading"},"value":{"type":"number","example":240,"description":"The reading value"},"read_by":{"$ref":"#/components/schemas/ReadBy"},"reason":{"$ref":"#/components/schemas/Reason"},"timestamp":{"type":"string","description":"If the value is not provided, the system will be set with the time the request is processed.","example":"2022-10-10T10:10:00.000Z"},"source":{"$ref":"#/components/schemas/Source","description":"The source of the reading"}}},"ActivityId":{"type":"string","format":"ulid","description":"See https://github.com/ulid/spec","example":"01F130Q52Q6MWSNS8N2AVXV4JN"}},"parameters":{"ActivityIdQueryParam":{"name":"activity_id","description":"Activity to include in event feed","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ActivityId"}},"SkipValidationQueryParam":{"name":"skip_validation","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"When set to true, all validations will be skipped and the system will allow the reading to be created.\\nIf set to false or not provided, the system performs the following validations:\\n Validation Rules (when not skipped)\\n - Previous Reading Check:\\n The new reading must be greater than the previous reading.\\n Example: If the previous reading is 100 and the new reading is 50, the system will reject it.\\n - Subsequent Reading Check\\n The new reading must be less than the next (subsequent) reading, if one exists.\\n Example: If a future reading for 2022-10-10 is 200, and you try to enter 250 for 2022-10-09, it will be rejected.\\n - Future Timestamp Check\\n The reading timestamp must be less than or equal to the current time.\\n Example: If the current time is 2022-10-10T20:00:00Z, a reading with timestamp 2022-10-11T20:00:00Z will not be accepted.\\n - Duplicate Check\\n A reading is not allowed if there\'s already a record with the same meter_id, counter_id, and timestamp`.\\n - Update Check\\n When updating a reading, the system will look for an existing record with the same meter_id, counter_id, and timestamp.\\n If no such record exists, it won\'t throw an error — the update simply won\'t take effect.\\n"}}},"servers":[{"url":"https://metering.sls.epilot.io"}]}')}},t={},r=function r(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}(390),n=exports;for(var s in r)n[s]=r[s];r.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})})();
1
+ (()=>{"use strict";var e={914:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(r(534));t.default=s.default},534:e=>{e.exports=JSON.parse('{"openapi":"3.0.3","info":{"title":"Metering API","version":"1.0.0"},"tags":[{"name":"ECP","description":"APIs defined for a portal user"},{"name":"ECP Admin","description":"APIs defined for a ECP Admin"},{"name":"meter_schema","x-displayName":"Meter","description":"<SchemaDefinition schemaRef=\\"#/components/schemas/Meter\\" />\\n"},{"name":"meter_counter_schema","x-displayName":"Meter Counter","description":"<SchemaDefinition schemaRef=\\"#/components/schemas/MeterCounter\\" />\\n"}],"x-tagGroups":[{"name":"APIs","tags":["ECP","ECP Admin"]},{"name":"Schemas","tags":["meter_schema","meter_counter_schema"]}],"security":[{"EpilotAuth":[]},{"PortalAuth":[]},{"EitherAuth":[]}],"paths":{"/v1/metering/meter":{"get":{"operationId":"getCustomerMeters","summary":"Get Customer Meters","description":"Retrieves all meters related to a customer.","tags":["ECP"],"security":[{"PortalAuth":[]}],"responses":{"200":{"description":"Customer meters retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Meter"},{"type":"object","properties":{"journey_actions":{"$ref":"#/components/schemas/JourneyActions"}}},{"type":"object","properties":{"last_reading":{"type":"string","example":"2022-10-10T00:00:00.000Z","description":"The timestamp of the last reading"},"current_consumption":{"type":"number","example":100.5,"description":"The current consumption of the meter"}}}]}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/contract/meters/{contract_id}":{"get":{"operationId":"getMetersByContractId","summary":"getMetersByContractId","description":"Retrieves all meters related to a contract.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"contract_id","schema":{"$ref":"#/components/schemas/EntityId"},"required":true,"description":"The ID of the Contract."}],"responses":{"200":{"description":"Meters related to the contract retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Meter"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/meter/{id}":{"patch":{"operationId":"updateMeter","summary":"Update Meter","description":"Updates the details of a meter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"id","schema":{"$ref":"#/components/schemas/EntityId"},"required":true,"description":"The ID of the meter."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entity"}}}},"responses":{"200":{"description":"Meter updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Meter"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestUpdateMeter"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"get":{"operationId":"getMeter","summary":"Get Meter","description":"Retrieves the details of a meter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"id","schema":{"$ref":"#/components/schemas/EntityId"},"required":true,"description":"The ID of the meter."}],"responses":{"200":{"description":"Meter retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"entity":{"$ref":"#/components/schemas/Meter"},"journey_actions":{"$ref":"#/components/schemas/JourneyActions"},"relations":{"type":"array","items":{"$ref":"#/components/schemas/EntityItem"}}}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/counter":{"get":{"operationId":"getMeterCounters","summary":"Get Meter Counters","description":"Retrieves all counters for a given meter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"query","name":"meter_id","required":true,"schema":{"$ref":"#/components/schemas/EntityId"}}],"responses":{"200":{"description":"Counters retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MeterCounter"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/counter/{counter_id}":{"get":{"operationId":"getCounterDetails","summary":"Get Counter Details","description":"Retrieves the details of a meter counter.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter."}],"responses":{"200":{"description":"Counter details retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterCounter"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading":{"post":{"operationId":"createMeterReading","summary":"Create Meter Reading","description":"Inserts a new meter reading.","tags":["ECP Admin","ECP"],"security":[{"EitherAuth":[]}],"requestBody":{"description":"Meter reading payload.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeterReading"}}}},"responses":{"200":{"description":"Meter reading created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterReading"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReading"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/readings":{"post":{"operationId":"createMeterReadings","summary":"Create Meter Readings","description":"Inserts multiple meter readings at once. Limited to 100 readings per request.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"query","name":"async","description":"Don\'t wait for the reading to become available in GetReadings API. Useful for large migrations","required":false,"schema":{"type":"boolean","default":true}},{"$ref":"#/components/parameters/ActivityIdQueryParam"},{"$ref":"#/components/parameters/SkipValidationQueryParam"}],"requestBody":{"description":"Meter readings payload. Limited to 100 readings per request.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"readings":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}}}}}}},"responses":{"200":{"description":"Meter readings created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReadings"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/readings/{meter_id}":{"post":{"operationId":"createPortalMeterReadings","summary":"createPortalMeterReadings","description":"Inserts multiple meter readings at once for a given meter. Limited to 2 readings per request.","tags":["ECP"],"security":[{"PortalAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter."}],"requestBody":{"description":"Meter readings payload. Limited to 2 readings per request.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"readings":{"type":"array","items":{"$ref":"#/components/schemas/PortalMeterReading"}}}}}}},"responses":{"200":{"description":"Meter readings created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReadings"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v2/metering/readings":{"post":{"operationId":"batchWriteMeterReadings","summary":"Batch Write Readings","description":"Upserts/Deletes multiple meter readings at once. Limited to 100 readings per request.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"query","name":"async","description":"Don\'t wait for the reading to become available in GetReadings API. Useful for large migrations","required":false,"schema":{"type":"boolean","default":true}},{"$ref":"#/components/parameters/SkipValidationQueryParam"},{"$ref":"#/components/parameters/ActivityIdQueryParam"}],"requestBody":{"description":"Meter readings payload. Limited to 100 readings per request.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identifiers":{"type":"array","items":{"type":"string","description":"The identifier of the meter reading."},"description":"- By default, the system will use combination of counter_id, meter_id, direction, and timestamp to identify a meter reading.\\n- Additional identifiers can be provided to identify a meter reading uniquely.\\n- Example:\\n - [\\"metadata.registration_id\\", \\"metadata.business_unit\\"]\\n - [\\"metadata.registration_id\\", \\"metadata.business_unit\\", \\"external_id\\"]\\n"},"readings":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/MeterReading"},{"properties":{"operation":{"type":"string","enum":["create","update","delete"],"default":"create"}}}]}}}}}}},"responses":{"200":{"description":"Meter readings created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReadings"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading/submission":{"post":{"operationId":"createMeterReadingFromSubmission","summary":"Create Meter Reading from Submission","description":"Creates a reading from a journey submission.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"requestBody":{"description":"Meter reading payload.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"org_id":{"type":"string","example":"123","description":"ID of the organization"},"entity":{"type":"object","additionalProperties":true,"properties":{"_org":{"type":"string","example":"123","description":"ID of the organization"},"meterReadings":{"type":"array","items":{"$ref":"#/components/schemas/SubmissionMeterReading"}}}}}}}}},"responses":{"200":{"description":"Meter reading created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","enum":["Successfully Processed"]}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateMeterReadingFromSubmission"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/allowed/reading/{meter_id}":{"get":{"operationId":"getAllowedReadingForMeter","summary":"getAllowedReadingForMeter","description":"Get allowed reading for the given meter","tags":["ECP Admin","ECP"],"security":[{"EitherAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter."},{"in":"query","name":"timestamp","required":false,"description":"If not provided, the system will default to now.","schema":{"type":"string","example":"2022-10-01T10:10:00.000Z"}}],"responses":{"200":{"description":"Recent reading for the meter fetched successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"counter_id":{"$ref":"#/components/schemas/Id"},"min_value":{"type":"number","description":"Minimum allowed reading value for the meter"},"max_value":{"type":"number","description":"Maximum allowed reading value for the meter"}}}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading/with-meter":{"post":{"operationId":"createReadingWithMeter","summary":"Create Reading with Meter","description":"Creates a reading along with a meter.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"requestBody":{"description":"Meter reading payload.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadingWithMeter"}}}},"responses":{"200":{"description":"Reading with meter created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterReading"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestCreateReadingWithMeter"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/metering/reading/{meter_id}/{counter_id}":{"get":{"operationId":"getReadingsByInterval","summary":"Get Readings by Interval","description":"Retrieves 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_date.\\n","tags":["ECP Admin","ECP"],"security":[{"EitherAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter."},{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter."},{"in":"query","name":"start_date","required":false,"description":"If not provided, the system will default to 2000-01-01.","schema":{"type":"string","example":"2022-10-01"}},{"in":"query","name":"end_date","required":false,"description":"If not provided, the system will default to today\'s date.","schema":{"type":"string","example":"2022-10-10"}},{"in":"query","name":"direction","required":false,"schema":{"$ref":"#/components/schemas/Direction"}},{"in":"query","name":"size","description":"Returns the first n results after the specified offset (from).\\nIf this value is provided as -1, then it returns all results at once.\\n","required":false,"schema":{"type":"number","example":20,"default":20}},{"in":"query","name":"from","required":false,"schema":{"type":"number","example":0,"default":0}},{"in":"query","name":"type","required":true,"description":"Since meter readings are cumulative, users may need to request actual consumptions, which are the difference between consecutive measurements.\\nIf this value is provided as \\"cumulative\\", then actual readings will be returned.\\nIf this value is provided as \\"relative\\", then actual consumption will be returned.\\n","schema":{"type":"string","default":"cumulative","enum":["cumulative","relative"]}},{"in":"query","name":"sort","required":false,"schema":{"type":"string","default":"asc","enum":["asc","desc"]},"description":"If this value is provided as \\"asc\\", then the results will be sorted by the timestamp field in ascending order.\\nIf this value is provided as \\"desc\\", then the results will be sorted by the timestamp field in descending order.\\n"}],"responses":{"200":{"description":"Readings retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/MeterReading"}},"hits":{"type":"number","example":120},"firstRecordCreatedAt":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"put":{"operationId":"updateMeterReading","summary":"Update Meter Reading","description":"Updates a meter reading.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter entity."},{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter entity."},{"in":"query","name":"timestamp","required":true,"description":"The timestamp when the reading was created.","schema":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}],"requestBody":{"description":"Update meter reading payload.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMeterReading"}}}},"responses":{"200":{"description":"Meter reading updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MeterReading"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequestUpdateMeterReading"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"delete":{"operationId":"deleteMeterReading","summary":"Delete Meter Reading","description":"Deletes a meter reading.","tags":["ECP Admin"],"security":[{"EpilotAuth":[]}],"parameters":[{"in":"path","name":"meter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the meter entity."},{"in":"path","name":"counter_id","schema":{"$ref":"#/components/schemas/Id"},"required":true,"description":"The ID of the counter entity."},{"in":"query","name":"timestamp","required":true,"description":"The timestamp when the reading was created.","schema":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}],"responses":{"200":{"description":"Meter reading deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"meterId":{"$ref":"#/components/schemas/Id"},"counterId":{"$ref":"#/components/schemas/Id"},"timestamp":{"type":"string","example":"2022-10-01T20:00:00.000Z"}}}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}},"components":{"responses":{"InvalidRequest":{"description":"The request could not be validated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"Unauthorized":{"description":"Could not authenticate the user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"Forbidden":{"description":"The user is not allowed to access this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResp"}}}},"InvalidRequestUpdateMeter":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["missing_params"]}}}]}}}},"InvalidRequestCreateMeterReading":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["contract_period","no_counter","no_direction","timestamp_future","less_than_previous","greater_than_subsequent","meter_decommissioned"]}}}]}}}},"InvalidRequestCreateMeterReadings":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["too_many_records","timestamp_future","duplicate_reading","less_than_previous","invalid_identifiers","multiple_readings_found"]}}}]}}}},"InvalidRequestCreateMeterReadingFromSubmission":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["timestamp_future","less_than_previous","greater_than_subsequent"]}}}]}}}},"InvalidRequestCreateReadingWithMeter":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["missing_params","timestamp_future","less_than_previous","contract_period","greater_than_subsequent"]}}}]}}}},"InvalidRequestUpdateMeterReading":{"description":"The request could not be validated","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ErrorResp"},{"properties":{"reason":{"type":"string","enum":["missing_params","timestamp_future","less_than_previous","greater_than_subsequent"]}}}]}}}}},"securitySchemes":{"EpilotAuth":{"type":"http","scheme":"bearer","description":"Authorization header with ePilot OAuth2 bearer token","bearerFormat":"JWT"},"PortalAuth":{"type":"http","scheme":"bearer","description":"Authorization header with customer portal OAuth2 bearer token","bearerFormat":"JWT"},"EitherAuth":{"type":"http","scheme":"bearer","description":"Portal or Epilot Bearer Token"},"AsOrganization":{"type":"apiKey","in":"header","name":"x-ivy-org-id","description":"Set organization id as internal user"}},"schemas":{"ErrorResp":{"type":"object","properties":{"message":{"type":"string","description":"Error message"}}},"EntityId":{"type":"string","format":"uuid"},"EntitySlug":{"description":"URL-friendly identifier for the entity schema","type":"string","example":"contact"},"BaseEntity":{"type":"object","properties":{"_id":{"$ref":"#/components/schemas/EntityId","description":"Entity ID","example":"3fa85f64-5717-4562-b3fc-2c963f66afa6"},"_title":{"type":"string","description":"Title of the entity","example":"Example Entity"},"_org":{"type":"string","description":"Organization ID the entity belongs to","example":"123"},"_tags":{"type":"array","items":{"type":"string"},"description":"Array of entity tags","example":["example","mock"]},"_created_at":{"type":"string","format":"date-time","description":"Creation timestamp of the entity","example":"2021-02-09T12:41:43.662Z"},"_updated_at":{"type":"string","format":"date-time","description":"Last update timestamp of the entity","example":"2021-02-09T12:41:43.662Z"}},"required":["_id","_title","_org","_created_at","_updated_at"]},"Entity":{"type":"object","properties":{},"additionalProperties":true},"EntityItem":{"allOf":[{"$ref":"#/components/schemas/BaseEntity"},{"$ref":"#/components/schemas/Entity"}]},"Id":{"type":"string"},"EntityRelation":{"type":"object","properties":{"entity_id":{"$ref":"#/components/schemas/EntityId"},"_slug":{"type":"string","enum":["contact","contract"]}}},"Meter":{"allOf":[{"$ref":"#/components/schemas/BaseEntity"},{"type":"object","required":["_schema"],"properties":{"_schema":{"type":"string","enum":["meter"],"description":"The schema type of the meter"},"ma_lo_id":{"type":"string","example":"A09-123","description":"The MA-LO ID of the meter"},"status":{"type":"string","enum":["active","decommissioned"],"description":"The status of the meter"},"meter_type":{"type":"string","enum":["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"],"description":"The type of the meter"},"tariff_type":{"type":"string","example":"Peak load tariff","description":"The tariff type of the meter"},"meter_number":{"type":"string","example":"J-1093-1AK","description":"The number of the meter"},"sector":{"type":"string","enum":["power","water","gas","district_heating","waste_water"],"description":"The sector to which the meter belongs"},"location":{"type":"object","example":[{"country":"Germany","city":"Koln","postal_code":81475,"street":"Melatengürtel","street_number":71,"additional_info":"5. Etage","_tags":["billing","delivery"]}],"description":"The location information of the meter"},"used_for":{"type":"string","example":"Domestic Usage","description":"The usage purpose of the meter"},"manufacturer":{"type":"string","example":"Energy One","description":"The manufacturer of the meter"},"calibration_date":{"type":"string","example":"2022-10-10T00:00:00.000Z","description":"The calibration date of the meter"},"contract":{"type":"object","properties":{"$relation":{"type":"array","items":{"$ref":"#/components/schemas/EntityRelation"}}},"description":"The contract associated with the meter"},"customer":{"type":"object","properties":{"$relation":{"type":"array","items":{"$ref":"#/components/schemas/EntityRelation"}}},"description":"The customer associated with the meter"}}}]},"Direction":{"type":"string","enum":["feed-in","feed-out"]},"TariffType":{"type":"string","enum":["ht","nt"]},"Reason":{"type":"string","nullable":true,"description":"The 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","enum":["","regular","irregular","last","first","meter_change","contract_change","meter_adjustment"]},"ReasonString":{"type":"string","nullable":true,"deprecated":true,"description":"This field is deprecated. Please use the Reason enum instead.\\n"},"ReadBy":{"type":"string","nullable":true,"example":"John Doe","description":"The person who recorded the reading"},"ReadingStatus":{"type":"string","nullable":true,"enum":["valid","in-validation","implausible",null,""]},"Reading":{"type":"object","required":["value","source"],"properties":{"value":{"type":"number","example":240,"description":"The reading value of the meter"},"read_by":{"$ref":"#/components/schemas/ReadBy"},"reason":{"$ref":"#/components/schemas/Reason"},"meter_id":{"$ref":"#/components/schemas/EntityId","description":"The ID of the associated meter"},"counter_id":{"$ref":"#/components/schemas/EntityId","description":"The ID of the associated meter counter"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the reading (feed-in or feed-out)"},"timestamp":{"type":"string","description":"If the value is not provided, the system will be set with the time the request is processed.","example":"2022-10-10T00:00:00.000Z","format":"date-time"},"source":{"$ref":"#/components/schemas/Source","description":"The source of the reading"},"status":{"$ref":"#/components/schemas/ReadingStatus","description":"The status of the reading"},"external_id":{"type":"string","description":"The external ID of the reading"},"remark":{"type":"string","nullable":true,"description":"A remark or comment for the reading","example":"Customer reported unusual consumption"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional metadata for the reading","example":{"registration_id":"1234567890","business_unit":"ABC"}},"note":{"type":"string","description":"Notes to record a meter reading"},"unit":{"$ref":"#/components/schemas/Unit","description":"The unit of measurement for the reading"}}},"MeterReading":{"allOf":[{"$ref":"#/components/schemas/Reading"},{"required":["meter_id"]}]},"PortalMeterReading":{"allOf":[{"$ref":"#/components/schemas/Reading"},{"required":["counter_id"]}]},"UpdateMeterReading":{"type":"object","required":["value","meter_id","source"],"properties":{"value":{"type":"number","example":240,"description":"The reading value of the meter"},"read_by":{"$ref":"#/components/schemas/ReadBy"},"reason":{"$ref":"#/components/schemas/ReasonString"},"meter_id":{"$ref":"#/components/schemas/EntityId","description":"The ID of the associated meter"},"counter_id":{"$ref":"#/components/schemas/EntityId","description":"The ID of the associated meter counter"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the reading (feed-in or feed-out)"},"timestamp":{"type":"string","description":"If the value is not provided, the system will be set with the time the request is processed.","example":"2022-10-10T00:00:00.000Z","format":"date-time"},"source":{"$ref":"#/components/schemas/Source","description":"The source of the reading"},"status":{"$ref":"#/components/schemas/ReadingStatus","description":"The status of the reading"},"external_id":{"type":"string","description":"The external ID of the reading"},"remark":{"type":"string","nullable":true,"description":"A remark or comment for the reading","example":"Customer reported unusual consumption"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional metadata for the reading","example":{"registration_id":"1234567890","business_unit":"ABC"}}}},"MeterCounter":{"allOf":[{"$ref":"#/components/schemas/BaseEntity"},{"type":"object","required":["_schema"],"properties":{"_id":{"$ref":"#/components/schemas/EntityId"},"_schema":{"type":"string","enum":["meter_counter"]},"obis_number":{"type":"string","example":"A-34","description":"The OBIS number of the meter counter"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the meter counter"},"transformer_ratio":{"type":"number","example":70,"description":"The transformer ratio of the meter counter"},"unit":{"$ref":"#/components/schemas/Unit","description":"The unit of measurement for the meter counter"},"forecast_reading_value":{"type":"string","example":270,"description":"The forecast reading value of the meter counter"},"forecast_as_of":{"type":"string","example":"2022-12-10T00:00:00.000Z","description":"The date as of which the forecast reading value is applicable"},"current_consumption":{"type":"number","example":240,"description":"The current consumption value of the meter counter"},"last_reading":{"type":"string","example":"2022-10-10T00:00:00.000Z","description":"The timestamp of the last reading"},"conversion_factor":{"type":"number","example":3,"description":"The conversion factor for the meter counter"},"tariff_type":{"$ref":"#/components/schemas/TariffType","description":"The tariff type of the meter counter"}}}]},"CounterReadingOnSubmission":{"type":"object","required":["counterId","direction","value"],"properties":{"counterId":{"$ref":"#/components/schemas/Id","description":"The ID of the associated meter counter"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the reading (feed-in or feed-out)"},"unit":{"$ref":"#/components/schemas/Unit"},"value":{"type":"number","example":240,"description":"The reading value of the meter counter"}}},"SubmissionMeterReading":{"type":"object","required":["meterId"],"nullable":true,"properties":{"meterId":{"$ref":"#/components/schemas/Id","description":"The ID of the associated meter"},"readings":{"type":"array","items":{"$ref":"#/components/schemas/CounterReadingOnSubmission"},"description":"- The counter readings of a meter\\n- This is only sent when the user is authenticated while submitting a journey\\n"},"readingValue":{"type":"number","example":240,"description":"The reading value of the meter when the counterId is passed or when the meterType is one-tariff"},"readingDate":{"type":"string","description":"If the value is not provided, the system will be set with the time the request is processed.","example":"2022-10-10T10:10:00.000Z"},"readBy":{"type":"string","example":"John Doe","description":"The person who recorded the reading"},"reason":{"$ref":"#/components/schemas/Reason"},"maloId":{"type":"string","example":"A09-123","description":"The MA-LO ID of the meter"},"obisNumber":{"type":"string","example":"A-34","description":"The OBIS number of the meter counter"},"readingUnit":{"$ref":"#/components/schemas/Unit","description":"The unit of measurement for the reading"},"meterType":{"type":"string","enum":["one_tariff","two_tariff","bi_directional"],"description":"The type of the meter"},"feedInValue":{"type":"number","example":240,"description":"The feed-in value of the meter when meterType is one-tariff or bi-directional"},"feedOutValue":{"type":"number","example":240,"description":"The feed-out value of the meter when meterType is bi-directional"},"htValue":{"type":"number","example":240,"description":"The high-peak tariff value of the meter when meterType is two-tariff"},"ntValue":{"type":"number","example":240,"description":"The off-peak tariff value of the meter when meterType is two-tariff"}}},"Unit":{"type":"string"},"Source":{"type":"string","enum":["ECP","ERP","360","journey-submission"]},"ActionLabel":{"type":"object","properties":{"en":{"type":"string","nullable":true},"de":{"type":"string","nullable":true}}},"Rule":{"type":"object","properties":{"entity":{"type":"string","nullable":true},"attribute":{"type":"string","nullable":true},"attribute_value":{"type":"string","nullable":true}}},"JourneyActions":{"type":"object","properties":{"journey_id":{"type":"string","nullable":true},"action_label":{"type":"object","$ref":"#/components/schemas/ActionLabel","nullable":true},"slug":{"type":"string","nullable":true},"rules":{"type":"array","items":{"$ref":"#/components/schemas/Rule"},"nullable":true}}},"ReadingWithMeter":{"type":"object","properties":{"ma_lo_id":{"type":"string","example":"A09-123","description":"The MA-LO ID of the meter"},"meter_id":{"$ref":"#/components/schemas/Id","description":"The ID of the associated meter"},"obis_number":{"type":"string","example":"A-34","description":"The OBIS number of the meter counter"},"unit":{"$ref":"#/components/schemas/Unit","description":"The unit of measurement for the reading"},"direction":{"$ref":"#/components/schemas/Direction","description":"The direction of the reading"},"tariff_type":{"$ref":"#/components/schemas/TariffType","description":"The tariff type of the reading"},"value":{"type":"number","example":240,"description":"The reading value"},"read_by":{"$ref":"#/components/schemas/ReadBy"},"reason":{"$ref":"#/components/schemas/Reason"},"timestamp":{"type":"string","description":"If the value is not provided, the system will be set with the time the request is processed.","example":"2022-10-10T10:10:00.000Z"},"source":{"$ref":"#/components/schemas/Source","description":"The source of the reading"}}},"ActivityId":{"type":"string","format":"ulid","description":"See https://github.com/ulid/spec","example":"01F130Q52Q6MWSNS8N2AVXV4JN"}},"parameters":{"ActivityIdQueryParam":{"name":"activity_id","description":"Activity to include in event feed","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ActivityId"}},"SkipValidationQueryParam":{"name":"skip_validation","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"When set to true, all validations will be skipped and the system will allow the reading to be created.\\nIf set to false or not provided, the system performs the following validations:\\n Validation Rules (when not skipped)\\n - Previous Reading Check:\\n The new reading must be greater than the previous reading.\\n Example: If the previous reading is 100 and the new reading is 50, the system will reject it.\\n - Subsequent Reading Check\\n The new reading must be less than the next (subsequent) reading, if one exists.\\n Example: If a future reading for 2022-10-10 is 200, and you try to enter 250 for 2022-10-09, it will be rejected.\\n - Future Timestamp Check\\n The reading timestamp must be less than or equal to the current time.\\n Example: If the current time is 2022-10-10T20:00:00Z, a reading with timestamp 2022-10-11T20:00:00Z will not be accepted.\\n - Duplicate Check\\n A reading is not allowed if there\'s already a record with the same meter_id, counter_id, and timestamp`.\\n - Update Check\\n When updating a reading, the system will look for an existing record with the same meter_id, counter_id, and timestamp.\\n If no such record exists, it won\'t throw an error — the update simply won\'t take effect.\\n"}}},"servers":[{"url":"https://metering.sls.epilot.io"}]}')}},t={},r=function r(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}(914),n=exports;for(var s in r)n[s]=r[s];r.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})})();
package/dist/openapi.d.ts CHANGED
@@ -45,7 +45,7 @@ declare namespace Components {
45
45
  * Error message
46
46
  */
47
47
  message?: string;
48
- reason?: "too_many_records" | "timestamp_future" | "duplicate_reading" | "less_than_previous";
48
+ reason?: "too_many_records" | "timestamp_future" | "duplicate_reading" | "less_than_previous" | "invalid_identifiers" | "multiple_readings_found";
49
49
  }
50
50
  export interface InvalidRequestCreateReadingWithMeter {
51
51
  /**
@@ -132,10 +132,7 @@ declare namespace Components {
132
132
  * The direction of the reading (feed-in or feed-out)
133
133
  */
134
134
  direction: Direction;
135
- /**
136
- * The unit of measurement for the reading
137
- */
138
- unit?: "w" | "wh" | "kw" | "kWh" | "kvarh" | "mw" | "mWh" | "unit" | "cubic-meter" | "hour" | "day" | "month" | "year" | "percentage";
135
+ unit?: Unit;
139
136
  /**
140
137
  * The reading value of the meter counter
141
138
  * example:
@@ -426,14 +423,134 @@ declare namespace Components {
426
423
  ReadBy;
427
424
  reason?: /**
428
425
  * The reason for recording the reading
426
+ * If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text
427
+ *
428
+ */
429
+ Reason;
430
+ meter_id: EntityId /* uuid */;
431
+ counter_id?: EntityId /* uuid */;
432
+ direction?: Direction;
433
+ /**
434
+ * If the value is not provided, the system will be set with the time the request is processed.
435
+ * example:
436
+ * 2022-10-10T00:00:00.000Z
437
+ */
438
+ timestamp?: string; // date-time
439
+ source: Source;
440
+ status?: ReadingStatus;
441
+ /**
442
+ * The external ID of the reading
443
+ */
444
+ external_id?: string;
445
+ /**
446
+ * A remark or comment for the reading
447
+ * example:
448
+ * Customer reported unusual consumption
449
+ */
450
+ remark?: string | null;
451
+ /**
452
+ * Additional metadata for the reading
453
+ * example:
454
+ * {
455
+ * "registration_id": "1234567890",
456
+ * "business_unit": "ABC"
457
+ * }
458
+ */
459
+ metadata?: {
460
+ [name: string]: string;
461
+ };
462
+ /**
463
+ * Notes to record a meter reading
464
+ */
465
+ note?: string;
466
+ unit?: Unit;
467
+ }
468
+ export interface PortalMeterReading {
469
+ /**
470
+ * The reading value of the meter
471
+ * example:
472
+ * 240
473
+ */
474
+ value: number;
475
+ read_by?: /**
476
+ * The person who recorded the reading
429
477
  * example:
430
- * Storing the feed-in record
478
+ * John Doe
479
+ */
480
+ ReadBy;
481
+ reason?: /**
482
+ * The reason for recording the reading
483
+ * If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text
484
+ *
485
+ */
486
+ Reason;
487
+ meter_id?: EntityId /* uuid */;
488
+ counter_id: EntityId /* uuid */;
489
+ direction?: Direction;
490
+ /**
491
+ * If the value is not provided, the system will be set with the time the request is processed.
492
+ * example:
493
+ * 2022-10-10T00:00:00.000Z
494
+ */
495
+ timestamp?: string; // date-time
496
+ source: Source;
497
+ status?: ReadingStatus;
498
+ /**
499
+ * The external ID of the reading
500
+ */
501
+ external_id?: string;
502
+ /**
503
+ * A remark or comment for the reading
504
+ * example:
505
+ * Customer reported unusual consumption
506
+ */
507
+ remark?: string | null;
508
+ /**
509
+ * Additional metadata for the reading
510
+ * example:
511
+ * {
512
+ * "registration_id": "1234567890",
513
+ * "business_unit": "ABC"
514
+ * }
515
+ */
516
+ metadata?: {
517
+ [name: string]: string;
518
+ };
519
+ /**
520
+ * Notes to record a meter reading
521
+ */
522
+ note?: string;
523
+ unit?: Unit;
524
+ }
525
+ /**
526
+ * The person who recorded the reading
527
+ * example:
528
+ * John Doe
529
+ */
530
+ export type ReadBy = string | null;
531
+ export interface Reading {
532
+ /**
533
+ * The reading value of the meter
534
+ * example:
535
+ * 240
536
+ */
537
+ value: number;
538
+ read_by?: /**
539
+ * The person who recorded the reading
540
+ * example:
541
+ * John Doe
542
+ */
543
+ ReadBy;
544
+ reason?: /**
545
+ * The reason for recording the reading
546
+ * If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text
547
+ *
431
548
  */
432
549
  Reason;
433
550
  /**
434
551
  * The ID of the associated meter
435
552
  */
436
- meter_id: EntityId /* uuid */;
553
+ meter_id?: EntityId /* uuid */;
437
554
  /**
438
555
  * The ID of the associated meter counter
439
556
  */
@@ -447,7 +564,7 @@ declare namespace Components {
447
564
  * example:
448
565
  * 2022-10-10T00:00:00.000Z
449
566
  */
450
- timestamp?: string;
567
+ timestamp?: string; // date-time
451
568
  /**
452
569
  * The source of the reading
453
570
  */
@@ -456,13 +573,36 @@ declare namespace Components {
456
573
  * The status of the reading
457
574
  */
458
575
  status?: ReadingStatus;
576
+ /**
577
+ * The external ID of the reading
578
+ */
579
+ external_id?: string;
580
+ /**
581
+ * A remark or comment for the reading
582
+ * example:
583
+ * Customer reported unusual consumption
584
+ */
585
+ remark?: string | null;
586
+ /**
587
+ * Additional metadata for the reading
588
+ * example:
589
+ * {
590
+ * "registration_id": "1234567890",
591
+ * "business_unit": "ABC"
592
+ * }
593
+ */
594
+ metadata?: {
595
+ [name: string]: string;
596
+ };
597
+ /**
598
+ * Notes to record a meter reading
599
+ */
600
+ note?: string;
601
+ /**
602
+ * The unit of measurement for the reading
603
+ */
604
+ unit?: Unit;
459
605
  }
460
- /**
461
- * The person who recorded the reading
462
- * example:
463
- * John Doe
464
- */
465
- export type ReadBy = string | null;
466
606
  export type ReadingStatus = "valid" | "in-validation" | "implausible" | null | "";
467
607
  export interface ReadingWithMeter {
468
608
  /**
@@ -507,8 +647,8 @@ declare namespace Components {
507
647
  ReadBy;
508
648
  reason?: /**
509
649
  * The reason for recording the reading
510
- * example:
511
- * Storing the feed-in record
650
+ * If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text
651
+ *
512
652
  */
513
653
  Reason;
514
654
  /**
@@ -524,10 +664,15 @@ declare namespace Components {
524
664
  }
525
665
  /**
526
666
  * The reason for recording the reading
527
- * example:
528
- * Storing the feed-in record
667
+ * If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text
668
+ *
529
669
  */
530
- export type Reason = string | null;
670
+ export type Reason = "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment";
671
+ /**
672
+ * This field is deprecated. Please use the Reason enum instead.
673
+ *
674
+ */
675
+ export type ReasonString = string | null;
531
676
  export interface Rule {
532
677
  entity?: string | null;
533
678
  attribute?: string | null;
@@ -565,8 +710,8 @@ declare namespace Components {
565
710
  readBy?: string;
566
711
  reason?: /**
567
712
  * The reason for recording the reading
568
- * example:
569
- * Storing the feed-in record
713
+ * If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text
714
+ *
570
715
  */
571
716
  Reason;
572
717
  /**
@@ -615,7 +760,73 @@ declare namespace Components {
615
760
  ntValue?: number;
616
761
  } | null;
617
762
  export type TariffType = "ht" | "nt";
618
- export type Unit = "w" | "wh" | "kw" | "kWh" | "kvarh" | "mw" | "mWh" | "unit" | "cubic-meter" | "hour" | "day" | "month" | "year" | "percentage";
763
+ export type Unit = string;
764
+ export interface UpdateMeterReading {
765
+ /**
766
+ * The reading value of the meter
767
+ * example:
768
+ * 240
769
+ */
770
+ value: number;
771
+ read_by?: /**
772
+ * The person who recorded the reading
773
+ * example:
774
+ * John Doe
775
+ */
776
+ ReadBy;
777
+ reason?: /**
778
+ * This field is deprecated. Please use the Reason enum instead.
779
+ *
780
+ */
781
+ ReasonString;
782
+ /**
783
+ * The ID of the associated meter
784
+ */
785
+ meter_id: EntityId /* uuid */;
786
+ /**
787
+ * The ID of the associated meter counter
788
+ */
789
+ counter_id?: EntityId /* uuid */;
790
+ /**
791
+ * The direction of the reading (feed-in or feed-out)
792
+ */
793
+ direction?: Direction;
794
+ /**
795
+ * If the value is not provided, the system will be set with the time the request is processed.
796
+ * example:
797
+ * 2022-10-10T00:00:00.000Z
798
+ */
799
+ timestamp?: string; // date-time
800
+ /**
801
+ * The source of the reading
802
+ */
803
+ source: Source;
804
+ /**
805
+ * The status of the reading
806
+ */
807
+ status?: ReadingStatus;
808
+ /**
809
+ * The external ID of the reading
810
+ */
811
+ external_id?: string;
812
+ /**
813
+ * A remark or comment for the reading
814
+ * example:
815
+ * Customer reported unusual consumption
816
+ */
817
+ remark?: string | null;
818
+ /**
819
+ * Additional metadata for the reading
820
+ * example:
821
+ * {
822
+ * "registration_id": "1234567890",
823
+ * "business_unit": "ABC"
824
+ * }
825
+ */
826
+ metadata?: {
827
+ [name: string]: string;
828
+ };
829
+ }
619
830
  }
620
831
  }
621
832
  declare namespace Paths {
@@ -636,6 +847,15 @@ declare namespace Paths {
636
847
  activity_id?: Parameters.ActivityId;
637
848
  }
638
849
  export interface RequestBody {
850
+ /**
851
+ * - By default, the system will use combination of counter_id, meter_id, direction, and timestamp to identify a meter reading.
852
+ * - Additional identifiers can be provided to identify a meter reading uniquely.
853
+ * - Example:
854
+ * - ["metadata.registration_id", "metadata.business_unit"]
855
+ * - ["metadata.registration_id", "metadata.business_unit", "external_id"]
856
+ *
857
+ */
858
+ identifiers?: string[];
639
859
  readings?: {
640
860
  /**
641
861
  * The reading value of the meter
@@ -651,8 +871,8 @@ declare namespace Paths {
651
871
  Components.Schemas.ReadBy;
652
872
  reason?: /**
653
873
  * The reason for recording the reading
654
- * example:
655
- * Storing the feed-in record
874
+ * If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text
875
+ *
656
876
  */
657
877
  Components.Schemas.Reason;
658
878
  meter_id: Components.Schemas.EntityId /* uuid */;
@@ -663,9 +883,35 @@ declare namespace Paths {
663
883
  * example:
664
884
  * 2022-10-10T00:00:00.000Z
665
885
  */
666
- timestamp?: string;
886
+ timestamp?: string; // date-time
667
887
  source: Components.Schemas.Source;
668
888
  status?: Components.Schemas.ReadingStatus;
889
+ /**
890
+ * The external ID of the reading
891
+ */
892
+ external_id?: string;
893
+ /**
894
+ * A remark or comment for the reading
895
+ * example:
896
+ * Customer reported unusual consumption
897
+ */
898
+ remark?: string | null;
899
+ /**
900
+ * Additional metadata for the reading
901
+ * example:
902
+ * {
903
+ * "registration_id": "1234567890",
904
+ * "business_unit": "ABC"
905
+ * }
906
+ */
907
+ metadata?: {
908
+ [name: string]: string;
909
+ };
910
+ /**
911
+ * Notes to record a meter reading
912
+ */
913
+ note?: string;
914
+ unit?: Components.Schemas.Unit;
669
915
  operation?: "create" | "update" | "delete";
670
916
  }[];
671
917
  }
@@ -750,6 +996,26 @@ declare namespace Paths {
750
996
  export type $500 = Components.Responses.InternalServerError;
751
997
  }
752
998
  }
999
+ namespace CreatePortalMeterReadings {
1000
+ namespace Parameters {
1001
+ export type MeterId = Components.Schemas.Id;
1002
+ }
1003
+ export interface PathParameters {
1004
+ meter_id: Parameters.MeterId;
1005
+ }
1006
+ export interface RequestBody {
1007
+ readings?: Components.Schemas.PortalMeterReading[];
1008
+ }
1009
+ namespace Responses {
1010
+ export interface $200 {
1011
+ data?: Components.Schemas.MeterReading[];
1012
+ }
1013
+ export type $400 = Components.Responses.InvalidRequestCreateMeterReadings;
1014
+ export type $401 = Components.Responses.Unauthorized;
1015
+ export type $403 = Components.Responses.Forbidden;
1016
+ export type $500 = Components.Responses.InternalServerError;
1017
+ }
1018
+ }
753
1019
  namespace CreateReadingWithMeter {
754
1020
  export type RequestBody = Components.Schemas.ReadingWithMeter;
755
1021
  namespace Responses {
@@ -1172,7 +1438,7 @@ declare namespace Paths {
1172
1438
  */
1173
1439
  Parameters.Timestamp;
1174
1440
  }
1175
- export type RequestBody = Components.Schemas.MeterReading;
1441
+ export type RequestBody = Components.Schemas.UpdateMeterReading;
1176
1442
  namespace Responses {
1177
1443
  export interface $200 {
1178
1444
  data?: Components.Schemas.MeterReading;
@@ -1185,7 +1451,6 @@ declare namespace Paths {
1185
1451
  }
1186
1452
  }
1187
1453
 
1188
-
1189
1454
  export interface OperationMethods {
1190
1455
  /**
1191
1456
  * getCustomerMeters - Get Customer Meters
@@ -1267,6 +1532,16 @@ export interface OperationMethods {
1267
1532
  data?: Paths.CreateMeterReadings.RequestBody,
1268
1533
  config?: AxiosRequestConfig
1269
1534
  ): OperationResponse<Paths.CreateMeterReadings.Responses.$200>
1535
+ /**
1536
+ * createPortalMeterReadings - createPortalMeterReadings
1537
+ *
1538
+ * Inserts multiple meter readings at once for a given meter. Limited to 2 readings per request.
1539
+ */
1540
+ 'createPortalMeterReadings'(
1541
+ parameters?: Parameters<Paths.CreatePortalMeterReadings.PathParameters> | null,
1542
+ data?: Paths.CreatePortalMeterReadings.RequestBody,
1543
+ config?: AxiosRequestConfig
1544
+ ): OperationResponse<Paths.CreatePortalMeterReadings.Responses.$200>
1270
1545
  /**
1271
1546
  * batchWriteMeterReadings - Batch Write Readings
1272
1547
  *
@@ -1437,6 +1712,18 @@ export interface PathsDictionary {
1437
1712
  config?: AxiosRequestConfig
1438
1713
  ): OperationResponse<Paths.CreateMeterReadings.Responses.$200>
1439
1714
  }
1715
+ ['/v1/metering/readings/{meter_id}']: {
1716
+ /**
1717
+ * createPortalMeterReadings - createPortalMeterReadings
1718
+ *
1719
+ * Inserts multiple meter readings at once for a given meter. Limited to 2 readings per request.
1720
+ */
1721
+ 'post'(
1722
+ parameters?: Parameters<Paths.CreatePortalMeterReadings.PathParameters> | null,
1723
+ data?: Paths.CreatePortalMeterReadings.RequestBody,
1724
+ config?: AxiosRequestConfig
1725
+ ): OperationResponse<Paths.CreatePortalMeterReadings.Responses.$200>
1726
+ }
1440
1727
  ['/v2/metering/readings']: {
1441
1728
  /**
1442
1729
  * batchWriteMeterReadings - Batch Write Readings
@@ -1524,7 +1811,6 @@ export interface PathsDictionary {
1524
1811
 
1525
1812
  export type Client = OpenAPIClient<OperationMethods, PathsDictionary>
1526
1813
 
1527
-
1528
1814
  export type ActionLabel = Components.Schemas.ActionLabel;
1529
1815
  export type ActivityId = Components.Schemas.ActivityId;
1530
1816
  export type BaseEntity = Components.Schemas.BaseEntity;
@@ -1541,12 +1827,16 @@ export type JourneyActions = Components.Schemas.JourneyActions;
1541
1827
  export type Meter = Components.Schemas.Meter;
1542
1828
  export type MeterCounter = Components.Schemas.MeterCounter;
1543
1829
  export type MeterReading = Components.Schemas.MeterReading;
1830
+ export type PortalMeterReading = Components.Schemas.PortalMeterReading;
1544
1831
  export type ReadBy = Components.Schemas.ReadBy;
1832
+ export type Reading = Components.Schemas.Reading;
1545
1833
  export type ReadingStatus = Components.Schemas.ReadingStatus;
1546
1834
  export type ReadingWithMeter = Components.Schemas.ReadingWithMeter;
1547
1835
  export type Reason = Components.Schemas.Reason;
1836
+ export type ReasonString = Components.Schemas.ReasonString;
1548
1837
  export type Rule = Components.Schemas.Rule;
1549
1838
  export type Source = Components.Schemas.Source;
1550
1839
  export type SubmissionMeterReading = Components.Schemas.SubmissionMeterReading;
1551
1840
  export type TariffType = Components.Schemas.TariffType;
1552
1841
  export type Unit = Components.Schemas.Unit;
1842
+ export type UpdateMeterReading = Components.Schemas.UpdateMeterReading;
package/dist/openapi.json CHANGED
@@ -567,6 +567,83 @@
567
567
  }
568
568
  }
569
569
  },
570
+ "/v1/metering/readings/{meter_id}": {
571
+ "post": {
572
+ "operationId": "createPortalMeterReadings",
573
+ "summary": "createPortalMeterReadings",
574
+ "description": "Inserts multiple meter readings at once for a given meter. Limited to 2 readings per request.",
575
+ "tags": [
576
+ "ECP"
577
+ ],
578
+ "security": [
579
+ {
580
+ "PortalAuth": []
581
+ }
582
+ ],
583
+ "parameters": [
584
+ {
585
+ "in": "path",
586
+ "name": "meter_id",
587
+ "schema": {
588
+ "$ref": "#/components/schemas/Id"
589
+ },
590
+ "required": true,
591
+ "description": "The ID of the meter."
592
+ }
593
+ ],
594
+ "requestBody": {
595
+ "description": "Meter readings payload. Limited to 2 readings per request.",
596
+ "required": true,
597
+ "content": {
598
+ "application/json": {
599
+ "schema": {
600
+ "type": "object",
601
+ "properties": {
602
+ "readings": {
603
+ "type": "array",
604
+ "items": {
605
+ "$ref": "#/components/schemas/PortalMeterReading"
606
+ }
607
+ }
608
+ }
609
+ }
610
+ }
611
+ }
612
+ },
613
+ "responses": {
614
+ "200": {
615
+ "description": "Meter readings created successfully.",
616
+ "content": {
617
+ "application/json": {
618
+ "schema": {
619
+ "type": "object",
620
+ "properties": {
621
+ "data": {
622
+ "type": "array",
623
+ "items": {
624
+ "$ref": "#/components/schemas/MeterReading"
625
+ }
626
+ }
627
+ }
628
+ }
629
+ }
630
+ }
631
+ },
632
+ "400": {
633
+ "$ref": "#/components/responses/InvalidRequestCreateMeterReadings"
634
+ },
635
+ "401": {
636
+ "$ref": "#/components/responses/Unauthorized"
637
+ },
638
+ "403": {
639
+ "$ref": "#/components/responses/Forbidden"
640
+ },
641
+ "500": {
642
+ "$ref": "#/components/responses/InternalServerError"
643
+ }
644
+ }
645
+ }
646
+ },
570
647
  "/v2/metering/readings": {
571
648
  "post": {
572
649
  "operationId": "batchWriteMeterReadings",
@@ -606,6 +683,14 @@
606
683
  "schema": {
607
684
  "type": "object",
608
685
  "properties": {
686
+ "identifiers": {
687
+ "type": "array",
688
+ "items": {
689
+ "type": "string",
690
+ "description": "The identifier of the meter reading."
691
+ },
692
+ "description": "- By default, the system will use combination of counter_id, meter_id, direction, and timestamp to identify a meter reading.\n- Additional identifiers can be provided to identify a meter reading uniquely.\n- Example:\n - [\"metadata.registration_id\", \"metadata.business_unit\"]\n - [\"metadata.registration_id\", \"metadata.business_unit\", \"external_id\"]\n"
693
+ },
609
694
  "readings": {
610
695
  "type": "array",
611
696
  "items": {
@@ -1088,7 +1173,7 @@
1088
1173
  "content": {
1089
1174
  "application/json": {
1090
1175
  "schema": {
1091
- "$ref": "#/components/schemas/MeterReading"
1176
+ "$ref": "#/components/schemas/UpdateMeterReading"
1092
1177
  }
1093
1178
  }
1094
1179
  }
@@ -1332,7 +1417,9 @@
1332
1417
  "too_many_records",
1333
1418
  "timestamp_future",
1334
1419
  "duplicate_reading",
1335
- "less_than_previous"
1420
+ "less_than_previous",
1421
+ "invalid_identifiers",
1422
+ "multiple_readings_found"
1336
1423
  ]
1337
1424
  }
1338
1425
  }
@@ -1699,8 +1786,23 @@
1699
1786
  "Reason": {
1700
1787
  "type": "string",
1701
1788
  "nullable": true,
1702
- "example": "Storing the feed-in record",
1703
- "description": "The reason for recording the reading"
1789
+ "description": "The 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",
1790
+ "enum": [
1791
+ "",
1792
+ "regular",
1793
+ "irregular",
1794
+ "last",
1795
+ "first",
1796
+ "meter_change",
1797
+ "contract_change",
1798
+ "meter_adjustment"
1799
+ ]
1800
+ },
1801
+ "ReasonString": {
1802
+ "type": "string",
1803
+ "nullable": true,
1804
+ "deprecated": true,
1805
+ "description": "This field is deprecated. Please use the Reason enum instead.\n"
1704
1806
  },
1705
1807
  "ReadBy": {
1706
1808
  "type": "string",
@@ -1719,7 +1821,106 @@
1719
1821
  ""
1720
1822
  ]
1721
1823
  },
1824
+ "Reading": {
1825
+ "type": "object",
1826
+ "required": [
1827
+ "value",
1828
+ "source"
1829
+ ],
1830
+ "properties": {
1831
+ "value": {
1832
+ "type": "number",
1833
+ "example": 240,
1834
+ "description": "The reading value of the meter"
1835
+ },
1836
+ "read_by": {
1837
+ "$ref": "#/components/schemas/ReadBy"
1838
+ },
1839
+ "reason": {
1840
+ "$ref": "#/components/schemas/Reason"
1841
+ },
1842
+ "meter_id": {
1843
+ "$ref": "#/components/schemas/EntityId",
1844
+ "description": "The ID of the associated meter"
1845
+ },
1846
+ "counter_id": {
1847
+ "$ref": "#/components/schemas/EntityId",
1848
+ "description": "The ID of the associated meter counter"
1849
+ },
1850
+ "direction": {
1851
+ "$ref": "#/components/schemas/Direction",
1852
+ "description": "The direction of the reading (feed-in or feed-out)"
1853
+ },
1854
+ "timestamp": {
1855
+ "type": "string",
1856
+ "description": "If the value is not provided, the system will be set with the time the request is processed.",
1857
+ "example": "2022-10-10T00:00:00.000Z",
1858
+ "format": "date-time"
1859
+ },
1860
+ "source": {
1861
+ "$ref": "#/components/schemas/Source",
1862
+ "description": "The source of the reading"
1863
+ },
1864
+ "status": {
1865
+ "$ref": "#/components/schemas/ReadingStatus",
1866
+ "description": "The status of the reading"
1867
+ },
1868
+ "external_id": {
1869
+ "type": "string",
1870
+ "description": "The external ID of the reading"
1871
+ },
1872
+ "remark": {
1873
+ "type": "string",
1874
+ "nullable": true,
1875
+ "description": "A remark or comment for the reading",
1876
+ "example": "Customer reported unusual consumption"
1877
+ },
1878
+ "metadata": {
1879
+ "type": "object",
1880
+ "additionalProperties": {
1881
+ "type": "string"
1882
+ },
1883
+ "description": "Additional metadata for the reading",
1884
+ "example": {
1885
+ "registration_id": "1234567890",
1886
+ "business_unit": "ABC"
1887
+ }
1888
+ },
1889
+ "note": {
1890
+ "type": "string",
1891
+ "description": "Notes to record a meter reading"
1892
+ },
1893
+ "unit": {
1894
+ "$ref": "#/components/schemas/Unit",
1895
+ "description": "The unit of measurement for the reading"
1896
+ }
1897
+ }
1898
+ },
1722
1899
  "MeterReading": {
1900
+ "allOf": [
1901
+ {
1902
+ "$ref": "#/components/schemas/Reading"
1903
+ },
1904
+ {
1905
+ "required": [
1906
+ "meter_id"
1907
+ ]
1908
+ }
1909
+ ]
1910
+ },
1911
+ "PortalMeterReading": {
1912
+ "allOf": [
1913
+ {
1914
+ "$ref": "#/components/schemas/Reading"
1915
+ },
1916
+ {
1917
+ "required": [
1918
+ "counter_id"
1919
+ ]
1920
+ }
1921
+ ]
1922
+ },
1923
+ "UpdateMeterReading": {
1723
1924
  "type": "object",
1724
1925
  "required": [
1725
1926
  "value",
@@ -1736,7 +1937,7 @@
1736
1937
  "$ref": "#/components/schemas/ReadBy"
1737
1938
  },
1738
1939
  "reason": {
1739
- "$ref": "#/components/schemas/Reason"
1940
+ "$ref": "#/components/schemas/ReasonString"
1740
1941
  },
1741
1942
  "meter_id": {
1742
1943
  "$ref": "#/components/schemas/EntityId",
@@ -1753,7 +1954,8 @@
1753
1954
  "timestamp": {
1754
1955
  "type": "string",
1755
1956
  "description": "If the value is not provided, the system will be set with the time the request is processed.",
1756
- "example": "2022-10-10T00:00:00.000Z"
1957
+ "example": "2022-10-10T00:00:00.000Z",
1958
+ "format": "date-time"
1757
1959
  },
1758
1960
  "source": {
1759
1961
  "$ref": "#/components/schemas/Source",
@@ -1762,6 +1964,27 @@
1762
1964
  "status": {
1763
1965
  "$ref": "#/components/schemas/ReadingStatus",
1764
1966
  "description": "The status of the reading"
1967
+ },
1968
+ "external_id": {
1969
+ "type": "string",
1970
+ "description": "The external ID of the reading"
1971
+ },
1972
+ "remark": {
1973
+ "type": "string",
1974
+ "nullable": true,
1975
+ "description": "A remark or comment for the reading",
1976
+ "example": "Customer reported unusual consumption"
1977
+ },
1978
+ "metadata": {
1979
+ "type": "object",
1980
+ "additionalProperties": {
1981
+ "type": "string"
1982
+ },
1983
+ "description": "Additional metadata for the reading",
1984
+ "example": {
1985
+ "registration_id": "1234567890",
1986
+ "business_unit": "ABC"
1987
+ }
1765
1988
  }
1766
1989
  }
1767
1990
  },
@@ -1853,24 +2076,7 @@
1853
2076
  "description": "The direction of the reading (feed-in or feed-out)"
1854
2077
  },
1855
2078
  "unit": {
1856
- "type": "string",
1857
- "enum": [
1858
- "w",
1859
- "wh",
1860
- "kw",
1861
- "kWh",
1862
- "kvarh",
1863
- "mw",
1864
- "mWh",
1865
- "unit",
1866
- "cubic-meter",
1867
- "hour",
1868
- "day",
1869
- "month",
1870
- "year",
1871
- "percentage"
1872
- ],
1873
- "description": "The unit of measurement for the reading"
2079
+ "$ref": "#/components/schemas/Unit"
1874
2080
  },
1875
2081
  "value": {
1876
2082
  "type": "number",
@@ -1961,23 +2167,7 @@
1961
2167
  }
1962
2168
  },
1963
2169
  "Unit": {
1964
- "type": "string",
1965
- "enum": [
1966
- "w",
1967
- "wh",
1968
- "kw",
1969
- "kWh",
1970
- "kvarh",
1971
- "mw",
1972
- "mWh",
1973
- "unit",
1974
- "cubic-meter",
1975
- "hour",
1976
- "day",
1977
- "month",
1978
- "year",
1979
- "percentage"
1980
- ]
2170
+ "type": "string"
1981
2171
  },
1982
2172
  "Source": {
1983
2173
  "type": "string",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/metering-client",
3
- "version": "0.8.2",
3
+ "version": "0.9.1",
4
4
  "description": "API Client for epilot Metering API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,6 +18,18 @@
18
18
  "sdk",
19
19
  "metering"
20
20
  ],
21
+ "scripts": {
22
+ "test": "jest",
23
+ "typescript": "tsc",
24
+ "bundle-definition": "webpack",
25
+ "openapi": "node ../../scripts/update-openapi.js https://docs.api.epilot.io/metering.yaml",
26
+ "typegen": "openapi typegen src/openapi.json --client -b '/* eslint-disable */' > src/openapi.d.ts",
27
+ "build": "tsc && npm run build:patch && npm run bundle-definition",
28
+ "build:patch": "sed -i'' -e '/^__exportStar.*openapi.*$/d' dist/index.js",
29
+ "build:watch": "npm run build && tsc -w",
30
+ "prepublishOnly": "npm run typegen && npm run build",
31
+ "lint": "pnpm exec eslint src"
32
+ },
21
33
  "files": [
22
34
  "*.js",
23
35
  "*.d.ts",
@@ -58,16 +70,5 @@
58
70
  "typescript": "^4.1.3",
59
71
  "webpack": "^5.18.0",
60
72
  "webpack-cli": "^4.4.0"
61
- },
62
- "scripts": {
63
- "test": "jest",
64
- "typescript": "tsc",
65
- "bundle-definition": "webpack",
66
- "openapi": "node ../../scripts/update-openapi.js https://docs.api.epilot.io/metering.yaml",
67
- "typegen": "openapi typegen src/openapi.json --client -b '/* eslint-disable */' > src/openapi.d.ts",
68
- "build": "tsc && npm run build:patch && npm run bundle-definition",
69
- "build:patch": "sed -i'' -e '/^__exportStar.*openapi.*$/d' dist/index.js",
70
- "build:watch": "npm run build && tsc -w",
71
- "lint": "pnpm exec eslint src"
72
73
  }
73
- }
74
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2025 epilot GmbH
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.