--- title: "BESS GADS Performance" slug: "bess-gads-performance-1" updated: 2026-09-01T00:33:29Z published: 2026-09-01T00:33:29Z canonical: "docs.bazefield.com/bess-gads-performance-1" stale: true --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.bazefield.com/llms.txt > Use this file to discover all available pages before exploring further. # BESS GADS Performance # BESS GADS Performance Bazefield Core automates **NERC GADS Storage Group Performance** tracking for Battery Energy Storage Systems (BESS). Rather than requiring operators to manually assign operating states, a built-in **Script Service job** continuously reads device-level status signals, applies NERC priority rules, and writes the resulting allocations — ready for direct export to NERC's GADS submission tool. > **Regional applicability:** NERC GADS reporting applies to North American generation owners and operators subject to NERC Reliability Standards or voluntary GADS reporting programs. For a full introduction to GADS in Bazefield, see [GADS Reporting in Bazefield](https://docs.bazefield.com/docs/en/gads-reporting-in-bazefield). --- ## How it works Bazefield models a BESS plant using a two-level hierarchy: each **GADS Energy Storage Group** (the NERC reporting unit) contains one or more **Power Conversion System (PCS)** child objects. Each PCS carries a set of seven boolean `EVENT-*` data points that are continuously updated from the SCADA/historian to reflect the current operating state of that unit. The **GADS Energy Storage Performance Script** runs on a recurring schedule against every GADS Energy Storage Group in the system. On each run it: 1. Reads the `EVENT-*` boolean tags for all PCS children of the group over the configured look-back window. 2. Applies NERC priority rules to determine the dominant state at each time step (see [Operating states and priority](/docs/bess-gads-performance-1#operating-states-and-priority) below). 3. Creates or updates allocations in the `ESS_GADS` allocation type on the storage group, segmented by NERC category (e.g. `Charging/ChgHrs`, `Forced/StorageFOH`). These allocations are what the **GADS Reporting** application reads when generating the monthly Performance submission file. No manual time-booking is required — the script keeps the allocation record continuously up to date. --- ## Script schedule The script is installed as a per-object **Script Service** job and runs on every GADS Energy Storage Group object independently. | Trigger | Look-back window | Purpose | | --- | --- | --- | | Every 3 hours (continuous) | 25 hours | Near-real-time allocation maintenance. Keeps the current day current and provides a 1-hour overlap to catch any late-arriving historian data. | | Daily at midnight (00:00) | 744 hours (31 days) | Monthly reconciliation pass. Re-processes the full rolling month to correct any gaps or restatements from delayed data. | > **Note:** The cron expression is `25 10 */3 1/1 * ? *` — runs at 10 minutes 25 seconds past the hour, every 3 hours. The midnight reconciliation is triggered by checking whether the run time falls at hour 0. --- ## Operating states and priority Each PCS unit reports its state through boolean data points. When multiple states are simultaneously active — or when different PCS units within a group report different states — the script resolves the conflict using the NERC-aligned priority table below. **Lower priority number wins.** | Data point | Priority | NERC category / GADS field | Description | | --- | --- | --- | --- | | `EVENT-Charging` | 1 | `Charging/ChgHrs` | System is actively charging energy from the grid or generation source. | | `EVENT-Discharging` | 1 | `Discharging/DisChgHrs` | System is actively discharging energy to the grid. | | `EVENT-Idle` | 3 | `Idle` | System is available but neither charging nor discharging (standby or ancillary service mode). | | `EVENT-InfoUnavailable` | 4 | `Information Unavailable` | No reliable performance information is available for the group (e.g. communications loss). | | `EVENT-Forced` | 5 | `Forced/StorageFOH` | Unplanned forced outage — the storage group is unavailable due to an unscheduled failure. | | `EVENT-Maintenance` | 5 | `Maintenance/StorageMOH` | Scheduled maintenance outage — the group is out of service for planned maintenance. | | `EVENT-Planned` | 5 | `Planned/StoragePOH` | Planned outage — the group is out of service for a pre-scheduled reason other than maintenance. | > **Priority resolution:** Charging and Discharging share priority 1 because they are mutually exclusive operating states. When Forced, Maintenance, and Planned all share priority 5, the first active signal in the time window is used. Outage states only take effect when none of the higher-priority operational or idle states are active. --- ## Data model components All components listed below are installed by the **Core GADS** package. | Component | Installed on | Type | Purpose | | --- | --- | --- | --- | | GADS Energy Storage Group | Storage Group object (type 801) | Asset type | The NERC reporting unit. Carries `storageGroupID`, `plantID`, rated capacity, and time zone attributes. Groups one or more PCS child objects and hosts the `ESS_GADS` allocation type. | | `Core GADS ESG Calcs` | GADS Energy Storage Group | Point template (CPT) | Provides the seven `EVENT-*` boolean points (mapped per-site to SCADA/historian state signals) plus `ActivePower`, `ChargeGeneration`, and `DischargeGeneration` calculated aggregates used in the performance export. | | `ESG Calc GADS Events` | GADS Energy Storage Group | Event template | Maps each `EVENT-*` point to its corresponding `ESS_GADS` allocation category. Enables the Bazefield event engine to automatically raise and close allocation records when a tag transitions. | | GADS Energy Storage Performance Script | GADS Energy Storage Group | Script Service job | Core automation. Runs on schedule, reads child PCS `EVENT-*` tags, resolves priority conflicts, and writes allocations to `ESS_GADS` on the storage group. | | `ESS_GADS` allocation type | GADS Energy Storage Group | Allocation type | Holds the resolved performance allocations across the seven NERC categories. This is the data source consumed by the GADS Reporting export. | ### Calculated points on the storage group The `Core GADS ESG Calcs` template installs three aggregate calculated points on the storage group that feed the performance export: | Point name | Unit | Interval | Description | | --- | --- | --- | --- | | `ActivePower` | MW | 5 min | Sum of active power across all child PCS units (aggregated from kW). Negative values indicate charging; positive values indicate discharging. | | `ChargeGeneration` | MWh | Monthly (daily sub-period) | Total energy charged into the storage group for the month. Sums `ChargingEnergy` from all child PCS objects. | | `DischargeGeneration` | MWh | Monthly (daily sub-period) | Total energy discharged from the storage group for the month. Sums `DischargingEnergy` from all child PCS objects. | --- ## Prerequisites for submission Before generating a BESS GADS Performance submission from the [GADS Reporting application](https://docs.bazefield.com/docs/en/gads-reporting-in-bazefield), confirm the following are in place: - Each BESS plant has a **GADS Energy Storage Group** object with `storageGroupID`, `plantID`, rated capacity, and time zone attributes populated. - Child **PCS objects** are linked to the storage group via the `GADSStorageGrpId` attribute. - The `Core GADS ESG Calcs` point template is installed on the storage group, and all seven `EVENT-*` boolean tags are mapped to the appropriate SCADA/historian source points for each PCS. - The **GADS Energy Storage Performance Script** is active in Script Service and has completed at least one successful run. Verify in the Script Service log that allocations were written without errors. - The `ESS_GADS` allocation type is present on the storage group and contains allocations covering the reporting month. - Historian data for `ChargingEnergy` and `DischargingEnergy` on each child PCS is available and flowing. --- ## Generating the submission Once the script has populated the `ESS_GADS` allocations, use the **GADS Reporting** application to export the monthly performance file. The application reads the `ESS_GADS` allocation hours and the calculated energy totals from the storage group, and formats them for direct submission to NERC. For the step-by-step export workflow, see [GADS Energy Storage Performance Submission](https://docs.bazefield.com/docs/en/gads-energy-storage-performance-submission). For BESS event reporting (outage cause codes, system description, event files), see [GADS Energy Storage Event Submission](https://docs.bazefield.com/docs/en/gads-energy-storage-event-submission). --- ## Troubleshooting | Symptom | What to check | | --- | --- | | No allocations in `ESS_GADS` for the reporting month | Confirm the GADS Energy Storage Performance Script is enabled and scheduled correctly in Script Service. Check the script run log for errors. Verify that child PCS objects have the `GADSStorageGrpId` attribute set and that the storage group object ID matches. | | Hours do not add up to the full period | Check whether any `EVENT-*` tags have gaps or are flat-lined at zero for extended periods. The script only creates allocations for time windows where at least one boolean is active — gaps in the tag history appear as gaps in the allocation record. | | `ChargeGeneration` or `DischargeGeneration` shows zero or NaN | Confirm that `ChargingEnergy` and `DischargingEnergy` historian points exist on each child PCS object and have data for the period. The calculated points aggregate across all children — if no valid children are found, the result is NaN. | | Allocations look wrong after a data correction | The midnight run re-processes 31 days and overwrites stale allocations automatically. If an immediate correction is needed, trigger the script manually from Script Service or wait for the next scheduled run. |