GridX Data Integration Specification
The GridX Data Integration Specification defines how all client source data should be mapped to the GridX Data Model. Each file type serves a distinct purpose and must abide by certain rules to achieve the greatest business value. All files should be provided as .csv, .psv or .tsv
Daily Digest
Filename: GRIDX_{CLIENT}_DAILYDIGEST_yyyyMMddHHmmss
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable
Overview: The Daily Digest file that contains a list of file names, file line counts, and the number of files that are sent by the client to GridX daily. The Daily Digest ensure all files and records are loaded.
File Specification
Header | Format | Optional | Description |
---|---|---|---|
File_name | string | No | filename provided by Utility |
Line_count | number | No | total number of lines per corresponding filename (including header) Note: that filename is appended with a timestamp form Message Way |
MD5 | number | Yes | md5 count. Can be used as sum check |
Customer Data
Customer
Filename: GRIDX_{CLIENT}_CUSTOMER_yyyyMMddHHmmss
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable
Overview: The Customer file provides the unique IDs that define utility customers their services. In order for the Rate Engine to accurately and reliably recreate billing calculations in the source CIS/CSS, GridX needs to map the customer data model in the source system to the GridX data model.
The GridX data model is based on two important concepts:
The Contract ID, which is the unit of tariff calculation and typically represents the service agreement with the customer
The MeterAccount ID, which represents the point of usage aggregation (i.e., all usage relevant for billing tied to the specific Contract ID
Everything above the Contract is for reporting/aggregation purposes, and everything below the Meter Account relates to meter and usage channel mapping.

Checklist:
- The Contract ID is unique for the tenant for all time
- The Contract ID is 1:1 with MeterAccount ID always (for all time)
- The MeterAccount ID is the entity that contains the “billable usage” for a given bill cycle
- The MeterAccount ID must be 1:many with Meter ID to support Meter Totalization use cases
File Specification
Column Name | Expected Format | Optional | Description | SAP | CC&B |
---|---|---|---|---|---|
Person_ID | String | No | Unique identifier for the person or company tied to the account | Business Partner ID | Person ID |
Entity_ID | String | No | This represents the customer account, which may have multiple services | Contract Account ID | Account ID |
Contract_ID | String | No | Unique identifier for the utility contract for a given service (i.e. electric or gas) | Contract ID “starts with 4” | Service Agreement ID |
Premise_ID | String | Yes | Unique identifier for the premise location (i.e., service address) | Premise ID “starts with 7” | Premise ID |
ServicePoint_ID | String | Yes | Unique identifier for the point of delivery | Service Point OR Point of Delivery (PoD) depending on version “starts with 6” | Service Point ID |
MeterAccount_ID | String | No | Unique usage aggregation pointidentifier (similar to service point, but not identical) | Installation ID “starts with 5” | Depends on Meter Totalization use cases |
Contract_start_date | *DateTime - yyyyMMddHHmm | No | Start date of the Contract (“move-in” date) | ||
Contract_end_date | *DateTime - yyyyMMddHHmm | No | End date of the Contract (“move-out” date) | ||
Service_status | String | Yes | Active, cancelled, pending start, pending stop, etc. |
*DateTime fields can also be Date. In those cases, we interpret start dates to be the start of the 0th hour of the date and end dates to be the end of the 24th hour of the day. We interpret all date/time to be in the LOCAL time zone (unless data is explicitly provided in UTC time).
For the Contract_end_date, null is acceptable if the contract is active (has no end date).
MeterAccount Meter
Filename: GRIDX_{CLIENT}_METERACCOUNTMETER_yyyyMMddHHmmss
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable
Overview: The meter is the measurement device in the field that records energy delivered to customers (consumption) and received from customers (exported generation). The utility headend collects this measurement data and stores and validates (VEE) the data in the Meter Data Management System (MDMS).
At GridX, the Meter_ID represents the unique identifier for the device. GridX also has the concept of Meteraccount_ID which is the usage aggregation pointidentifier.
When the physical meter is exchanged (aka "meter swap"), the Meter_ID changes but the Meteraccount_ID does not.
When the Meter_ID is the primary key for the usage data extract, this file is required. If the Meteraccount_ID is the primary key for the usage data extract, this file is optional. If this file is not provided, GridX will be "blind" to meter swaps and will be unable to report out information regarding the Meter_ID.
Checklist:
- The MeterAccount ID is a 1:1 relationship with the Contract_ID for all time and represents the billable usage
- The MeterAccount ID must be 1:many with Meter ID to support Meter Totalization use cases
File Specification
Column Name | Expected Format | Optional | Description |
---|---|---|---|
Meteraccount_ID | String | No | Unique usage aggregation pointidentifier (similar to service point, but not identical) |
Meter_ID | String | No | The physical meter ID associated with each meter install location at a point in time |
Meter_install_date | DateTime - yyyyMMddHHmm | No | Date a physical meter ID is installed at a location |
Meter_removal_date | *DateTime - yyyyMMddHHmm | No | Date a physical meter ID is removed. For active meters, NULL is acceptable |
*For the Meter_removal_date, null is acceptable if the meter is active (has no removal date).
Customer Attribute Data
Filename: GRIDX_{CLIENT}_CUSTOMERATTRIBUTE_yyyyMMddHHmmss
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable
Overview: An attribute is any fact about a customer or their service. These attributes provide basic customer information such as first name, last name, and address information. Attributes also describe the customer’s rate plan (rate code attribute) as well as any other facts that impact how the bill is framed and calculated (low income discount, special programs/riders, bill cycle).
In the GridX data model, the attribute can be attached at any level in the account hierarchy (for example, attributes can exist at the contract ID level, person level, servicepoint level, etc.). How these attributes are “attached”, as well as the time slices during which the attributes are effective, need to be provided in the extract.
Checklist:
- The ID_type matches the ID Type of the client source system
- Each attribute should be “time slice” data. If accurate start/end dates are not available in the source data, a discussion is required to agree on the best proxy
File Specification
Column Name | Expected Format | Optional | Description |
---|---|---|---|
ID_type | String | No | Specifies which type of ID. Values are: |
ID | String | No | Required ID identifier |
Key | String | No | Key identifying the attribute |
Value | String | No | Value for the attribute |
Start_date | Date - yyyyMMdd | No | Date this attribute began to apply |
End_date | Date - yyyyMMdd | No | Date this attribute will stop applying. NULL or high value (“9999-12-31”) represents the currently active attribute |
Common Attributes
Rate Code
Bill Cycle (aka Read Cycle)
Opt-in Rider/Program flag (e.g. NEM)
Opt-in Rider/Program details (e.g. NEM Type)
Voltage
Phase
Multipliers
Premise Location (address, zip code, city, state, etc.)
Customer Details (name, contact details, etc.)
Industry type (SIC, NAICS)
Low income designations (LIHEAP, CARE, FERA, deed-restricted affordable housing)
Third party supply (boolean)
Third party supplier (supplier name)
Example File
ID_type | ID | Key | Value | Start_date | End_date |
---|---|---|---|---|---|
CT | 123456789 | rate_code | GS1 | 2021-03-14 | 2025-02-17 |
CT | 123456789 | rate_code | GS2 | 2025-02-17 | |
SP | 987654321 | voltage | secondary | 2003-10-08 | |
PM | 222333444 | service_address | 123 Main St | 2003-10-08 |
Bill Summary
Filename: GRIDX_{CLIENT}_BILLING_yyyyMMddHHmmss
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable
Overview: This file contains the billing summary data for customers such as the billed usage and billed amounts.
Checklist
- The bill_id represents the unique set of charges for a contract for a given bill cycle. This is different from a “pdf bill” or “invoice”
- For example, a typical Residential Customer may receive a single pdf bill (aka “invoice”) with their electric and gas charges. This represents 2 GridX bill_ids (1 gas, 1 electric). For Oracle CCB/C2M, the GridX bill_id maps to the bseg_id.
- The bill_id is unique for the tenant except for cancel/rebill
- The bill_year and bill_month should match the client source system. This is especially important for clients with SAP and CIS’s that use bill month to define seasons and price changes. Note the bill month may not align with the bill start/end dates depending on the CIS.
- For a given contract_id, all bill_id’s must be continuous. This means the start date of each bill should be exactly 1 day after the end date of the previous bill
- The GridX
bill_start_date
starts at the beginning of the day (00:00) - The GridX
bill_end_date
ends at the end of the day (23:59:59; “inclusive”)
File Specification
Column Name | Expected Format | Optional | Description |
---|---|---|---|
Bill_ID | String | No | Unique Bill Identifier for bill segment |
ServicePoint_ID | String | Yes | Additional identifier |
Contract_ID | String | No | Unique identifier for the service agreement |
MeterAccount_ID | String | No | Additional identifier |
Bill_start_date | Date - yyyyMMdd | No | Bill start date (inclusive) |
Bill_end_date | Date - yyyyMMdd | No | Bill end date (inclusive) |
Bill_year | String YYYY | No | Pricing or accounting “year” |
Bill_month | String MM | No | Pricing or accounting “month” |
Bill_rate_code | String | Yes | The rate code for the given bill record |
Bill_cycle_code | String | Yes | |
Total_bill_usage_value | Number | No | Total KWH per the bill |
Total_bill_amount | Number | No | Bill amount |
Is_estimate | 0,1 | Yes | Determines if the bill is estimated |
Is_cancellation | 0,1 | No | Determines if the bill is cancelled |
Cancel / Rebill
GridX Standard Cancel/Rebill process is as follows:
A bill is provided according to the ICD above. At this time, it is not known that the bill will later be cancelled
A record for the same
bill_id
is provided withIs_cancellation = 1.
The bill is now cancelled.The rebill is provided with a different
bill_id
from the cancelled bill
Additional detail here: https://gridxissues.atlassian.net/wiki/spaces/PROD/pages/8905755352/Billing+Cancel+Rebill
Bill Details
Filename: GRIDX_{CLIENT}_BILLINGDETAIL_yyyyMMddHHmmss
Overview: The Billing Details interface allows GridX to compare its rate model calculations at bill line item level (“Level 2 Calibration”). If a GridX-calculated bill does not match the Total Bill Amount in the Billing Data Extract, GridX uses the Billing Details data to determine which part of the GridX-calculated bill does not match. Once the issue is identified, it is categorized and assigned to modeling for further analysis.
-for each row that has Bill ID, the sum of all those rows should equal to total of Bill amount in 'Bill Header'
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable.
Checklist
- The
bill_id
represents the unique set of charges for a contract for a given bill cycle. This is different from a “pdf bill” or “invoice” - For example, a typical Residential Customer may receive a single pdf bill (“invoice”) with their electric and gas charges. This represents 2 GridX bill_ids (1 gas, 1 electric). For Oracle CCB/C2M, the GridX bill_id maps to the bseg_id.
- The
bill_id
is unique for the tenant except for cancel/rebill - The
bill_year
andbill_month
should match the client source system. This is especially important for clients with SAP and CIS’s that use bill month to define seasons and price changes. Note the bill month may not align with the bill start/end dates depending on the CIS. - For a given
contract_id
, allbill_id
’s must be continuous. This means the start date of each bill should be exactly 1 day after the end date of the previous bill - The GridX
bill_start_date
starts at the beginning of the day (00:00) - The GridX
bill_end_date
ends at the end of the day (23:59:59; “inclusive”) - The charge_code must map to one charge type per tariff. For example, if
charge_code = 123
maps to “on-peak energy”,charge_code = 123
cannot be used for any other charges - (
Line_item_quantity
*Line_item_price
) =Bill_line_item_amount
- For each
bill_id
, the sum of allBill_line_item_amount
should equal theTotal_bill_amount
in the 'Bill Summary' interface
Column Name | Expected Format | Optional | Description |
---|---|---|---|
Bill_ID | String | No | Unique Bill Identifier for bill segment |
Contract_ID | String | No | Unique identifier for the service agreement |
MeterAccount_ID | String | No | Additional identifier |
Bill_start_date | String | No | Start Date of Bill |
Bill_end_date | String | No | End Date of Bill |
Bill_year | Number | No | Pricing or bill “year” |
Bill_month | Number | No | Pricing or bill “month” |
Bill_line_item_code | String | No | Unique identifier for the line item |
Bill_line_item_description | String | No | Human readable description of the line item |
Bill_line_item_quantity | Decimal | No | The quantity (“billing determinant”) for the line item. For example “100” |
Bill_line_item_unit | String | No | The quantity (“billing determinant”) unit. For example “kWh”, “kW”, “days” |
Bill_line_item_price | Decimal | No | The price or factor applied to the quantity. For example “0.32” |
Bill_line_item_field_1 | TBD | Yes | Additional field for capturing other bill line item details such as proration factors, bill section, internal codes, etc. |
Bill_line_item_field_2 | TBD | Yes | Additional field for capturing other bill line item details such as proration factors, bill section, internal codes, etc. |
Bill_line_item_field_3 | TBD | Yes | Additional field for capturing other bill line item details such as proration factors, bill section, internal codes, etc. |
Bill_line_item_amount | Number | No | The extended dollar amount of the line item charges. |
Bill_line_item_start_date | Date - yyyyMMdd | No | Bill line item start date |
Bill_line_item_end_date | Date - yyyyMMdd | No | Bill line item end date |
Interval, Register and Usage Data
Interval & Register
Filename: GRIDX_{CLIENT}_INTERVAL_yyyyMMddHHmmss
GRIDX_{CLIENT}_REGISTER_yyyyMMddHHmmss
Overview: The interval file consists of meter data collected at defined intervals, typically every 15 or 60 minutes. The interval file contains energy delivered, received and other meter reads such as kVA and kVARh.
This interface can also be used for Register reads that provide cumulative meter reads (similar to a car odometer) typically at a frequency of once per day or once per bill cycle. The sum of the interval data should match the register usage for the same channel and time period.
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable. This file can be divided into multiple files and delivered in one day if size is an issue.
Checklist
- The MeterAccount ID must be 1:many with Meter ID to support Meter Totalization use cases
- GridX interprets interval timestamps as “start of interval” whereas most utilities interpret as as “end of interval”. The client must confirm the nature of their interval data in writing.
Column Name | Expected Format | Optional | Description |
---|---|---|---|
MeterAccount_ID | String | No* | MeterAccount_ID is acceptable if the Meter IDs are not available |
Meter_ID | String | No* | Meter ID is the unique meter ID where usage is stored. |
Usage_value | Number | No | Preferred Decimal (15,5) |
Date_of_interval | String – yyyyMMdd | No | Interval data date Client must confirm “end of interval” vs. “start of interval” |
Datetime_of_interval | DateTime – yyyyMMddHHmm | No | Client must confirm “end of interval” vs. “start of interval” |
Channel | String | No | The unique identifier of the meter channel. This can be a numerical value (e.g. “1”) or text (“KWH_DEL”) |
Time_zone | String | No | Utility Timezone (e.g. America/Los_Angeles) or UTC |
Interval_frequency | Number | No | The length in minutes of the interval (e.g. 15, 60) |
Data_version | String | No | The quality or read type of the quantity (e.g. Actual (A), Estimate (E), etc.) |
*The interval data can be stored using the ID for the physical device (i.e. meter) or the usage point. Only one ID is required.
Billing Determinant Usage (Optional)
Filename: GRIDX_{CLIENT}_BILLDETERMINANTS_yyyyMMddHHmmss
Overview: The billing determinants file consists of billed usage values framed by bill cycle periods. The Billing Determinants file contains energy consumption as well as energy generation/exports per season and time-of-use period.
Column Name | Expected Format | Optional | Description |
---|---|---|---|
MeterAccount_ID | String | No | MeterAccount_ID |
Usage_value | Number | No | Preferred Decimal (15,5) |
Start_time_of_interval | DateTime – yyyyMMddHHmm | No | The start date and time of the billing determinant. This should align with the billing cycle or bill segment |
End_time_of_interval | DateTime – yyyyMMddHHmm | No | The end date and time of the billing determinant. This should align with the billing cycle or bill segment |
Channel | String | No | *See channel mapping documentation |
Data_version | String | Yes | The quality or read type of the quantity (e.g. Actual (A), Estimate (E), etc.) |
Time_zone | String | No | Time Zone (e.g. America/Los_Angeles) |
Rate Modeling Data
Billing Cycle
Filename: GRIDX_{CLIENT}_BILLINGCYCLE_yyyyMMddHHmmss
Overview: This file provides the SYSTEM billing cycle for the customers that determines the billing period being billed for that customer. Useful for Bill forecasting and reframing customer bills for rate analysis.
Suggested File Frequency: Annual. Blank files with no data are welcome when applicable.
Column Name | Expected Format | Optional | Description |
---|---|---|---|
Read_Cycle | String | No | Billing Cycle Unique Identifier |
Billing_Cycle_Start_Date | String | No | Bill Cycle Start Date |
Billing_Cycle_End_Date | String | No | Bill Cycle End Date |
Bill_Month | String | No | Billing Cycle Bill Month |
Bill_Year | String | No | Billing Cycle Bill Year |
Num_Days | String | Yes | Number of days in billing cycle |
Checklist
- The bill cycles are continuous for a given
Read_Cycle
, meaning there are no gaps between theBilling_Cycle_End_Date
and the nextBilling_Cycle_Start_Date
- The corresponding attribute is provided to map customers to their Read Cycle
- The
bill_year
andbill_month
should match the client source system. This is especially important for clients with SAP and CIS’s that us bill month to define seasons and price changes. Note the bill month may not align with the bill start/end dates depending on the CIS. - This file is required when billForecast is in-scope.
Rate Values
Filename: GRIDX_{CLIENT}_RATEVALUES_yyyyMMddHHmmss
Overview: Rate Values provides all the specific values used in the billing system to bill customers.
This file can be provided daily or each time a rate value changes.
Suggested File Frequency: This file can be provided daily or each time a rate value changes.
Column Name | Expected Format | Optional | Description |
---|---|---|---|
Rate_Plan | String | No | Rate Code |
Description | String | No | Description of the rate value |
Value | Number | No | Price or value |
Effective_Date | yyyyMMdd | No | Start datetime for when the value is effective |
Expiration_Date | yyyyMMdd | Yes | End date time for when the value is no longer effective |
Event Data (Optional)
Filename: GRIDX_{CLIENT}_EVENT_yyyyMMddHHmmss
Overview: Utilities may or may not have demand response events that affect rate calculations. This file contains details of any specific events that occur such as the Critical Peak Pricing (CPP).
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable.
Column Name | Expected Format | Optional | Description |
---|---|---|---|
Rate_plan_identifier | String | Yes | Provides the rate(s) the event is applicable to. Use “*” if applicable for all rates. |
Event_type | String | No | Identifies the name of the program / event rider. |
Event_sub_type | String | Yes | Type of event: Secondary identification of the event. |
Event_date | Date - yyyyMMdd | NO | Date on which the event occurs (just the day, not time) |
Event duration | Number | No* | The duration of the event in days. |
Event_start_time | Time - HHmmss | No* | Identifies start of the event |
Event_end_time | Time - HHmmss | No* | Identifies end of the event if duration can't be provided. |
*If the event start time and end time are always the same, this field is optional
Network Details (Optional)
Filename: GRIDX_{CLIENT}_NETWORK_yyyyMMddHHmmss
Overview: A Network is a relationship between customers (technically, a many-to-many mapping) that defines how certain usage and/or billing determinants are to be allocated from one set of customers to another. The most common use case for this is Community Solar - where one Host installation allocates its generation to a set of Subscribers, each of whom receives a percentage of the total generation. This could also be used for complex or virtual net metering (VNEM) where one or more installations can be the "generator" and one or more installations can be the "recipient".
Suggested File Frequency: Daily. Blank files with no data are welcome when applicable.
Column Name | Expected Format | Optional | Description |
---|---|---|---|
Network_type | String | Yes | The name of the Program (e.g. NEMA, NEMPS) |
Network_ID | String | Yes | The unique ID for the arrangement of members |
Network_start_date | Date | Yes | The Start Date for the Network |
Network_end_date | Date | No | The End Date for the Network |
Member_ID | String | Yes | The unique ID for the entity that the program is tied |
Network_member_type | String | Yes | The type of entity associated with the Member_ID (e.g. contract_id; meteraccount_id) |
Member_type | String | Yes | The role of the Member in the Network |
Percent_allocation | Decimal (18, 2) | No | The allocation percentage associated with the member in a network. This should only be used for fixed allocation percentages |
Member_start_date | Date | Yes | The start_date of the member’s participation in the network |
Member_end_date | Date | Yes | The end_date of the member’s participation in the network |
Member_MeterAccount_ID | String | Yes | Member MeterAccount_ID |