From db19a8f8059e56c0b1dd27062a778816526bc59a Mon Sep 17 00:00:00 2001 From: Donald Coffin Date: Sat, 7 Feb 2026 22:36:16 -0500 Subject: [PATCH 1/4] feat: add customer resource schemas from customer_4.1.xsd Add 34 customer resource schema files with customer namespace: - 9 main resources: Customer, CustomerAccount, CustomerAgreement, EndDevice, Meter, ServiceLocation, ServiceSupplier, Statement, ProgramDateIdMappings - 25 supporting types: Organisation, StreetAddress, Document, Agreement, Asset, Location, Status, Priority, and more All schemas use http://naesb.org/espi/customer namespace with 'customer' prefix per ESPI 4.1 specification. Co-Authored-By: Claude Sonnet 4.5 --- .../components/schemas/AcceptanceTest.yaml | 43 +++++++ .../schemas/AccountNotification.yaml | 46 ++++++++ openapi/components/schemas/Agreement.yaml | 23 ++++ openapi/components/schemas/Asset.yaml | 84 ++++++++++++++ openapi/components/schemas/BatchItemInfo.yaml | 42 +++++++ openapi/components/schemas/Customer.yaml | 72 ++++++++++++ .../components/schemas/CustomerAccount.yaml | 59 ++++++++++ .../components/schemas/CustomerAgreement.yaml | 85 ++++++++++++++ .../schemas/DemandResponseProgram.yaml | 53 +++++++++ openapi/components/schemas/Document.yaml | 81 +++++++++++++ .../components/schemas/ElectronicAddress.yaml | 77 +++++++++++++ openapi/components/schemas/EndDevice.yaml | 43 +++++++ openapi/components/schemas/LifecycleDate.yaml | 72 ++++++++++++ openapi/components/schemas/Location.yaml | 61 ++++++++++ openapi/components/schemas/Meter.yaml | 40 +++++++ .../components/schemas/MeterMultiplier.yaml | 26 +++++ openapi/components/schemas/Organisation.yaml | 32 ++++++ openapi/components/schemas/PositionPoint.yaml | 32 ++++++ .../components/schemas/PricingStructure.yaml | 11 ++ openapi/components/schemas/Priority.yaml | 32 ++++++ openapi/components/schemas/ProgramDate.yaml | 24 ++++ .../schemas/ProgramDateIdMapping.yaml | 52 +++++++++ .../schemas/ProgramDateIdMappings.yaml | 18 +++ .../components/schemas/ServiceLocation.yaml | 43 +++++++ .../components/schemas/ServiceSupplier.yaml | 41 +++++++ openapi/components/schemas/Statement.yaml | 27 +++++ openapi/components/schemas/StatementRef.yaml | 36 ++++++ openapi/components/schemas/Status.yaml | 40 +++++++ openapi/components/schemas/StreetAddress.yaml | 34 ++++++ openapi/components/schemas/StreetDetail.yaml | 107 ++++++++++++++++++ .../components/schemas/TelephoneNumber.yaml | 75 ++++++++++++ openapi/components/schemas/TownDetail.yaml | 51 +++++++++ 32 files changed, 1562 insertions(+) create mode 100644 openapi/components/schemas/AcceptanceTest.yaml create mode 100644 openapi/components/schemas/AccountNotification.yaml create mode 100644 openapi/components/schemas/Agreement.yaml create mode 100644 openapi/components/schemas/Asset.yaml create mode 100644 openapi/components/schemas/BatchItemInfo.yaml create mode 100644 openapi/components/schemas/Customer.yaml create mode 100644 openapi/components/schemas/CustomerAccount.yaml create mode 100644 openapi/components/schemas/CustomerAgreement.yaml create mode 100644 openapi/components/schemas/DemandResponseProgram.yaml create mode 100644 openapi/components/schemas/Document.yaml create mode 100644 openapi/components/schemas/ElectronicAddress.yaml create mode 100644 openapi/components/schemas/EndDevice.yaml create mode 100644 openapi/components/schemas/LifecycleDate.yaml create mode 100644 openapi/components/schemas/Location.yaml create mode 100644 openapi/components/schemas/Meter.yaml create mode 100644 openapi/components/schemas/MeterMultiplier.yaml create mode 100644 openapi/components/schemas/Organisation.yaml create mode 100644 openapi/components/schemas/PositionPoint.yaml create mode 100644 openapi/components/schemas/PricingStructure.yaml create mode 100644 openapi/components/schemas/Priority.yaml create mode 100644 openapi/components/schemas/ProgramDate.yaml create mode 100644 openapi/components/schemas/ProgramDateIdMapping.yaml create mode 100644 openapi/components/schemas/ProgramDateIdMappings.yaml create mode 100644 openapi/components/schemas/ServiceLocation.yaml create mode 100644 openapi/components/schemas/ServiceSupplier.yaml create mode 100644 openapi/components/schemas/Statement.yaml create mode 100644 openapi/components/schemas/StatementRef.yaml create mode 100644 openapi/components/schemas/Status.yaml create mode 100644 openapi/components/schemas/StreetAddress.yaml create mode 100644 openapi/components/schemas/StreetDetail.yaml create mode 100644 openapi/components/schemas/TelephoneNumber.yaml create mode 100644 openapi/components/schemas/TownDetail.yaml diff --git a/openapi/components/schemas/AcceptanceTest.yaml b/openapi/components/schemas/AcceptanceTest.yaml new file mode 100644 index 0000000..e2bf4f7 --- /dev/null +++ b/openapi/components/schemas/AcceptanceTest.yaml @@ -0,0 +1,43 @@ +description: >- + Asset acceptance test information. +type: object +xml: + name: AcceptanceTest + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + date: + description: Date of acceptance test (Unix timestamp). + type: integer + format: int64 + xml: + name: date + namespace: http://naesb.org/espi/customer + prefix: customer + acceptanceInterval: + description: Time interval during which acceptance testing occurred. + $ref: './DateTimeInterval.yaml' + qualityTests: + description: Quality tests performed. + type: string + maxLength: 512 + xml: + name: qualityTests + namespace: http://naesb.org/espi/customer + prefix: customer + qualityDescription: + description: Description of quality assessment. + type: string + maxLength: 512 + xml: + name: qualityDescription + namespace: http://naesb.org/espi/customer + prefix: customer + qualityComment: + description: Comments on quality test results. + type: string + maxLength: 512 + xml: + name: qualityComment + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/AccountNotification.yaml b/openapi/components/schemas/AccountNotification.yaml new file mode 100644 index 0000000..774ab43 --- /dev/null +++ b/openapi/components/schemas/AccountNotification.yaml @@ -0,0 +1,46 @@ +description: >- + Notification of customer actions or events that may trigger billing or + service actions. +type: object +xml: + name: AccountNotification + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + methodKind: + description: >- + Method of notification delivery. + 0 = email, 1 = letter, 2 = ivr (interactive voice response), + 3 = sms, 4 = other. + type: integer + format: int32 + xml: + name: methodKind + namespace: http://naesb.org/espi/customer + prefix: customer + time: + description: Time of notification (Unix timestamp). + type: integer + format: int64 + xml: + name: time + namespace: http://naesb.org/espi/customer + prefix: customer + note: + description: Notification message or note. + type: string + maxLength: 512 + xml: + name: note + namespace: http://naesb.org/espi/customer + prefix: customer + customerNotificationKind: + description: >- + Kind of customer notification. + 0 = disconnect, 1 = shutoff, 2 = paymentDue, 3 = other. + type: integer + format: int32 + xml: + name: customerNotificationKind + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Agreement.yaml b/openapi/components/schemas/Agreement.yaml new file mode 100644 index 0000000..b157b47 --- /dev/null +++ b/openapi/components/schemas/Agreement.yaml @@ -0,0 +1,23 @@ +description: >- + Formal agreement between parties with terms and conditions. Extends Document + to include signature date and validity period. +type: object +xml: + name: Agreement + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + document: + description: Base document properties. + $ref: './Document.yaml' + signDate: + description: Date agreement was signed (Unix timestamp). + type: integer + format: int64 + xml: + name: signDate + namespace: http://naesb.org/espi/customer + prefix: customer + validityInterval: + description: Time period during which agreement is valid. + $ref: './DateTimeInterval.yaml' diff --git a/openapi/components/schemas/Asset.yaml b/openapi/components/schemas/Asset.yaml new file mode 100644 index 0000000..4087480 --- /dev/null +++ b/openapi/components/schemas/Asset.yaml @@ -0,0 +1,84 @@ +description: >- + Tangible resource of the utility, including power system equipment, vehicles, + plant, buildings, and metering devices. +type: object +xml: + name: Asset + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + type: + description: Type or category of asset. + type: string + maxLength: 256 + xml: + name: type + namespace: http://naesb.org/espi/customer + prefix: customer + utcNumber: + description: Utility-assigned unique identifier. + type: string + maxLength: 256 + xml: + name: utcNumber + namespace: http://naesb.org/espi/customer + prefix: customer + serialNumber: + description: Manufacturer serial number. + type: string + maxLength: 256 + xml: + name: serialNumber + namespace: http://naesb.org/espi/customer + prefix: customer + lotNumber: + description: Manufacturing lot number. + type: string + maxLength: 256 + xml: + name: lotNumber + namespace: http://naesb.org/espi/customer + prefix: customer + purchasePrice: + description: Purchase price of the asset. + type: number + format: double + xml: + name: purchasePrice + namespace: http://naesb.org/espi/customer + prefix: customer + critical: + description: Indicates if asset is critical to operations. + type: boolean + xml: + name: critical + namespace: http://naesb.org/espi/customer + prefix: customer + electronicAddress: + description: Electronic address for communicating with asset. + $ref: './ElectronicAddress.yaml' + lifecycle: + description: Lifecycle dates for the asset. + $ref: './LifecycleDate.yaml' + acceptanceTest: + description: Acceptance test information. + $ref: './AcceptanceTest.yaml' + initialCondition: + description: Initial condition assessment. + type: string + maxLength: 512 + xml: + name: initialCondition + namespace: http://naesb.org/espi/customer + prefix: customer + initialLossOfLife: + description: Initial loss of life percentage. + type: number + format: double + xml: + name: initialLossOfLife + namespace: http://naesb.org/espi/customer + prefix: customer + status: + description: Current status of asset. + $ref: './Status.yaml' diff --git a/openapi/components/schemas/BatchItemInfo.yaml b/openapi/components/schemas/BatchItemInfo.yaml new file mode 100644 index 0000000..c6663a3 --- /dev/null +++ b/openapi/components/schemas/BatchItemInfo.yaml @@ -0,0 +1,42 @@ +description: >- + Batch transaction information for tracking resource operations. +type: object +xml: + name: BatchItemInfo + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + name: + description: Resource name or identifier. + type: string + maxLength: 256 + xml: + name: name + namespace: http://naesb.org/espi/customer + prefix: customer + operation: + description: >- + CRUD operation type. + 0 = Create, 1 = Read, 2 = Update, 3 = Delete. + type: integer + format: int32 + xml: + name: operation + namespace: http://naesb.org/espi/customer + prefix: customer + statusCode: + description: HTTP status code for the operation (e.g., 200, 201, 404). + type: integer + format: int32 + xml: + name: statusCode + namespace: http://naesb.org/espi/customer + prefix: customer + statusReason: + description: Reason for the status (success message or error description). + type: string + maxLength: 512 + xml: + name: statusReason + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Customer.yaml b/openapi/components/schemas/Customer.yaml new file mode 100644 index 0000000..5e8af09 --- /dev/null +++ b/openapi/components/schemas/Customer.yaml @@ -0,0 +1,72 @@ +description: >- + Organisation receiving services from service supplier. +type: object +xml: + name: Customer + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + organisation: + description: Customer's contact information. + $ref: './Organisation.yaml' + kind: + description: >- + Kind of customer. + 0 = residential, 1 = residentialAndCommercial, 2 = residentialAndStreetlight, + 3 = residentialStreetlightOthers, 4 = residentialFarmService, + 5 = commercialIndustrial, 6 = pumpingLoad, 7 = windMachine, + 8 = energyServiceSupplier, 9 = energyServiceScheduler, 10 = enterprise, + 11 = regionalOperator, 12 = subsidiary, 13 = internalUse, 14 = other. + type: integer + format: int32 + example: 0 + xml: + name: kind + namespace: http://naesb.org/espi/customer + prefix: customer + specialNeed: + description: Special service needs indicator. + type: string + maxLength: 256 + xml: + name: specialNeed + namespace: http://naesb.org/espi/customer + prefix: customer + vip: + description: Very important person indicator (deprecated). + type: boolean + xml: + name: vip + namespace: http://naesb.org/espi/customer + prefix: customer + pucNumber: + description: Public utilities commission ID. + type: string + maxLength: 256 + xml: + name: pucNumber + namespace: http://naesb.org/espi/customer + prefix: customer + status: + description: Status of this customer. + $ref: './Status.yaml' + priority: + description: Priority of the customer. + $ref: './Priority.yaml' + locale: + description: Language and locale identifier. + type: string + maxLength: 256 + example: en_US + xml: + name: locale + namespace: http://naesb.org/espi/customer + prefix: customer + customerName: + description: Name of the customer. + type: string + maxLength: 256 + xml: + name: customerName + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/CustomerAccount.yaml b/openapi/components/schemas/CustomerAccount.yaml new file mode 100644 index 0000000..e25a96e --- /dev/null +++ b/openapi/components/schemas/CustomerAccount.yaml @@ -0,0 +1,59 @@ +description: >- + Assignment of products and services (customer premise equipment) to a customer + for billing and payment purposes. Contains billing cycle information and + payment notifications. +type: object +xml: + name: CustomerAccount + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + document: + description: Basic account information including creation date and status. + $ref: './Document.yaml' + billingCycle: + description: Billing cycle day of the month (e.g., "15" for 15th of month). + type: string + maxLength: 256 + example: "15" + xml: + name: billingCycle + namespace: http://naesb.org/espi/customer + prefix: customer + budgetBill: + description: Budget billing code or identifier. + type: string + maxLength: 256 + xml: + name: budgetBill + namespace: http://naesb.org/espi/customer + prefix: customer + lastBillAmount: + description: Final bill amount before service shut-off (in currency minor units). + type: integer + format: int64 + xml: + name: lastBillAmount + namespace: http://naesb.org/espi/customer + prefix: customer + notifications: + description: Account notifications for customer actions. + type: array + xml: + name: notifications + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './AccountNotification.yaml' + contactInfo: + description: Billing contact information. + $ref: './Organisation.yaml' + accountId: + description: Unique account identifier. + type: string + maxLength: 256 + xml: + name: accountId + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/CustomerAgreement.yaml b/openapi/components/schemas/CustomerAgreement.yaml new file mode 100644 index 0000000..81db0fa --- /dev/null +++ b/openapi/components/schemas/CustomerAgreement.yaml @@ -0,0 +1,85 @@ +description: >- + Agreement between customer and service supplier for service at a specific + service location. May contain demand response program participation and + applicable pricing structures. +type: object +xml: + name: CustomerAgreement + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + agreement: + description: Formal agreement terms and conditions. + $ref: './Agreement.yaml' + loadMgmt: + description: Load management program code. + type: string + maxLength: 256 + xml: + name: loadMgmt + namespace: http://naesb.org/espi/customer + prefix: customer + isPrePay: + description: Indicates if customer is on pre-pay program. + type: boolean + xml: + name: isPrePay + namespace: http://naesb.org/espi/customer + prefix: customer + shutOffDateTime: + description: Date and time of final service billing (Unix timestamp). + type: integer + format: int64 + xml: + name: shutOffDateTime + namespace: http://naesb.org/espi/customer + prefix: customer + DemandResponseProgram: + description: Demand response programs associated with this agreement. + type: array + xml: + name: DemandResponseProgram + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './DemandResponseProgram.yaml' + PricingStructures: + description: Applicable pricing structures for this agreement. + type: array + xml: + name: PricingStructures + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './PricingStructure.yaml' + currency: + description: >- + Currency used for monetary amounts. ISO 4217 currency codes. + 840 = USD, 978 = EUR, 36 = AUD, 124 = CAD, 826 = GBP, 392 = JPY. + type: integer + format: int32 + example: 840 + xml: + name: currency + namespace: http://naesb.org/espi/customer + prefix: customer + futureStatus: + description: Known future status changes for this agreement. + type: array + xml: + name: futureStatus + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './Status.yaml' + agreementId: + description: Unique agreement identifier. + type: string + maxLength: 256 + xml: + name: agreementId + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/DemandResponseProgram.yaml b/openapi/components/schemas/DemandResponseProgram.yaml new file mode 100644 index 0000000..bf940bd --- /dev/null +++ b/openapi/components/schemas/DemandResponseProgram.yaml @@ -0,0 +1,53 @@ +description: >- + Demand response program characteristics and enrollment information. +type: object +xml: + name: DemandResponseProgram + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + programName: + description: Name of the demand response program. + type: string + maxLength: 256 + xml: + name: programName + namespace: http://naesb.org/espi/customer + prefix: customer + enrollmentStatus: + description: >- + Enrollment status. + 0 = unenrolled, 1 = enrolled, 2 = enrolledPending. + type: integer + format: int32 + xml: + name: enrollmentStatus + namespace: http://naesb.org/espi/customer + prefix: customer + programDescription: + description: Description of the program. + type: string + maxLength: 512 + xml: + name: programDescription + namespace: http://naesb.org/espi/customer + prefix: customer + programDate: + description: Program enrollment or termination date. + $ref: './ProgramDate.yaml' + capacityReservationLevel: + description: Reserved capacity level for this program. + type: number + format: double + xml: + name: capacityReservationLevel + namespace: http://naesb.org/espi/customer + prefix: customer + DRProgramNomination: + description: Demand response program nomination details. + type: string + maxLength: 512 + xml: + name: DRProgramNomination + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Document.yaml b/openapi/components/schemas/Document.yaml new file mode 100644 index 0000000..7b6a53d --- /dev/null +++ b/openapi/components/schemas/Document.yaml @@ -0,0 +1,81 @@ +description: >- + Parent class for various types of documents and information groupings. +type: object +xml: + name: Document + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + type: + description: Type or category of document. + type: string + maxLength: 256 + xml: + name: type + namespace: http://naesb.org/espi/customer + prefix: customer + authorName: + description: Author or creator of the document. + type: string + maxLength: 256 + xml: + name: authorName + namespace: http://naesb.org/espi/customer + prefix: customer + createdDateTime: + description: Date and time document was created (Unix timestamp). + type: integer + format: int64 + xml: + name: createdDateTime + namespace: http://naesb.org/espi/customer + prefix: customer + lastModifiedDateTime: + description: Date and time document was last modified (Unix timestamp). + type: integer + format: int64 + xml: + name: lastModifiedDateTime + namespace: http://naesb.org/espi/customer + prefix: customer + revisionNumber: + description: Document revision or version number. + type: string + maxLength: 64 + xml: + name: revisionNumber + namespace: http://naesb.org/espi/customer + prefix: customer + electronicAddress: + description: Electronic location of document. + $ref: './ElectronicAddress.yaml' + subject: + description: Subject or topic of document. + type: string + maxLength: 256 + xml: + name: subject + namespace: http://naesb.org/espi/customer + prefix: customer + title: + description: Document title. + type: string + maxLength: 256 + xml: + name: title + namespace: http://naesb.org/espi/customer + prefix: customer + docStatus: + description: Document status information. + $ref: './Status.yaml' + status: + description: Overall status. + $ref: './Status.yaml' + comment: + description: General comments about the document. + type: string + maxLength: 512 + xml: + name: comment + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/ElectronicAddress.yaml b/openapi/components/schemas/ElectronicAddress.yaml new file mode 100644 index 0000000..1c9038f --- /dev/null +++ b/openapi/components/schemas/ElectronicAddress.yaml @@ -0,0 +1,77 @@ +description: >- + Electronic contact information including email, web, LAN, and radio addresses. +type: object +xml: + name: ElectronicAddress + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + lan: + description: LAN address or identifier. + type: string + maxLength: 256 + xml: + name: lan + namespace: http://naesb.org/espi/customer + prefix: customer + mac: + description: MAC address. + type: string + maxLength: 256 + pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' + example: "00:1A:2B:3C:4D:5E" + xml: + name: mac + namespace: http://naesb.org/espi/customer + prefix: customer + email1: + description: Primary email address. + type: string + format: email + maxLength: 256 + xml: + name: email1 + namespace: http://naesb.org/espi/customer + prefix: customer + email2: + description: Secondary email address. + type: string + format: email + maxLength: 256 + xml: + name: email2 + namespace: http://naesb.org/espi/customer + prefix: customer + web: + description: Website URL. + type: string + format: uri + maxLength: 256 + xml: + name: web + namespace: http://naesb.org/espi/customer + prefix: customer + radio: + description: Radio address or identifier. + type: string + maxLength: 256 + xml: + name: radio + namespace: http://naesb.org/espi/customer + prefix: customer + userID: + description: User identifier. + type: string + maxLength: 256 + xml: + name: userID + namespace: http://naesb.org/espi/customer + prefix: customer + password: + description: Password (should be encrypted/hashed). + type: string + maxLength: 256 + xml: + name: password + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/EndDevice.yaml b/openapi/components/schemas/EndDevice.yaml new file mode 100644 index 0000000..e533b6f --- /dev/null +++ b/openapi/components/schemas/EndDevice.yaml @@ -0,0 +1,43 @@ +description: >- + Asset container that performs one or more end device functions such as + metering, load management, connect/disconnect, and accounting. May represent + physical or virtual devices. +type: object +xml: + name: EndDevice + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + asset: + description: Description of the equipment or device as an asset. + $ref: './Asset.yaml' + isVirtual: + description: Indicates if this is a virtual device (not physical hardware). + type: boolean + xml: + name: isVirtual + namespace: http://naesb.org/espi/customer + prefix: customer + isPan: + description: Indicates if device is part of premises area network. + type: boolean + xml: + name: isPan + namespace: http://naesb.org/espi/customer + prefix: customer + installCode: + description: Installation code for the device. + type: string + maxLength: 256 + xml: + name: installCode + namespace: http://naesb.org/espi/customer + prefix: customer + amrSystem: + description: Automated meter reading or communication system identifier. + type: string + maxLength: 256 + xml: + name: amrSystem + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/LifecycleDate.yaml b/openapi/components/schemas/LifecycleDate.yaml new file mode 100644 index 0000000..b0d9b61 --- /dev/null +++ b/openapi/components/schemas/LifecycleDate.yaml @@ -0,0 +1,72 @@ +description: >- + Important dates in the lifecycle of an asset. +type: object +xml: + name: LifecycleDate + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + manufacturedDate: + description: Date asset was manufactured (Unix timestamp). + type: integer + format: int64 + xml: + name: manufacturedDate + namespace: http://naesb.org/espi/customer + prefix: customer + purchaseDate: + description: Date asset was purchased (Unix timestamp). + type: integer + format: int64 + xml: + name: purchaseDate + namespace: http://naesb.org/espi/customer + prefix: customer + receivedDate: + description: Date asset was received (Unix timestamp). + type: integer + format: int64 + xml: + name: receivedDate + namespace: http://naesb.org/espi/customer + prefix: customer + installedDate: + description: Date asset was installed (Unix timestamp). + type: integer + format: int64 + xml: + name: installedDate + namespace: http://naesb.org/espi/customer + prefix: customer + removedDate: + description: Date asset was removed (Unix timestamp). + type: integer + format: int64 + xml: + name: removedDate + namespace: http://naesb.org/espi/customer + prefix: customer + recoveredDate: + description: Date asset was recovered (Unix timestamp). + type: integer + format: int64 + xml: + name: recoveredDate + namespace: http://naesb.org/espi/customer + prefix: customer + disposedDate: + description: Date asset was disposed (Unix timestamp). + type: integer + format: int64 + xml: + name: disposedDate + namespace: http://naesb.org/espi/customer + prefix: customer + accountedForDate: + description: Date asset was accounted for (Unix timestamp). + type: integer + format: int64 + xml: + name: accountedForDate + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Location.yaml b/openapi/components/schemas/Location.yaml new file mode 100644 index 0000000..84c8452 --- /dev/null +++ b/openapi/components/schemas/Location.yaml @@ -0,0 +1,61 @@ +description: >- + A geographic or physical place, point, or area that may contain position + points and address information. +type: object +xml: + name: Location + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + type: + description: Type or category of location. + type: string + maxLength: 256 + xml: + name: type + namespace: http://naesb.org/espi/customer + prefix: customer + mainAddress: + description: Main address for the location. + $ref: './StreetAddress.yaml' + secondaryAddress: + description: Secondary or alternative address. + $ref: './StreetAddress.yaml' + phone1: + description: Primary phone number for location. + $ref: './TelephoneNumber.yaml' + phone2: + description: Secondary phone number for location. + $ref: './TelephoneNumber.yaml' + electronicAddress: + description: Electronic address information. + $ref: './ElectronicAddress.yaml' + geoInfoReference: + description: Reference to geographic information system data. + type: string + maxLength: 512 + xml: + name: geoInfoReference + namespace: http://naesb.org/espi/customer + prefix: customer + direction: + description: Directional information for finding location. + type: string + maxLength: 512 + xml: + name: direction + namespace: http://naesb.org/espi/customer + prefix: customer + status: + description: Status of this location. + $ref: './Status.yaml' + positionPoints: + description: Geographic coordinate points. + type: array + xml: + name: positionPoints + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './PositionPoint.yaml' diff --git a/openapi/components/schemas/Meter.yaml b/openapi/components/schemas/Meter.yaml new file mode 100644 index 0000000..4d38dcf --- /dev/null +++ b/openapi/components/schemas/Meter.yaml @@ -0,0 +1,40 @@ +description: >- + Physical asset that performs the metering role of the usage point. Extends + EndDevice with meter-specific properties including form number and multipliers. +type: object +xml: + name: Meter + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + endDevice: + description: Description of the metering equipment and device characteristics. + $ref: './EndDevice.yaml' + formNumber: + description: Meter form designation per ANSI C12.10 standard. + type: string + maxLength: 256 + example: "16S" + xml: + name: formNumber + namespace: http://naesb.org/espi/customer + prefix: customer + MeterMultipliers: + description: All multipliers applicable to this meter for scaling readings. + type: array + xml: + name: MeterMultipliers + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './MeterMultiplier.yaml' + intervalLength: + description: Current interval length in seconds for meter readings. + type: integer + format: int32 + example: 900 + xml: + name: intervalLength + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/MeterMultiplier.yaml b/openapi/components/schemas/MeterMultiplier.yaml new file mode 100644 index 0000000..8abcf28 --- /dev/null +++ b/openapi/components/schemas/MeterMultiplier.yaml @@ -0,0 +1,26 @@ +description: >- + Meter multiplier information for scaling meter readings. +type: object +xml: + name: MeterMultiplier + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + kind: + description: >- + Kind of multiplier. + 0 = kH (disk revolution constant), 1 = transformerRatio, 2 = other. + type: integer + format: int32 + xml: + name: kind + namespace: http://naesb.org/espi/customer + prefix: customer + value: + description: Multiplier value. + type: number + format: double + xml: + name: value + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Organisation.yaml b/openapi/components/schemas/Organisation.yaml new file mode 100644 index 0000000..77c943e --- /dev/null +++ b/openapi/components/schemas/Organisation.yaml @@ -0,0 +1,32 @@ +description: >- + Organizational contact information including address, phone, and electronic + communication details. +type: object +xml: + name: Organisation + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + streetAddress: + description: Street and mailing address. + $ref: './StreetAddress.yaml' + postalAddress: + description: Alternative postal address if different from street address. + $ref: './StreetAddress.yaml' + phone1: + description: Primary telephone number. + $ref: './TelephoneNumber.yaml' + phone2: + description: Secondary telephone number. + $ref: './TelephoneNumber.yaml' + electronicAddress: + description: Electronic contact information (email, web, etc.). + $ref: './ElectronicAddress.yaml' + organisationName: + description: Name of the organization. + type: string + maxLength: 256 + xml: + name: organisationName + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/PositionPoint.yaml b/openapi/components/schemas/PositionPoint.yaml new file mode 100644 index 0000000..71c8fbf --- /dev/null +++ b/openapi/components/schemas/PositionPoint.yaml @@ -0,0 +1,32 @@ +description: >- + Set of spatial coordinates describing a geographic point. +type: object +xml: + name: PositionPoint + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + xPosition: + description: X coordinate (longitude for geographic coordinates). + type: string + maxLength: 256 + xml: + name: xPosition + namespace: http://naesb.org/espi/customer + prefix: customer + yPosition: + description: Y coordinate (latitude for geographic coordinates). + type: string + maxLength: 256 + xml: + name: yPosition + namespace: http://naesb.org/espi/customer + prefix: customer + zPosition: + description: Z coordinate (elevation or altitude). + type: string + maxLength: 256 + xml: + name: zPosition + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/PricingStructure.yaml b/openapi/components/schemas/PricingStructure.yaml new file mode 100644 index 0000000..0e0c951 --- /dev/null +++ b/openapi/components/schemas/PricingStructure.yaml @@ -0,0 +1,11 @@ +description: >- + Reference to pricing structure or tariff applicable to agreement. + Represented as a URI reference. +type: string +format: uri +maxLength: 512 +example: "https://data.greenbuttonconnect.org/DataCustodian/espi/1_1/resource/ReadingType/1" +xml: + name: PricingStructure + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Priority.yaml b/openapi/components/schemas/Priority.yaml new file mode 100644 index 0000000..4834551 --- /dev/null +++ b/openapi/components/schemas/Priority.yaml @@ -0,0 +1,32 @@ +description: >- + Priority definition with ranking and type classification. +type: object +xml: + name: Priority + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + rank: + description: Priority rank (higher number = higher priority). + type: integer + format: int32 + xml: + name: rank + namespace: http://naesb.org/espi/customer + prefix: customer + type: + description: Type or category of priority. + type: string + maxLength: 256 + xml: + name: type + namespace: http://naesb.org/espi/customer + prefix: customer + justification: + description: Justification or reason for the priority level. + type: string + maxLength: 512 + xml: + name: justification + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/ProgramDate.yaml b/openapi/components/schemas/ProgramDate.yaml new file mode 100644 index 0000000..1e14d41 --- /dev/null +++ b/openapi/components/schemas/ProgramDate.yaml @@ -0,0 +1,24 @@ +description: >- + Program enrollment or termination date with description. +type: object +xml: + name: ProgramDate + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + programDate: + description: Program date (Unix timestamp). + type: integer + format: int64 + xml: + name: programDate + namespace: http://naesb.org/espi/customer + prefix: customer + programDateDescription: + description: Description of the program date (e.g., "enrollment", "termination"). + type: string + maxLength: 256 + xml: + name: programDateDescription + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/ProgramDateIdMapping.yaml b/openapi/components/schemas/ProgramDateIdMapping.yaml new file mode 100644 index 0000000..3d22519 --- /dev/null +++ b/openapi/components/schemas/ProgramDateIdMapping.yaml @@ -0,0 +1,52 @@ +description: >- + Energy efficiency program mapping with enrollment details. +type: object +xml: + name: ProgramDateIdMapping + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + programDateType: + description: >- + Type of program date. + 0 = enrollment, 1 = termination, 2 = other. + type: integer + format: int32 + xml: + name: programDateType + namespace: http://naesb.org/espi/customer + prefix: customer + code: + description: Program code or identifier. + type: string + maxLength: 256 + xml: + name: code + namespace: http://naesb.org/espi/customer + prefix: customer + programName: + description: Name of the energy efficiency program. + type: string + maxLength: 256 + xml: + name: programName + namespace: http://naesb.org/espi/customer + prefix: customer + enrollmentDate: + description: Date of enrollment (Unix timestamp). + type: integer + format: int64 + xml: + name: enrollmentDate + namespace: http://naesb.org/espi/customer + prefix: customer + enrollmentStatus: + description: >- + Enrollment status. + 0 = unenrolled, 1 = enrolled, 2 = enrolledPending. + type: integer + format: int32 + xml: + name: enrollmentStatus + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/ProgramDateIdMappings.yaml b/openapi/components/schemas/ProgramDateIdMappings.yaml new file mode 100644 index 0000000..9c5ace5 --- /dev/null +++ b/openapi/components/schemas/ProgramDateIdMappings.yaml @@ -0,0 +1,18 @@ +description: >- + Collection of all customer energy efficiency program enrollments and mappings. +type: object +xml: + name: ProgramDateIdMappings + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + programDateIdMapping: + description: Individual program date mapping with enrollment details. + type: array + xml: + name: programDateIdMapping + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './ProgramDateIdMapping.yaml' diff --git a/openapi/components/schemas/ServiceLocation.yaml b/openapi/components/schemas/ServiceLocation.yaml new file mode 100644 index 0000000..6c66699 --- /dev/null +++ b/openapi/components/schemas/ServiceLocation.yaml @@ -0,0 +1,43 @@ +description: >- + A real estate location (premises) where service is provided. Contains physical + address, access information, and associated usage points. +type: object +xml: + name: ServiceLocation + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + location: + description: Geographic location and address of the service site. + $ref: './Location.yaml' + accessMethod: + description: Method or instructions for accessing the location. + type: string + maxLength: 256 + xml: + name: accessMethod + namespace: http://naesb.org/espi/customer + prefix: customer + siteAccessProblem: + description: Description of any problems accessing the location. + type: string + maxLength: 256 + xml: + name: siteAccessProblem + namespace: http://naesb.org/espi/customer + prefix: customer + needsInspection: + description: Indicates if location requires inspection. + type: boolean + xml: + name: needsInspection + namespace: http://naesb.org/espi/customer + prefix: customer + outageBlock: + description: Outage block identifier for this service location. + type: string + maxLength: 32 + xml: + name: outageBlock + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/ServiceSupplier.yaml b/openapi/components/schemas/ServiceSupplier.yaml new file mode 100644 index 0000000..cad7211 --- /dev/null +++ b/openapi/components/schemas/ServiceSupplier.yaml @@ -0,0 +1,41 @@ +description: >- + Organisation that provides utility or energy services to customers. May be + a utility, retailer, load serving entity, or other type of supplier. +type: object +xml: + name: ServiceSupplier + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + organisation: + description: Supplier's contact information and organizational details. + $ref: './Organisation.yaml' + kind: + description: >- + Kind of supplier. + 0 = utility, 1 = retailer, 2 = LSE (Load Serving Entity), + 3 = MDMA (Meter Data Management Agent), 4 = MSP (Meter Service Provider), + 5 = other. + type: integer + format: int32 + example: 0 + xml: + name: kind + namespace: http://naesb.org/espi/customer + prefix: customer + issuerIdentificationNumber: + description: ISO transaction reference number for the supplier. + type: string + maxLength: 256 + xml: + name: issuerIdentificationNumber + namespace: http://naesb.org/espi/customer + prefix: customer + effectiveDate: + description: Date when supplier service becomes effective (Unix timestamp). + type: integer + format: int64 + xml: + name: effectiveDate + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Statement.yaml b/openapi/components/schemas/Statement.yaml new file mode 100644 index 0000000..0db0c88 --- /dev/null +++ b/openapi/components/schemas/Statement.yaml @@ -0,0 +1,27 @@ +description: >- + Billing statement for services provided to a customer. Contains issue date + and references to statement documents. +type: object +xml: + name: Statement + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + issueDateTime: + description: Date and time the statement was issued (Unix timestamp). + type: integer + format: int64 + xml: + name: issueDateTime + namespace: http://naesb.org/espi/customer + prefix: customer + statementRef: + description: References to statement document files and metadata. + type: array + xml: + name: statementRef + namespace: http://naesb.org/espi/customer + prefix: customer + wrapped: false + items: + $ref: './StatementRef.yaml' diff --git a/openapi/components/schemas/StatementRef.yaml b/openapi/components/schemas/StatementRef.yaml new file mode 100644 index 0000000..1dbd444 --- /dev/null +++ b/openapi/components/schemas/StatementRef.yaml @@ -0,0 +1,36 @@ +description: >- + Reference to billing statement document with file metadata. +type: object +xml: + name: StatementRef + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + fileName: + description: Name of the statement file. + type: string + maxLength: 256 + xml: + name: fileName + namespace: http://naesb.org/espi/customer + prefix: customer + mediaType: + description: >- + IANA media type of the document. + Examples: application/pdf, application/json, application/vnd.ms-excel. + type: string + maxLength: 256 + example: "application/pdf" + xml: + name: mediaType + namespace: http://naesb.org/espi/customer + prefix: customer + statementURL: + description: URL to retrieve the statement document. + type: string + format: uri + maxLength: 512 + xml: + name: statementURL + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/Status.yaml b/openapi/components/schemas/Status.yaml new file mode 100644 index 0000000..2fe36c3 --- /dev/null +++ b/openapi/components/schemas/Status.yaml @@ -0,0 +1,40 @@ +description: >- + Current status information with timestamp and reason. +type: object +xml: + name: Status + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + value: + description: Status value or code. + type: string + maxLength: 256 + xml: + name: value + namespace: http://naesb.org/espi/customer + prefix: customer + dateTime: + description: Date and time of status (Unix timestamp). + type: integer + format: int64 + xml: + name: dateTime + namespace: http://naesb.org/espi/customer + prefix: customer + remark: + description: Remarks or notes about the status. + type: string + maxLength: 512 + xml: + name: remark + namespace: http://naesb.org/espi/customer + prefix: customer + reason: + description: Reason for the status. + type: string + maxLength: 512 + xml: + name: reason + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/StreetAddress.yaml b/openapi/components/schemas/StreetAddress.yaml new file mode 100644 index 0000000..468622d --- /dev/null +++ b/openapi/components/schemas/StreetAddress.yaml @@ -0,0 +1,34 @@ +description: >- + Street and postal address information. +type: object +xml: + name: StreetAddress + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + streetDetail: + description: Detailed street address components. + $ref: './StreetDetail.yaml' + townDetail: + description: Town or city address components. + $ref: './TownDetail.yaml' + status: + description: Status of this address. + $ref: './Status.yaml' + postalCode: + description: Postal or ZIP code. + type: string + maxLength: 32 + example: "94102" + xml: + name: postalCode + namespace: http://naesb.org/espi/customer + prefix: customer + poBox: + description: Post office box number. + type: string + maxLength: 32 + xml: + name: poBox + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/StreetDetail.yaml b/openapi/components/schemas/StreetDetail.yaml new file mode 100644 index 0000000..27d7985 --- /dev/null +++ b/openapi/components/schemas/StreetDetail.yaml @@ -0,0 +1,107 @@ +description: >- + Detailed street address components including number, name, and type. +type: object +xml: + name: StreetDetail + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + number: + description: Street number. + type: string + maxLength: 64 + example: "123" + xml: + name: number + namespace: http://naesb.org/espi/customer + prefix: customer + name: + description: Street name. + type: string + maxLength: 256 + example: "Main" + xml: + name: name + namespace: http://naesb.org/espi/customer + prefix: customer + suffix: + description: Street suffix (e.g., N, S, E, W). + type: string + maxLength: 64 + xml: + name: suffix + namespace: http://naesb.org/espi/customer + prefix: customer + prefix: + description: Street prefix direction. + type: string + maxLength: 64 + xml: + name: prefix + namespace: http://naesb.org/espi/customer + prefix: customer + type: + description: Street type (e.g., St, Ave, Rd, Blvd). + type: string + maxLength: 64 + example: "St" + xml: + name: type + namespace: http://naesb.org/espi/customer + prefix: customer + code: + description: Street code or identifier. + type: string + maxLength: 64 + xml: + name: code + namespace: http://naesb.org/espi/customer + prefix: customer + buildingName: + description: Building or complex name. + type: string + maxLength: 256 + xml: + name: buildingName + namespace: http://naesb.org/espi/customer + prefix: customer + suiteNumber: + description: Suite, apartment, or unit number. + type: string + maxLength: 64 + example: "Apt 4B" + xml: + name: suiteNumber + namespace: http://naesb.org/espi/customer + prefix: customer + addressGeneral: + description: General address field 1. + type: string + maxLength: 256 + xml: + name: addressGeneral + namespace: http://naesb.org/espi/customer + prefix: customer + addressGeneral2: + description: General address field 2. + type: string + maxLength: 256 + xml: + name: addressGeneral2 + namespace: http://naesb.org/espi/customer + prefix: customer + addressGeneral3: + description: General address field 3. + type: string + maxLength: 256 + xml: + name: addressGeneral3 + namespace: http://naesb.org/espi/customer + prefix: customer + withinTownLimits: + description: Indicates if address is within town limits. + type: boolean + xml: + name: withinTownLimits + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/TelephoneNumber.yaml b/openapi/components/schemas/TelephoneNumber.yaml new file mode 100644 index 0000000..efebb21 --- /dev/null +++ b/openapi/components/schemas/TelephoneNumber.yaml @@ -0,0 +1,75 @@ +description: >- + Telephone number with international dialing components. +type: object +xml: + name: TelephoneNumber + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + countryCode: + description: International country code (e.g., "1" for US/Canada). + type: string + maxLength: 32 + example: "1" + xml: + name: countryCode + namespace: http://naesb.org/espi/customer + prefix: customer + areaCode: + description: Area code or city code. + type: string + maxLength: 32 + example: "415" + xml: + name: areaCode + namespace: http://naesb.org/espi/customer + prefix: customer + cityCode: + description: City dialing code (for international numbers). + type: string + maxLength: 32 + xml: + name: cityCode + namespace: http://naesb.org/espi/customer + prefix: customer + localNumber: + description: Local phone number. + type: string + maxLength: 32 + example: "555-1234" + xml: + name: localNumber + namespace: http://naesb.org/espi/customer + prefix: customer + extension: + description: Phone extension. + type: string + maxLength: 32 + xml: + name: extension + namespace: http://naesb.org/espi/customer + prefix: customer + internationalNumberPrefix: + description: International dialing prefix. + type: string + maxLength: 32 + xml: + name: internationalNumberPrefix + namespace: http://naesb.org/espi/customer + prefix: customer + ituPhone: + description: ITU-T formatted phone number. + type: string + maxLength: 256 + xml: + name: ituPhone + namespace: http://naesb.org/espi/customer + prefix: customer + internationalLocalNumber: + description: Local number in international format. + type: string + maxLength: 256 + xml: + name: internationalLocalNumber + namespace: http://naesb.org/espi/customer + prefix: customer diff --git a/openapi/components/schemas/TownDetail.yaml b/openapi/components/schemas/TownDetail.yaml new file mode 100644 index 0000000..b655df5 --- /dev/null +++ b/openapi/components/schemas/TownDetail.yaml @@ -0,0 +1,51 @@ +description: >- + Town or city address components. +type: object +xml: + name: TownDetail + namespace: http://naesb.org/espi/customer + prefix: customer +properties: + name: + description: Town or city name. + type: string + maxLength: 256 + example: "San Francisco" + xml: + name: name + namespace: http://naesb.org/espi/customer + prefix: customer + stateOrProvince: + description: State or province code. + type: string + maxLength: 64 + example: "CA" + xml: + name: stateOrProvince + namespace: http://naesb.org/espi/customer + prefix: customer + country: + description: Country code (ISO 3166). + type: string + maxLength: 64 + example: "US" + xml: + name: country + namespace: http://naesb.org/espi/customer + prefix: customer + code: + description: Town or city code. + type: string + maxLength: 64 + xml: + name: code + namespace: http://naesb.org/espi/customer + prefix: customer + section: + description: Town section or district. + type: string + maxLength: 256 + xml: + name: section + namespace: http://naesb.org/espi/customer + prefix: customer From b0b84d0c0c5e370f9f4525a27b7c5dff1dec7a53 Mon Sep 17 00:00:00 2001 From: Donald Coffin Date: Sat, 7 Feb 2026 22:36:24 -0500 Subject: [PATCH 2/4] feat: add customer resource response definitions Add 18 response files (Feed and Entry for each of 9 resources): - AtomFeed and AtomEntry responses for Customer, CustomerAccount, CustomerAgreement, ServiceLocation, EndDevice, Meter, ServiceSupplier, Statement, and ProgramDateIdMappings Response link types use cust-feed/{Resource} and cust-entry/{Resource} convention to distinguish from energy resource responses. All examples use https://data.greenbuttonconnect.org as host and http://naesb.org/espi/customer XML namespace. Co-Authored-By: Claude Sonnet 4.5 --- .../responses/AtomEntry_Customer.yaml | 26 +++++++++++++++ .../responses/AtomEntry_CustomerAccount.yaml | 25 +++++++++++++++ .../AtomEntry_CustomerAgreement.yaml | 25 +++++++++++++++ .../responses/AtomEntry_EndDevice.yaml | 24 ++++++++++++++ .../components/responses/AtomEntry_Meter.yaml | 24 ++++++++++++++ .../AtomEntry_ProgramDateIdMappings.yaml | 22 +++++++++++++ .../responses/AtomEntry_ServiceLocation.yaml | 24 ++++++++++++++ .../responses/AtomEntry_ServiceSupplier.yaml | 23 +++++++++++++ .../responses/AtomEntry_Statement.yaml | 23 +++++++++++++ .../responses/AtomFeed_Customer.yaml | 32 +++++++++++++++++++ .../responses/AtomFeed_CustomerAccount.yaml | 31 ++++++++++++++++++ .../responses/AtomFeed_CustomerAgreement.yaml | 31 ++++++++++++++++++ .../responses/AtomFeed_EndDevice.yaml | 30 +++++++++++++++++ .../components/responses/AtomFeed_Meter.yaml | 30 +++++++++++++++++ .../AtomFeed_ProgramDateIdMappings.yaml | 28 ++++++++++++++++ .../responses/AtomFeed_ServiceLocation.yaml | 30 +++++++++++++++++ .../responses/AtomFeed_ServiceSupplier.yaml | 29 +++++++++++++++++ .../responses/AtomFeed_Statement.yaml | 29 +++++++++++++++++ 18 files changed, 486 insertions(+) create mode 100644 openapi/components/responses/AtomEntry_Customer.yaml create mode 100644 openapi/components/responses/AtomEntry_CustomerAccount.yaml create mode 100644 openapi/components/responses/AtomEntry_CustomerAgreement.yaml create mode 100644 openapi/components/responses/AtomEntry_EndDevice.yaml create mode 100644 openapi/components/responses/AtomEntry_Meter.yaml create mode 100644 openapi/components/responses/AtomEntry_ProgramDateIdMappings.yaml create mode 100644 openapi/components/responses/AtomEntry_ServiceLocation.yaml create mode 100644 openapi/components/responses/AtomEntry_ServiceSupplier.yaml create mode 100644 openapi/components/responses/AtomEntry_Statement.yaml create mode 100644 openapi/components/responses/AtomFeed_Customer.yaml create mode 100644 openapi/components/responses/AtomFeed_CustomerAccount.yaml create mode 100644 openapi/components/responses/AtomFeed_CustomerAgreement.yaml create mode 100644 openapi/components/responses/AtomFeed_EndDevice.yaml create mode 100644 openapi/components/responses/AtomFeed_Meter.yaml create mode 100644 openapi/components/responses/AtomFeed_ProgramDateIdMappings.yaml create mode 100644 openapi/components/responses/AtomFeed_ServiceLocation.yaml create mode 100644 openapi/components/responses/AtomFeed_ServiceSupplier.yaml create mode 100644 openapi/components/responses/AtomFeed_Statement.yaml diff --git a/openapi/components/responses/AtomEntry_Customer.yaml b/openapi/components/responses/AtomEntry_Customer.yaml new file mode 100644 index 0000000..00164f5 --- /dev/null +++ b/openapi/components/responses/AtomEntry_Customer.yaml @@ -0,0 +1,26 @@ +description: >- + OK - Returns an Atom entry containing a single Customer resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + CustomerEntry: + summary: A single Customer entry + value: | + + urn:uuid:c8e5f2d9-3a7b-5e4c-9d1f-6b8a2c3e5d7f + + + + Customer + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 0 + en_US + John Smith + + + diff --git a/openapi/components/responses/AtomEntry_CustomerAccount.yaml b/openapi/components/responses/AtomEntry_CustomerAccount.yaml new file mode 100644 index 0000000..857421f --- /dev/null +++ b/openapi/components/responses/AtomEntry_CustomerAccount.yaml @@ -0,0 +1,25 @@ +description: >- + OK - Returns an Atom entry containing a single CustomerAccount resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + CustomerAccountEntry: + summary: A single CustomerAccount entry + value: | + + urn:uuid:e3f7b9d1-5c8a-6e4d-9f2b-7a1c5e8d3f6b + + + + CustomerAccount + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 15 + ACC-123456 + + + diff --git a/openapi/components/responses/AtomEntry_CustomerAgreement.yaml b/openapi/components/responses/AtomEntry_CustomerAgreement.yaml new file mode 100644 index 0000000..1c3657c --- /dev/null +++ b/openapi/components/responses/AtomEntry_CustomerAgreement.yaml @@ -0,0 +1,25 @@ +description: >- + OK - Returns an Atom entry containing a single CustomerAgreement resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + CustomerAgreementEntry: + summary: A single CustomerAgreement entry + value: | + + urn:uuid:a9f3c5e8-7b6d-5e4c-9f2a-8d1c6e5b3a7f + + + + CustomerAgreement + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 840 + AGR-789012 + + + diff --git a/openapi/components/responses/AtomEntry_EndDevice.yaml b/openapi/components/responses/AtomEntry_EndDevice.yaml new file mode 100644 index 0000000..0cc373a --- /dev/null +++ b/openapi/components/responses/AtomEntry_EndDevice.yaml @@ -0,0 +1,24 @@ +description: >- + OK - Returns an Atom entry containing a single EndDevice resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + EndDeviceEntry: + summary: A single EndDevice entry + value: | + + urn:uuid:e9f5d3c8-6b7a-5e4d-9f2c-7a1d6e5b8c3f + + + EndDevice + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + false + false + + + diff --git a/openapi/components/responses/AtomEntry_Meter.yaml b/openapi/components/responses/AtomEntry_Meter.yaml new file mode 100644 index 0000000..06e96fd --- /dev/null +++ b/openapi/components/responses/AtomEntry_Meter.yaml @@ -0,0 +1,24 @@ +description: >- + OK - Returns an Atom entry containing a single Meter resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + MeterEntry: + summary: A single Meter entry + value: | + + urn:uuid:a8f7e6d5-9c8b-5e4d-9f2a-7d1c6e5b8a3f + + + Meter + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 16S + 900 + + + diff --git a/openapi/components/responses/AtomEntry_ProgramDateIdMappings.yaml b/openapi/components/responses/AtomEntry_ProgramDateIdMappings.yaml new file mode 100644 index 0000000..3be466f --- /dev/null +++ b/openapi/components/responses/AtomEntry_ProgramDateIdMappings.yaml @@ -0,0 +1,22 @@ +description: >- + OK - Returns an Atom entry containing a single ProgramDateIdMappings resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + ProgramDateIdMappingsEntry: + summary: A single ProgramDateIdMappings entry + value: | + + urn:uuid:f8e9d6c7-5b4a-5e4d-9f2c-7a1d6e5b8c3f + + + ProgramDateIdMappings + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + + + diff --git a/openapi/components/responses/AtomEntry_ServiceLocation.yaml b/openapi/components/responses/AtomEntry_ServiceLocation.yaml new file mode 100644 index 0000000..fbb5909 --- /dev/null +++ b/openapi/components/responses/AtomEntry_ServiceLocation.yaml @@ -0,0 +1,24 @@ +description: >- + OK - Returns an Atom entry containing a single ServiceLocation resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + ServiceLocationEntry: + summary: A single ServiceLocation entry + value: | + + urn:uuid:c7f9e5d2-8a6b-5e4c-9f3a-7d1c6e5b8a2f + + + + ServiceLocation + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + false + + + diff --git a/openapi/components/responses/AtomEntry_ServiceSupplier.yaml b/openapi/components/responses/AtomEntry_ServiceSupplier.yaml new file mode 100644 index 0000000..3aae824 --- /dev/null +++ b/openapi/components/responses/AtomEntry_ServiceSupplier.yaml @@ -0,0 +1,23 @@ +description: >- + OK - Returns an Atom entry containing a single ServiceSupplier resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + ServiceSupplierEntry: + summary: A single ServiceSupplier entry + value: | + + urn:uuid:c8f9e6d5-7b6a-5e4c-9f2d-8a1c6e5b7a3f + + + ServiceSupplier + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 0 + + + diff --git a/openapi/components/responses/AtomEntry_Statement.yaml b/openapi/components/responses/AtomEntry_Statement.yaml new file mode 100644 index 0000000..6dfb28f --- /dev/null +++ b/openapi/components/responses/AtomEntry_Statement.yaml @@ -0,0 +1,23 @@ +description: >- + OK - Returns an Atom entry containing a single Statement resource. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomEntry.yaml' + examples: + StatementEntry: + summary: A single Statement entry + value: | + + urn:uuid:e8f9d6c7-6b5a-5e4d-9f2c-7a1d6e5b8c3f + + + Statement + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 1697820000 + + + diff --git a/openapi/components/responses/AtomFeed_Customer.yaml b/openapi/components/responses/AtomFeed_Customer.yaml new file mode 100644 index 0000000..0a0a593 --- /dev/null +++ b/openapi/components/responses/AtomFeed_Customer.yaml @@ -0,0 +1,32 @@ +description: >- + OK - Returns an Atom feed containing a collection of Customer entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + CustomerFeed: + summary: A feed containing Customer resources + value: | + + urn:uuid:b47f3a45-8d21-5c19-a3d2-7f1e4b9c6a08 + + Customer + 2023-10-20T17:33:23.054424Z + + urn:uuid:c8e5f2d9-3a7b-5e4c-9d1f-6b8a2c3e5d7f + + + + Customer + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 0 + en_US + John Smith + + + + diff --git a/openapi/components/responses/AtomFeed_CustomerAccount.yaml b/openapi/components/responses/AtomFeed_CustomerAccount.yaml new file mode 100644 index 0000000..59839c9 --- /dev/null +++ b/openapi/components/responses/AtomFeed_CustomerAccount.yaml @@ -0,0 +1,31 @@ +description: >- + OK - Returns an Atom feed containing a collection of CustomerAccount entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + CustomerAccountFeed: + summary: A feed containing CustomerAccount resources + value: | + + urn:uuid:d5a9c8f2-4e6b-5d7a-8c3e-1f9b6a5d8c2e + + CustomerAccount + 2023-10-20T17:33:23.054424Z + + urn:uuid:e3f7b9d1-5c8a-6e4d-9f2b-7a1c5e8d3f6b + + + + CustomerAccount + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 15 + ACC-123456 + + + + diff --git a/openapi/components/responses/AtomFeed_CustomerAgreement.yaml b/openapi/components/responses/AtomFeed_CustomerAgreement.yaml new file mode 100644 index 0000000..f84a938 --- /dev/null +++ b/openapi/components/responses/AtomFeed_CustomerAgreement.yaml @@ -0,0 +1,31 @@ +description: >- + OK - Returns an Atom feed containing a collection of CustomerAgreement entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + CustomerAgreementFeed: + summary: A feed containing CustomerAgreement resources + value: | + + urn:uuid:f2d8c9e5-6a7b-5c4d-8e3f-9b1a6c5d8e2f + + CustomerAgreement + 2023-10-20T17:33:23.054424Z + + urn:uuid:a9f3c5e8-7b6d-5e4c-9f2a-8d1c6e5b3a7f + + + + CustomerAgreement + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 840 + AGR-789012 + + + + diff --git a/openapi/components/responses/AtomFeed_EndDevice.yaml b/openapi/components/responses/AtomFeed_EndDevice.yaml new file mode 100644 index 0000000..b963eec --- /dev/null +++ b/openapi/components/responses/AtomFeed_EndDevice.yaml @@ -0,0 +1,30 @@ +description: >- + OK - Returns an Atom feed containing a collection of EndDevice entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + EndDeviceFeed: + summary: A feed containing EndDevice resources + value: | + + urn:uuid:d8e9f5c3-7a6b-5e4d-9f2c-8a1d6e5c8b3f + + EndDevice + 2023-10-20T17:33:23.054424Z + + urn:uuid:e9f5d3c8-6b7a-5e4d-9f2c-7a1d6e5b8c3f + + + EndDevice + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + false + false + + + + diff --git a/openapi/components/responses/AtomFeed_Meter.yaml b/openapi/components/responses/AtomFeed_Meter.yaml new file mode 100644 index 0000000..0b038fa --- /dev/null +++ b/openapi/components/responses/AtomFeed_Meter.yaml @@ -0,0 +1,30 @@ +description: >- + OK - Returns an Atom feed containing a collection of Meter entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + MeterFeed: + summary: A feed containing Meter resources + value: | + + urn:uuid:f9e6d4c8-7b6a-5e4d-9f2c-8a1d6e5c7b3f + + Meter + 2023-10-20T17:33:23.054424Z + + urn:uuid:a8f7e6d5-9c8b-5e4d-9f2a-7d1c6e5b8a3f + + + Meter + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 16S + 900 + + + + diff --git a/openapi/components/responses/AtomFeed_ProgramDateIdMappings.yaml b/openapi/components/responses/AtomFeed_ProgramDateIdMappings.yaml new file mode 100644 index 0000000..eabeae7 --- /dev/null +++ b/openapi/components/responses/AtomFeed_ProgramDateIdMappings.yaml @@ -0,0 +1,28 @@ +description: >- + OK - Returns an Atom feed containing a collection of ProgramDateIdMappings entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + ProgramDateIdMappingsFeed: + summary: A feed containing ProgramDateIdMappings resources + value: | + + urn:uuid:e9f7d5c8-6b5a-5e4d-9f2c-8a1d6e5c7b3f + + ProgramDateIdMappings + 2023-10-20T17:33:23.054424Z + + urn:uuid:f8e9d6c7-5b4a-5e4d-9f2c-7a1d6e5b8c3f + + + ProgramDateIdMappings + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + + + + diff --git a/openapi/components/responses/AtomFeed_ServiceLocation.yaml b/openapi/components/responses/AtomFeed_ServiceLocation.yaml new file mode 100644 index 0000000..c156d79 --- /dev/null +++ b/openapi/components/responses/AtomFeed_ServiceLocation.yaml @@ -0,0 +1,30 @@ +description: >- + OK - Returns an Atom feed containing a collection of ServiceLocation entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + ServiceLocationFeed: + summary: A feed containing ServiceLocation resources + value: | + + urn:uuid:b5e8f3c9-6d7a-5c4e-8f2b-9a1c6d5e8b3f + + ServiceLocation + 2023-10-20T17:33:23.054424Z + + urn:uuid:c7f9e5d2-8a6b-5e4c-9f3a-7d1c6e5b8a2f + + + + ServiceLocation + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + false + + + + diff --git a/openapi/components/responses/AtomFeed_ServiceSupplier.yaml b/openapi/components/responses/AtomFeed_ServiceSupplier.yaml new file mode 100644 index 0000000..dd24683 --- /dev/null +++ b/openapi/components/responses/AtomFeed_ServiceSupplier.yaml @@ -0,0 +1,29 @@ +description: >- + OK - Returns an Atom feed containing a collection of ServiceSupplier entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + ServiceSupplierFeed: + summary: A feed containing ServiceSupplier resources + value: | + + urn:uuid:b9e7f5d4-8c6a-5e4d-9f2b-7a1c6e5d8b3f + + ServiceSupplier + 2023-10-20T17:33:23.054424Z + + urn:uuid:c8f9e6d5-7b6a-5e4c-9f2d-8a1c6e5b7a3f + + + ServiceSupplier + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 0 + + + + diff --git a/openapi/components/responses/AtomFeed_Statement.yaml b/openapi/components/responses/AtomFeed_Statement.yaml new file mode 100644 index 0000000..f662cc5 --- /dev/null +++ b/openapi/components/responses/AtomFeed_Statement.yaml @@ -0,0 +1,29 @@ +description: >- + OK - Returns an Atom feed containing a collection of Statement entries. +content: + application/atom+xml: + schema: + $ref: '../schemas/AtomFeed.yaml' + examples: + StatementFeed: + summary: A feed containing Statement resources + value: | + + urn:uuid:d9e8f6c5-7b6a-5e4d-9f2c-8a1d6e5c8b3f + + Statement + 2023-10-20T17:33:23.054424Z + + urn:uuid:e8f9d6c7-6b5a-5e4d-9f2c-7a1d6e5b8c3f + + + Statement + 2023-10-20T17:32:35.448812Z + 2023-10-20T17:33:23.054424Z + + + 1697820000 + + + + From e899fad3ebf2755a16a12a57f17034c418c5dfc6 Mon Sep 17 00:00:00 2001 From: Donald Coffin Date: Sat, 7 Feb 2026 22:36:34 -0500 Subject: [PATCH 3/4] feat: add Data Custodian path definitions for customer resources Add 18 path definition files for Data Custodian access: - Collection paths: /espi/1_1/resource/{Resource} - Individual paths: /espi/1_1/resource/{Resource}/{id} - All 9 customer resources: Customer, CustomerAccount, CustomerAgreement, ServiceLocation, EndDevice, Meter, ServiceSupplier, Statement, ProgramDateIdMappings Paths follow ESPI REQ.21.6.2.1 patterns with OAuth2 security, standard query parameters (published-max/min, updated-max/min, max-results, start-index, depth), and appropriate function block annotations (FB_50-58). Co-Authored-By: Claude Sonnet 4.5 --- openapi/paths/Customer.yaml | 28 +++++++++++++++++++ openapi/paths/CustomerAccount.yaml | 28 +++++++++++++++++++ .../CustomerAccount_{customerAccountId}.yaml | 28 +++++++++++++++++++ openapi/paths/CustomerAgreement.yaml | 28 +++++++++++++++++++ ...stomerAgreement_{customerAgreementId}.yaml | 28 +++++++++++++++++++ openapi/paths/Customer_{customerId}.yaml | 28 +++++++++++++++++++ openapi/paths/EndDevice.yaml | 28 +++++++++++++++++++ openapi/paths/EndDevice_{endDeviceId}.yaml | 28 +++++++++++++++++++ openapi/paths/Meter.yaml | 28 +++++++++++++++++++ openapi/paths/Meter_{meterId}.yaml | 28 +++++++++++++++++++ openapi/paths/ProgramDateIdMappings.yaml | 28 +++++++++++++++++++ ...eIdMappings_{programDateIdMappingsId}.yaml | 28 +++++++++++++++++++ openapi/paths/ServiceLocation.yaml | 28 +++++++++++++++++++ .../ServiceLocation_{serviceLocationId}.yaml | 28 +++++++++++++++++++ openapi/paths/ServiceSupplier.yaml | 28 +++++++++++++++++++ .../ServiceSupplier_{serviceSupplierId}.yaml | 28 +++++++++++++++++++ openapi/paths/Statement.yaml | 28 +++++++++++++++++++ openapi/paths/Statement_{statementId}.yaml | 28 +++++++++++++++++++ 18 files changed, 504 insertions(+) create mode 100644 openapi/paths/Customer.yaml create mode 100644 openapi/paths/CustomerAccount.yaml create mode 100644 openapi/paths/CustomerAccount_{customerAccountId}.yaml create mode 100644 openapi/paths/CustomerAgreement.yaml create mode 100644 openapi/paths/CustomerAgreement_{customerAgreementId}.yaml create mode 100644 openapi/paths/Customer_{customerId}.yaml create mode 100644 openapi/paths/EndDevice.yaml create mode 100644 openapi/paths/EndDevice_{endDeviceId}.yaml create mode 100644 openapi/paths/Meter.yaml create mode 100644 openapi/paths/Meter_{meterId}.yaml create mode 100644 openapi/paths/ProgramDateIdMappings.yaml create mode 100644 openapi/paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml create mode 100644 openapi/paths/ServiceLocation.yaml create mode 100644 openapi/paths/ServiceLocation_{serviceLocationId}.yaml create mode 100644 openapi/paths/ServiceSupplier.yaml create mode 100644 openapi/paths/ServiceSupplier_{serviceSupplierId}.yaml create mode 100644 openapi/paths/Statement.yaml create mode 100644 openapi/paths/Statement_{statementId}.yaml diff --git a/openapi/paths/Customer.yaml b/openapi/paths/Customer.yaml new file mode 100644 index 0000000..5632910 --- /dev/null +++ b/openapi/paths/Customer.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Customers [FB_50] + description: >- + Returns an Atom feed containing all Customer resources within the Data + Custodian. Requires a valid data_custodian_access_token. Customers represent + organizations receiving services from a service supplier. + operationId: findCustomersDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_Customer.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/CustomerAccount.yaml b/openapi/paths/CustomerAccount.yaml new file mode 100644 index 0000000..123e63e --- /dev/null +++ b/openapi/paths/CustomerAccount.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Customer Accounts [FB_51] + description: >- + Returns an Atom feed containing all CustomerAccount resources within the Data + Custodian. Requires a valid data_custodian_access_token. Customer accounts + contain billing and payment information. + operationId: findCustomerAccountsDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_CustomerAccount.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/CustomerAccount_{customerAccountId}.yaml b/openapi/paths/CustomerAccount_{customerAccountId}.yaml new file mode 100644 index 0000000..40f2c9e --- /dev/null +++ b/openapi/paths/CustomerAccount_{customerAccountId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific Customer Account [FB_51] + description: >- + Returns an Atom entry containing a single CustomerAccount resource identified by + customerAccountId. Requires a valid data_custodian_access_token. + operationId: findCustomerAccountByIdDC + parameters: + - name: customerAccountId + in: path + description: Unique identifier for the CustomerAccount resource + required: true + schema: + type: string + minLength: 6 + example: "123456" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_CustomerAccount.yaml' + '400': + description: Bad Request - Invalid customerAccountId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - CustomerAccount with specified ID not found. diff --git a/openapi/paths/CustomerAgreement.yaml b/openapi/paths/CustomerAgreement.yaml new file mode 100644 index 0000000..b34ba39 --- /dev/null +++ b/openapi/paths/CustomerAgreement.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Customer Agreements [FB_52] + description: >- + Returns an Atom feed containing all CustomerAgreement resources within the Data + Custodian. Requires a valid data_custodian_access_token. Customer agreements + define service terms at specific locations. + operationId: findCustomerAgreementsDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_CustomerAgreement.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/CustomerAgreement_{customerAgreementId}.yaml b/openapi/paths/CustomerAgreement_{customerAgreementId}.yaml new file mode 100644 index 0000000..ce962a0 --- /dev/null +++ b/openapi/paths/CustomerAgreement_{customerAgreementId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific Customer Agreement [FB_52] + description: >- + Returns an Atom entry containing a single CustomerAgreement resource identified by + customerAgreementId. Requires a valid data_custodian_access_token. + operationId: findCustomerAgreementByIdDC + parameters: + - name: customerAgreementId + in: path + description: Unique identifier for the CustomerAgreement resource + required: true + schema: + type: string + minLength: 6 + example: "789012" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_CustomerAgreement.yaml' + '400': + description: Bad Request - Invalid customerAgreementId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - CustomerAgreement with specified ID not found. diff --git a/openapi/paths/Customer_{customerId}.yaml b/openapi/paths/Customer_{customerId}.yaml new file mode 100644 index 0000000..39132cc --- /dev/null +++ b/openapi/paths/Customer_{customerId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific Customer [FB_50] + description: >- + Returns an Atom entry containing a single Customer resource identified by + customerId. Requires a valid data_custodian_access_token. + operationId: findCustomerByIdDC + parameters: + - name: customerId + in: path + description: Unique identifier for the Customer resource + required: true + schema: + type: string + minLength: 6 + example: "407630" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_Customer.yaml' + '400': + description: Bad Request - Invalid customerId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - Customer with specified ID not found. diff --git a/openapi/paths/EndDevice.yaml b/openapi/paths/EndDevice.yaml new file mode 100644 index 0000000..b377f19 --- /dev/null +++ b/openapi/paths/EndDevice.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all End Devices [FB_54] + description: >- + Returns an Atom feed containing all EndDevice resources within the Data + Custodian. Requires a valid data_custodian_access_token. End devices are + assets that perform metering and load management functions. + operationId: findEndDevicesDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_EndDevice.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/EndDevice_{endDeviceId}.yaml b/openapi/paths/EndDevice_{endDeviceId}.yaml new file mode 100644 index 0000000..28f0697 --- /dev/null +++ b/openapi/paths/EndDevice_{endDeviceId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific End Device [FB_54] + description: >- + Returns an Atom entry containing a single EndDevice resource identified by + endDeviceId. Requires a valid data_custodian_access_token. + operationId: findEndDeviceByIdDC + parameters: + - name: endDeviceId + in: path + description: Unique identifier for the EndDevice resource + required: true + schema: + type: string + minLength: 6 + example: "901234" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_EndDevice.yaml' + '400': + description: Bad Request - Invalid endDeviceId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - EndDevice with specified ID not found. diff --git a/openapi/paths/Meter.yaml b/openapi/paths/Meter.yaml new file mode 100644 index 0000000..1212147 --- /dev/null +++ b/openapi/paths/Meter.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Meters [FB_55] + description: >- + Returns an Atom feed containing all Meter resources within the Data + Custodian. Requires a valid data_custodian_access_token. Meters are physical + assets that perform metering at usage points. + operationId: findMetersDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_Meter.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/Meter_{meterId}.yaml b/openapi/paths/Meter_{meterId}.yaml new file mode 100644 index 0000000..93176f3 --- /dev/null +++ b/openapi/paths/Meter_{meterId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific Meter [FB_55] + description: >- + Returns an Atom entry containing a single Meter resource identified by + meterId. Requires a valid data_custodian_access_token. + operationId: findMeterByIdDC + parameters: + - name: meterId + in: path + description: Unique identifier for the Meter resource + required: true + schema: + type: string + minLength: 6 + example: "567890" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_Meter.yaml' + '400': + description: Bad Request - Invalid meterId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - Meter with specified ID not found. diff --git a/openapi/paths/ProgramDateIdMappings.yaml b/openapi/paths/ProgramDateIdMappings.yaml new file mode 100644 index 0000000..5afe89c --- /dev/null +++ b/openapi/paths/ProgramDateIdMappings.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Program Date ID Mappings [FB_58] + description: >- + Returns an Atom feed containing all ProgramDateIdMappings resources within the Data + Custodian. Requires a valid data_custodian_access_token. Program date mappings + contain customer energy efficiency program enrollments. + operationId: findProgramDateIdMappingsDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_ProgramDateIdMappings.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml b/openapi/paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml new file mode 100644 index 0000000..18c7cbe --- /dev/null +++ b/openapi/paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve specific Program Date ID Mappings [FB_58] + description: >- + Returns an Atom entry containing a single ProgramDateIdMappings resource identified by + programDateIdMappingsId. Requires a valid data_custodian_access_token. + operationId: findProgramDateIdMappingsByIdDC + parameters: + - name: programDateIdMappingsId + in: path + description: Unique identifier for the ProgramDateIdMappings resource + required: true + schema: + type: string + minLength: 6 + example: "555666" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_ProgramDateIdMappings.yaml' + '400': + description: Bad Request - Invalid programDateIdMappingsId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - ProgramDateIdMappings with specified ID not found. diff --git a/openapi/paths/ServiceLocation.yaml b/openapi/paths/ServiceLocation.yaml new file mode 100644 index 0000000..e37e147 --- /dev/null +++ b/openapi/paths/ServiceLocation.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Service Locations [FB_53] + description: >- + Returns an Atom feed containing all ServiceLocation resources within the Data + Custodian. Requires a valid data_custodian_access_token. Service locations + represent physical premises where service is provided. + operationId: findServiceLocationsDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_ServiceLocation.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/ServiceLocation_{serviceLocationId}.yaml b/openapi/paths/ServiceLocation_{serviceLocationId}.yaml new file mode 100644 index 0000000..77edc24 --- /dev/null +++ b/openapi/paths/ServiceLocation_{serviceLocationId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific Service Location [FB_53] + description: >- + Returns an Atom entry containing a single ServiceLocation resource identified by + serviceLocationId. Requires a valid data_custodian_access_token. + operationId: findServiceLocationByIdDC + parameters: + - name: serviceLocationId + in: path + description: Unique identifier for the ServiceLocation resource + required: true + schema: + type: string + minLength: 6 + example: "345678" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_ServiceLocation.yaml' + '400': + description: Bad Request - Invalid serviceLocationId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - ServiceLocation with specified ID not found. diff --git a/openapi/paths/ServiceSupplier.yaml b/openapi/paths/ServiceSupplier.yaml new file mode 100644 index 0000000..6d3f37b --- /dev/null +++ b/openapi/paths/ServiceSupplier.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Service Suppliers [FB_56] + description: >- + Returns an Atom feed containing all ServiceSupplier resources within the Data + Custodian. Requires a valid data_custodian_access_token. Service suppliers + are organizations providing utility services to customers. + operationId: findServiceSuppliersDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_ServiceSupplier.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/ServiceSupplier_{serviceSupplierId}.yaml b/openapi/paths/ServiceSupplier_{serviceSupplierId}.yaml new file mode 100644 index 0000000..cb98474 --- /dev/null +++ b/openapi/paths/ServiceSupplier_{serviceSupplierId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific Service Supplier [FB_56] + description: >- + Returns an Atom entry containing a single ServiceSupplier resource identified by + serviceSupplierId. Requires a valid data_custodian_access_token. + operationId: findServiceSupplierByIdDC + parameters: + - name: serviceSupplierId + in: path + description: Unique identifier for the ServiceSupplier resource + required: true + schema: + type: string + minLength: 6 + example: "111222" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_ServiceSupplier.yaml' + '400': + description: Bad Request - Invalid serviceSupplierId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - ServiceSupplier with specified ID not found. diff --git a/openapi/paths/Statement.yaml b/openapi/paths/Statement.yaml new file mode 100644 index 0000000..e9fc080 --- /dev/null +++ b/openapi/paths/Statement.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve all Statements [FB_57] + description: >- + Returns an Atom feed containing all Statement resources within the Data + Custodian. Requires a valid data_custodian_access_token. Statements are + billing statements for services provided to customers. + operationId: findStatementsDC + parameters: + - $ref: '../components/parameters/published-max.yaml' + - $ref: '../components/parameters/published-min.yaml' + - $ref: '../components/parameters/updated-max.yaml' + - $ref: '../components/parameters/updated-min.yaml' + - $ref: '../components/parameters/max-results.yaml' + - $ref: '../components/parameters/start-index.yaml' + - $ref: '../components/parameters/depth.yaml' + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomFeed_Statement.yaml' + '202': + description: Accepted - The request has been accepted for processing. + '400': + description: Bad Request - The request was malformed or contained invalid parameters. + '403': + description: Forbidden - The access token does not have sufficient scope. diff --git a/openapi/paths/Statement_{statementId}.yaml b/openapi/paths/Statement_{statementId}.yaml new file mode 100644 index 0000000..269638e --- /dev/null +++ b/openapi/paths/Statement_{statementId}.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Customer Resources + summary: Retrieve a specific Statement [FB_57] + description: >- + Returns an Atom entry containing a single Statement resource identified by + statementId. Requires a valid data_custodian_access_token. + operationId: findStatementByIdDC + parameters: + - name: statementId + in: path + description: Unique identifier for the Statement resource + required: true + schema: + type: string + minLength: 6 + example: "333444" + security: + - oauth2: [] + responses: + '200': + $ref: '../components/responses/AtomEntry_Statement.yaml' + '400': + description: Bad Request - Invalid statementId format. + '403': + description: Forbidden - The access token does not have sufficient scope. + '404': + description: Not Found - Statement with specified ID not found. From 851cf57e79ab5c96399c611b7e0a25c54ecd7f9c Mon Sep 17 00:00:00 2001 From: Donald Coffin Date: Sat, 7 Feb 2026 22:40:09 -0500 Subject: [PATCH 4/4] feat: integrate customer resources into main OpenAPI spec Update openapi/openapi.yaml to include customer resources: - Add 18 customer resource paths to paths section - Add 9 customer resource schemas to components.schemas - Add 18 customer resource responses to components.responses - Add Customer Resources tag and tag group - Update API description to mention customer/billing data - Document customer namespace and PII considerations Enables Spring Boot code generation for complete ESPI API including both energy usage data and customer/billing information. Spec validates with zero errors (redocly lint) and builds successfully. Co-Authored-By: Claude Sonnet 4.5 --- openapi/openapi.yaml | 114 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 110 insertions(+), 4 deletions(-) diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml index deed1cf..6e643f8 100644 --- a/openapi/openapi.yaml +++ b/openapi/openapi.yaml @@ -4,9 +4,10 @@ info: version: 1.1.0 description: > The Green Button Energy Services Provider Interface (ESPI) API provides - RESTful access to energy usage data following the NAESB REQ.21 ESPI - standard. This API enables Data Custodians and Third Party Applications - to exchange energy usage information using Atom-formatted XML feeds. + RESTful access to energy usage data and retail customer information following + the NAESB REQ.21 ESPI standard. This API enables Data Custodians and Third + Party Applications to exchange both energy usage information and customer/billing + data using Atom-formatted XML feeds. **Interactive API Explorer:** Try out the API using [Swagger UI](./swagger/) @@ -15,7 +16,13 @@ info: All resources are returned as Atom feeds (collections) or Atom entries (individual resources) using the `application/atom+xml` content type. The ESPI data elements are embedded within the Atom `` element - using the `http://naesb.org/espi` XML namespace. + using either the `http://naesb.org/espi` XML namespace (energy data) or + the `http://naesb.org/espi/customer` XML namespace (customer/billing data). + + + **Note:** Customer resources contain Personally Identifiable Information (PII) + and use a separate namespace (`http://naesb.org/espi/customer`). They cannot be + retrieved in the same request as energy usage data. # Authentication @@ -110,6 +117,10 @@ tags: description: >- Operations for checking the current status of the Data Custodian Resource Server. + - name: Customer Resources + description: >- + Operations for accessing customer and billing information resources + (PII-containing). Uses the http://naesb.org/espi/customer namespace. x-tagGroups: - name: OAuth Resources tags: @@ -132,6 +143,9 @@ x-tagGroups: tags: - LocalTimeParameters - ServiceStatus + - name: Customer Data + tags: + - Customer Resources servers: - url: https://sandbox.greenbuttonalliance.org:8443/DataCustodian description: Green Button Alliance Sandbox Server @@ -222,6 +236,44 @@ paths: '/espi/1_1/resource/ReadServiceStatus': $ref: 'paths/ReadServiceStatus.yaml' + # Customer Resources - Data Custodian Access + '/espi/1_1/resource/Customer': + $ref: 'paths/Customer.yaml' + '/espi/1_1/resource/Customer/{customerId}': + $ref: 'paths/Customer_{customerId}.yaml' + '/espi/1_1/resource/CustomerAccount': + $ref: 'paths/CustomerAccount.yaml' + '/espi/1_1/resource/CustomerAccount/{customerAccountId}': + $ref: 'paths/CustomerAccount_{customerAccountId}.yaml' + '/espi/1_1/resource/CustomerAgreement': + $ref: 'paths/CustomerAgreement.yaml' + '/espi/1_1/resource/CustomerAgreement/{customerAgreementId}': + $ref: 'paths/CustomerAgreement_{customerAgreementId}.yaml' + '/espi/1_1/resource/ServiceLocation': + $ref: 'paths/ServiceLocation.yaml' + '/espi/1_1/resource/ServiceLocation/{serviceLocationId}': + $ref: 'paths/ServiceLocation_{serviceLocationId}.yaml' + '/espi/1_1/resource/EndDevice': + $ref: 'paths/EndDevice.yaml' + '/espi/1_1/resource/EndDevice/{endDeviceId}': + $ref: 'paths/EndDevice_{endDeviceId}.yaml' + '/espi/1_1/resource/Meter': + $ref: 'paths/Meter.yaml' + '/espi/1_1/resource/Meter/{meterId}': + $ref: 'paths/Meter_{meterId}.yaml' + '/espi/1_1/resource/ServiceSupplier': + $ref: 'paths/ServiceSupplier.yaml' + '/espi/1_1/resource/ServiceSupplier/{serviceSupplierId}': + $ref: 'paths/ServiceSupplier_{serviceSupplierId}.yaml' + '/espi/1_1/resource/Statement': + $ref: 'paths/Statement.yaml' + '/espi/1_1/resource/Statement/{statementId}': + $ref: 'paths/Statement_{statementId}.yaml' + '/espi/1_1/resource/ProgramDateIdMappings': + $ref: 'paths/ProgramDateIdMappings.yaml' + '/espi/1_1/resource/ProgramDateIdMappings/{programDateIdMappingsId}': + $ref: 'paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml' + components: securitySchemes: oauth2: @@ -290,6 +342,24 @@ components: $ref: 'components/schemas/SummaryMeasurement.yaml' LineItem: $ref: 'components/schemas/LineItem.yaml' + Customer: + $ref: 'components/schemas/Customer.yaml' + CustomerAccount: + $ref: 'components/schemas/CustomerAccount.yaml' + CustomerAgreement: + $ref: 'components/schemas/CustomerAgreement.yaml' + ServiceLocation: + $ref: 'components/schemas/ServiceLocation.yaml' + EndDevice: + $ref: 'components/schemas/EndDevice.yaml' + Meter: + $ref: 'components/schemas/Meter.yaml' + ServiceSupplier: + $ref: 'components/schemas/ServiceSupplier.yaml' + Statement: + $ref: 'components/schemas/Statement.yaml' + ProgramDateIdMappings: + $ref: 'components/schemas/ProgramDateIdMappings.yaml' responses: AtomFeed: $ref: 'components/responses/AtomFeed.yaml' @@ -331,3 +401,39 @@ components: $ref: 'components/responses/AtomFeed_UsageSummary.yaml' AtomEntry_UsageSummary: $ref: 'components/responses/AtomEntry_UsageSummary.yaml' + AtomFeed_Customer: + $ref: 'components/responses/AtomFeed_Customer.yaml' + AtomEntry_Customer: + $ref: 'components/responses/AtomEntry_Customer.yaml' + AtomFeed_CustomerAccount: + $ref: 'components/responses/AtomFeed_CustomerAccount.yaml' + AtomEntry_CustomerAccount: + $ref: 'components/responses/AtomEntry_CustomerAccount.yaml' + AtomFeed_CustomerAgreement: + $ref: 'components/responses/AtomFeed_CustomerAgreement.yaml' + AtomEntry_CustomerAgreement: + $ref: 'components/responses/AtomEntry_CustomerAgreement.yaml' + AtomFeed_ServiceLocation: + $ref: 'components/responses/AtomFeed_ServiceLocation.yaml' + AtomEntry_ServiceLocation: + $ref: 'components/responses/AtomEntry_ServiceLocation.yaml' + AtomFeed_EndDevice: + $ref: 'components/responses/AtomFeed_EndDevice.yaml' + AtomEntry_EndDevice: + $ref: 'components/responses/AtomEntry_EndDevice.yaml' + AtomFeed_Meter: + $ref: 'components/responses/AtomFeed_Meter.yaml' + AtomEntry_Meter: + $ref: 'components/responses/AtomEntry_Meter.yaml' + AtomFeed_ServiceSupplier: + $ref: 'components/responses/AtomFeed_ServiceSupplier.yaml' + AtomEntry_ServiceSupplier: + $ref: 'components/responses/AtomEntry_ServiceSupplier.yaml' + AtomFeed_Statement: + $ref: 'components/responses/AtomFeed_Statement.yaml' + AtomEntry_Statement: + $ref: 'components/responses/AtomEntry_Statement.yaml' + AtomFeed_ProgramDateIdMappings: + $ref: 'components/responses/AtomFeed_ProgramDateIdMappings.yaml' + AtomEntry_ProgramDateIdMappings: + $ref: 'components/responses/AtomEntry_ProgramDateIdMappings.yaml'