{
  "anchors": [],
  "capability": "power.capacity_market_pjm",
  "codebooks": {
    "document_kind": {
      "codes": {
        "parameters_workbook": {
          "label": "PJM planning-period parameters workbook"
        },
        "results_report": {
          "label": "PJM auction results report"
        },
        "results_workbook": {
          "label": "PJM auction results workbook"
        }
      },
      "coverage": "supported BRA result documents",
      "source": "PJM source document format"
    }
  },
  "data_point": {
    "does_not_answer": [
      "energy-market LMPs, day-ahead energy prices, real-time prices, or plant revenue",
      "a scarcity-adjusted, uncapped, forecast, or effective capacity price",
      "ICAP-to-UCAP conversions or resource-specific accreditation",
      "auctions or LDAs not published by PJM",
      "a blended price across delivery years, auctions, or LDAs"
    ],
    "grain": "auction_delivery_year_lda_or_auction_parameter",
    "id": "power.capacity_market_pjm",
    "note": "Prices are UCAP USD/MW-day for the named delivery year. Published cap and floor parameters remain visible so an administrative-cap-bound clearing is explicit: price_collar atoms carry the cap and floor exactly as the stating document (results report or planning-parameters workbook) publishes them, with cap_basis quoting that document's own price-basis wording (UCAP vs ICAP \u2014 never converted). Auctions whose searched documents state no collar serve collar_search atoms and a collar_not_stated note, so a None cap is provably not-stated rather than not-parsed.",
    "product_spec": "blocks/power_capacity_market_pjm/card.md",
    "represented_fact": "PJM Reliability Pricing Model Base Residual Auction results: UCAP-basis resource clearing prices in USD per MW-day for the RTO and published LDAs, RTO cleared UCAP MW, the stated RTO reliability requirement, and any administrative price cap and floor stated in the auction results report or the planning-period-parameters workbook \u2014 each on the basis its stating document uses, quoted verbatim in cap_basis. Documents searched for a collar that state none yield a collar_search atom, so absence is provably \"not stated\", never \"not parsed\". Workbook and report facts remain separate cited atoms at their exact source coordinates.",
    "source_basis": [
      "energy.pjm.capacity_market"
    ],
    "source_decisions": []
  },
  "input": {
    "controls": [
      "include_records",
      "include_evidence",
      "limit",
      "order_by",
      "top_n",
      "order",
      "rollup_other"
    ],
    "date_range_params": [],
    "date_ranges": [],
    "field_metadata": {},
    "filters": [
      "as_of",
      "auction_label",
      "delivery_year",
      "lda",
      "atom_type",
      "document_kind"
    ],
    "group_by": [
      "auction_label",
      "delivery_year",
      "lda",
      "atom_type",
      "document_kind"
    ],
    "ranking": {
      "no_ranking": "Omit order_by and top_n to return all groups in group-key order.",
      "order": {
        "default": "desc",
        "valid_values": [
          "desc",
          "asc"
        ]
      },
      "order_by": {
        "accepts": "one of output.metrics",
        "note": "Ranks the groups by a metric (a measure). Not a group_by dimension \u2014 rows already come back grouped by each group_by field.",
        "requires": [
          "group_by"
        ],
        "valid_values": [
          "avg_clearing_price_usd_mw_day",
          "min_clearing_price_usd_mw_day",
          "max_clearing_price_usd_mw_day",
          "cleared_ucap_mw",
          "reliability_requirement_mw",
          "price_cap_usd_mw_day",
          "price_floor_usd_mw_day",
          "source_record_count"
        ]
      },
      "top_n": {
        "note": "Keeps the top N groups by order_by; the rest fold into one (other) remainder (additive metrics sum into it, non-additive ones are nulled) so the result still reconciles to summary.totals.",
        "requires": [
          "group_by",
          "order_by"
        ],
        "type": "positive integer"
      }
    }
  },
  "output": {
    "aggregate_citation_fields": [
      "source_id",
      "publisher",
      "source_url",
      "source_file",
      "raw_file_sha256",
      "as_of",
      "source_rows_count",
      "source_rows_sample",
      "verify",
      "lineage_filter"
    ],
    "citation_fields": [
      "source_id",
      "source_url",
      "source_file",
      "sheet",
      "source_row",
      "raw_file_sha256",
      "as_of"
    ],
    "detail_fields": [
      "source_id",
      "sheet_name",
      "iso",
      "document_kind",
      "auction_label",
      "delivery_year",
      "lda",
      "atom_type",
      "clearing_price_usd_mw_day",
      "cleared_ucap_mw",
      "reliability_requirement_mw",
      "price_cap_usd_mw_day",
      "price_floor_usd_mw_day",
      "cap_basis",
      "report_period",
      "source_record_key",
      "source_row_number",
      "as_of",
      "raw_file_sha256",
      "citation"
    ],
    "metric_groups": {
      "capacity": [
        "cleared_ucap_mw",
        "reliability_requirement_mw"
      ],
      "price": [
        "avg_clearing_price_usd_mw_day",
        "min_clearing_price_usd_mw_day",
        "max_clearing_price_usd_mw_day",
        "price_cap_usd_mw_day",
        "price_floor_usd_mw_day"
      ],
      "records": [
        "source_record_count"
      ]
    },
    "metric_metadata": {
      "avg_clearing_price_usd_mw_day": {
        "additive_across_groups": false,
        "aggregation": "average",
        "authoritative_total_path": "summary.totals.avg_clearing_price_usd_mw_day",
        "category": "price",
        "definition": "Average UCAP clearing price over the current result scope.",
        "description": "Average UCAP clearing price; document and delivery-year identity remain explicit.",
        "display_name": "Average UCAP clearing price",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.avg_clearing_price_usd_mw_day",
        "source_fields": [
          "clearing_price_usd_mw_day"
        ],
        "unit": "USD/MW-day"
      },
      "cleared_ucap_mw": {
        "additive_across_groups": false,
        "aggregation": "maximum",
        "authoritative_total_path": "summary.totals.cleared_ucap_mw",
        "category": "capacity",
        "definition": "Published RTO cleared UCAP over the current result scope.",
        "description": "Published RTO cleared UCAP; document and delivery-year identity remain explicit.",
        "display_name": "Published RTO cleared UCAP",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.cleared_ucap_mw",
        "source_fields": [
          "cleared_ucap_mw"
        ],
        "unit": "MW"
      },
      "max_clearing_price_usd_mw_day": {
        "additive_across_groups": false,
        "aggregation": "maximum",
        "authoritative_total_path": "summary.totals.max_clearing_price_usd_mw_day",
        "category": "price",
        "definition": "Maximum UCAP clearing price over the current result scope.",
        "description": "Maximum UCAP clearing price; document and delivery-year identity remain explicit.",
        "display_name": "Maximum UCAP clearing price",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.max_clearing_price_usd_mw_day",
        "source_fields": [
          "clearing_price_usd_mw_day"
        ],
        "unit": "USD/MW-day"
      },
      "min_clearing_price_usd_mw_day": {
        "additive_across_groups": false,
        "aggregation": "minimum",
        "authoritative_total_path": "summary.totals.min_clearing_price_usd_mw_day",
        "category": "price",
        "definition": "Minimum UCAP clearing price over the current result scope.",
        "description": "Minimum UCAP clearing price; document and delivery-year identity remain explicit.",
        "display_name": "Minimum UCAP clearing price",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.min_clearing_price_usd_mw_day",
        "source_fields": [
          "clearing_price_usd_mw_day"
        ],
        "unit": "USD/MW-day"
      },
      "price_cap_usd_mw_day": {
        "additive_across_groups": false,
        "aggregation": "maximum",
        "authoritative_total_path": "summary.totals.price_cap_usd_mw_day",
        "category": "price",
        "definition": "Administrative price cap (basis per stating document, see cap_basis) over the current result scope.",
        "description": "Administrative price cap (basis per stating document, see cap_basis); document and delivery-year identity remain explicit.",
        "display_name": "Administrative price cap (basis per stating document, see cap_basis)",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.price_cap_usd_mw_day",
        "source_fields": [
          "price_cap_usd_mw_day"
        ],
        "unit": "USD/MW-day"
      },
      "price_floor_usd_mw_day": {
        "additive_across_groups": false,
        "aggregation": "maximum",
        "authoritative_total_path": "summary.totals.price_floor_usd_mw_day",
        "category": "price",
        "definition": "Administrative price floor (basis per stating document, see cap_basis) over the current result scope.",
        "description": "Administrative price floor (basis per stating document, see cap_basis); document and delivery-year identity remain explicit.",
        "display_name": "Administrative price floor (basis per stating document, see cap_basis)",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.price_floor_usd_mw_day",
        "source_fields": [
          "price_floor_usd_mw_day"
        ],
        "unit": "USD/MW-day"
      },
      "reliability_requirement_mw": {
        "additive_across_groups": false,
        "aggregation": "maximum",
        "authoritative_total_path": "summary.totals.reliability_requirement_mw",
        "category": "capacity",
        "definition": "Published RTO reliability requirement over the current result scope.",
        "description": "Published RTO reliability requirement; document and delivery-year identity remain explicit.",
        "display_name": "Published RTO reliability requirement",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.reliability_requirement_mw",
        "source_fields": [
          "reliability_requirement_mw"
        ],
        "unit": "MW"
      },
      "source_record_count": {
        "additive_across_groups": true,
        "aggregation": "count source records",
        "authoritative_total_path": "summary.totals.source_record_count",
        "category": "records",
        "definition": "Capacity-market result atom count over the current result scope.",
        "description": "Capacity-market result atom count; document and delivery-year identity remain explicit.",
        "display_name": "Capacity-market result atom count",
        "display_precision": "Numeric source precision is preserved; JSON removes binary floating-point noise.",
        "grain": "auction document x delivery year x LDA or parameter",
        "null_handling": "Null when no applicable published value exists; source-record counts are always integers.",
        "rollup_behavior": "additive_partition_metric",
        "row_metric_path": "rows[].metrics.source_record_count",
        "source_fields": [
          "source_record_key"
        ],
        "unit": "count"
      }
    },
    "metrics": [
      "avg_clearing_price_usd_mw_day",
      "min_clearing_price_usd_mw_day",
      "max_clearing_price_usd_mw_day",
      "cleared_ucap_mw",
      "reliability_requirement_mw",
      "price_cap_usd_mw_day",
      "price_floor_usd_mw_day",
      "source_record_count"
    ],
    "summary_fields": [
      "group_count",
      "totals"
    ]
  },
  "primitive": "query_power_capacity_market_pjm_v1",
  "status": "available"
}
