Skip to main content
Skip table of contents

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
Example:
UTILITY filename: UTILITY_CUSTOMER_20201026143808
GridX filename: UTILITY_CUSTOMER_20201026143808-20201026164950

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:

  1. The Contract ID, which is the unit of tariff calculation and typically represents the service agreement with the customer

  2. 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.

image-20250102-235714.png

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:
CT = Contract
ENT = Entity
PER = Person
MA = MeterAccount
PM = Premise
SP = ServicePoint
MTR = Meter

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:

  1. A bill is provided according to the ICD above. At this time, it is not known that the bill will later be cancelled

  2. A record for the same bill_id is provided with Is_cancellation = 1. The bill is now cancelled.

  3. 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 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”)
  • 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 all Bill_line_item_amount should equal the Total_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 the Billing_Cycle_End_Date and the next Billing_Cycle_Start_Date
  • The corresponding attribute is provided to map customers to their Read Cycle
  • The bill_year and bill_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
For example, the Primary Contract Key

Network_start_date

Date
yyyyMMdd

Yes

The Start Date for the Network

Network_end_date

Date
yyyyMMdd

No

The End Date for the Network

Member_ID

String

Yes

The unique ID for the entity that the program is tied
For example, if the Primary Contract Key is an arrangement of contracts the the Member_Id is the unique identifier for the contract_id

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
For example,
Generator
Aggregator
Benefiter

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
yyyyMMdd

Yes

The start_date of the member’s participation in the network
(if the program supports members joining/leaving the network)

Member_end_date

Date
yyyyMMdd

Yes

The end_date of the member’s participation in the network
(if the program supports members joining/leaving the network)

Member_MeterAccount_ID

String

Yes

Member MeterAccount_ID

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.