{
  "anchors": [
    {
      "about": "2-letter state/jurisdiction code (PD-003).",
      "format": "usps_state",
      "kind": "geography",
      "name": "state",
      "scope": "universal"
    },
    {
      "about": "5-digit Census county FIPS, zero-padded string.",
      "format": "fips5",
      "kind": "geography",
      "name": "county_fips",
      "scope": "universal"
    }
  ],
  "capability": "power.interconnection_queue_pjm",
  "codebooks": {
    "fuel": {
      "codes": {
        "Coal": {
          "label": "Coal"
        },
        "Hydro": {
          "label": "Hydro"
        },
        "Methane": {
          "label": "Methane"
        },
        "Natural Gas": {
          "label": "Natural gas"
        },
        "Nuclear": {
          "label": "Nuclear"
        },
        "Oil": {
          "label": "Oil"
        },
        "Solar": {
          "label": "Solar"
        },
        "Solar; Storage": {
          "label": "Solar + storage hybrid (is_hybrid = true)"
        },
        "Storage": {
          "label": "Storage (battery / other)"
        },
        "Wind": {
          "label": "Wind"
        }
      },
      "coverage": "the distinct fuel values observed in the served PJM snapshot",
      "note": "Filter `fuel` by PJM's EXACT value \u2014 e.g. `Natural Gas` (NOT 'Gas', unlike MISO). Hybrids are ';'-joined (e.g. 'Solar; Storage') and flagged with `is_hybrid`. Values are as-reported, so a request with no fuel is null, not a category.",
      "semantics": "as_reported_fuel_taxonomy",
      "source": "PJM ExportToXls `Fuel` \u2014 the queue's own as-reported fuel taxonomy."
    },
    "project_type": {
      "codes": {
        "Generation Interconnection": {
          "label": "Generation interconnection (GI)"
        },
        "Long-Term Firm Transmission": {
          "label": "Long-term firm transmission (LTFT)"
        },
        "Merchant Transmission": {
          "label": "Merchant transmission"
        },
        "Upgrade Request": {
          "label": "Upgrade request (UR)"
        }
      },
      "coverage": "the distinct project-type values observed in the served PJM snapshot",
      "note": "The PJM queue mixes generation with transmission/upgrade requests. Filter `project_type` = `Generation Interconnection` for generation; the others are transmission/upgrade. (PJM's own data dictionary abbreviates these GI/TI/LTFT/UR, but the served values are the long forms observed in the data.)",
      "semantics": "as_reported_project_type",
      "source": "PJM ExportToXls `Project Type` \u2014 the as-reported request type."
    },
    "status": {
      "codes": {
        "Active": {
          "label": "Active \u2014 a live request still in the queue (requested, not built)"
        },
        "Annulled": {
          "label": "Annulled"
        },
        "Canceled": {
          "label": "Canceled"
        },
        "Confirmed": {
          "label": "Confirmed"
        },
        "Deactivated": {
          "label": "Deactivated"
        },
        "Engineering and Procurement": {
          "label": "Engineering and procurement"
        },
        "In Service": {
          "label": "In Service \u2014 the project is built and operating"
        },
        "Partially in Service - Under Construction": {
          "label": "Partially in service, still under construction"
        },
        "Retracted": {
          "label": "Retracted"
        },
        "Suspended": {
          "label": "Suspended"
        },
        "Under Construction": {
          "label": "Under construction"
        },
        "Withdrawn": {
          "label": "Withdrawn \u2014 the request left the queue (the queue is withdrawn-dominated)"
        }
      },
      "coverage": "the distinct status values observed in the served PJM snapshot",
      "note": "ALWAYS scope by `status` \u2014 the full queue is dominated by Withdrawn requests. `Active` is the live pipeline of REQUESTED (not built) capacity; `In Service` / `Under Construction` / `Partially in Service - Under Construction` are built or building; `Withdrawn` / `Retracted` / `Deactivated` / `Annulled` / `Canceled` have left the queue. A queue-MW total is requested capacity, never built \u2014 for built/operating capacity use query_power_capacity_v1 (or the `in_service_mw` field).",
      "semantics": "as_reported_queue_status",
      "source": "PJM ExportToXls `Status` \u2014 the as-reported single queue status."
    }
  },
  "data_point": {
    "does_not_answer": [
      "built/operating/nameplate capacity as a queue total (requested_* MW is REQUESTED, not built; for operating capacity use power.capacity / EIA-860M; in_service_mw is the only built figure here, per-project)",
      "a sum of requested MW treated as planned or operating capacity (most queued MW withdraws \u2014 requested totals are labeled, never read as built)",
      "a cross-ISO or national queue total (methodologies, inclusion, and withdrawal rates differ per ISO \u2014 never summed or deduped across ISOs; for the MISO queue use query_power_interconnection_queue_v1, for the CAISO queue use query_power_interconnection_queue_caiso_v1)",
      "which projects are data-center- or load-driven (PJM reports no load/data-center type; that inference is the analyst's, never tagged here)",
      "the probability that a queued project will actually be built or reach commercial operation",
      "generation MWh, demand, prices, retail sales, or transmission flows",
      "lat/lon or plant-level attribution (PJM supplies none; only state, as-reported POI county, and derived county_fips)",
      "queues for other ISOs/RTOs (MISO, CAISO, NYISO, ISO-NE, ERCOT, SPP) \u2014 each is a separate block under the same gate"
    ],
    "grain": "project_snapshot",
    "id": "power.interconnection_queue_pjm",
    "note": "This is PJM's New Services (interconnection) queue \u2014 the requested_* MW are REQUESTED capacity (a waiting line), NOT built / installed / operating capacity. Historically the large majority of queued MW withdraws before it is built, so a requested-MW total is additive across projects but must never be read as built capacity. Every atom carries its as-reported `status` so Active, Withdrawn, and In-Service requests can be told apart. PJM also reports `in_service_mw` \u2014 the realized built MW for in-service projects (a separate, built figure). For operating capacity use query_power_capacity_v1. PJM only \u2014 never summed or compared across ISOs; for the MISO queue use query_power_interconnection_queue_v1, for the CAISO queue use query_power_interconnection_queue_caiso_v1.",
    "product_spec": "blocks/power_interconnection_queue_pjm/card.md",
    "represented_fact": "The PJM New Services (interconnection) queue \u2014 the public waiting line of every project that has REQUESTED to connect to the PJM grid (the mid-Atlantic RTO, incl. Northern Virginia), served as-reported, project by project. PJM's full published structure is carried faithfully (its own 43 columns, defined in PJM's words via the workbook's Definitions-Mapping sheet): the requested megawatts (requested_max_output_mw = MFO, requested_summer_mw = MW Capacity / summer net, requested_winter_mw = MW Energy / winter net), the single as-reported `status`, project_type (Generation Interconnection / Merchant Transmission / Long-Term Firm Transmission / Upgrade Request), fuel (verbatim; hybrids ';'-joined and flagged), the study-document URLs and per-stage statuses, and the lifecycle dates. This is a REQUEST, not built capacity: historically the large majority of queued MW withdraws before it is built, so every requested_* MW is named as a request and is never summed as operating capacity. PJM ALSO reports in_service_mw \u2014 the realized BUILT MW for in-service projects \u2014 carried honestly under its own name (a built figure, not a request). This is a forward-looking slice (capacity/generation/demand are backward-looking actuals). PJM carries no county_fips and no lat/lon; county_fips is derived by name where it resolves and left null otherwise (the POI county may differ from the physical site). It is NOT a data-center product \u2014 PJM reports no load/data-center type and we never infer one.",
    "source_basis": [
      "energy.pjm.queue"
    ],
    "source_decisions": [
      "docs/verticals/power/interconnection-queues.md"
    ]
  },
  "input": {
    "controls": [
      "include_records",
      "include_evidence",
      "limit",
      "order_by",
      "top_n",
      "order",
      "rollup_other"
    ],
    "date_range_params": [
      "submitted_date_from",
      "submitted_date_to"
    ],
    "date_ranges": [
      "submitted_date"
    ],
    "field_metadata": {},
    "filters": [
      "as_of",
      "state",
      "county_fips",
      "status",
      "project_type",
      "capacity_or_energy",
      "fuel",
      "project_ac_dc",
      "transmission_owner",
      "attachment_type",
      "feasibility_study_status",
      "system_impact_study_status",
      "facilities_study_status",
      "submitted_date"
    ],
    "group_by": [
      "state",
      "county_fips",
      "status",
      "project_type",
      "capacity_or_energy",
      "fuel",
      "project_ac_dc",
      "transmission_owner",
      "attachment_type",
      "feasibility_study_status",
      "system_impact_study_status",
      "facilities_study_status",
      "is_hybrid"
    ],
    "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": [
          "requested_max_output_mw",
          "requested_summer_mw",
          "requested_winter_mw",
          "in_service_mw",
          "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",
      "project_id",
      "project_id_raw",
      "name",
      "commercial_name",
      "state",
      "state_raw",
      "county",
      "county_fips",
      "county_fips_source",
      "county_fips_unresolved",
      "status",
      "transmission_owner",
      "requested_max_output_mw",
      "requested_summer_mw",
      "requested_winter_mw",
      "in_service_mw",
      "capacity_or_energy",
      "project_type",
      "fuel",
      "is_hybrid",
      "project_ac_dc",
      "rights_mw",
      "initial_study",
      "feasibility_study",
      "feasibility_study_status",
      "system_impact_study",
      "system_impact_study_status",
      "facilities_study",
      "facilities_study_status",
      "interconnection_agreement",
      "interconnection_agreement_status",
      "wholesale_market_participation_agreement",
      "construction_service_agreement",
      "construction_service_agreement_status",
      "upgrade_construction_service_agreement",
      "upgrade_construction_service_agreement_status",
      "backfeed_date",
      "submitted_date",
      "ltf_service_start_date",
      "ltf_service_end_date",
      "test_energy_date",
      "withdrawal_date",
      "withdrawn_remarks",
      "projected_in_service_date",
      "commercial_operation_milestone",
      "actual_in_service_date",
      "attachment_type",
      "alternate_project",
      "sliding_project",
      "report_period",
      "source_record_key",
      "source_row_number",
      "as_of",
      "raw_file_sha256",
      "citation"
    ],
    "metric_groups": {
      "built_mw": [
        "in_service_mw"
      ],
      "records": [
        "source_record_count"
      ],
      "requested_mw": [
        "requested_max_output_mw",
        "requested_summer_mw",
        "requested_winter_mw"
      ]
    },
    "metric_metadata": {
      "in_service_mw": {
        "additive_across_groups": true,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.in_service_mw",
        "category": "built_mw",
        "definition": "The realized built MW once the project is in service \u2014 PJM's `MW In Service` column.",
        "description": "The realized BUILT megawatts of a project once it is in service (PJM's `MW In Service`). Unlike the requested_* figures this is built capacity, reported for In-Service / Under-Construction projects and null while a request is pending. Additive across in-service projects; never conflate with the requested_* totals (which are requests, most of which withdraw).",
        "display_name": "In-service capacity (built)",
        "display_precision": "MW values are rounded to 6 decimal places in JSON to remove binary floating-point noise.",
        "grain": "queue project",
        "null_handling": "A project with no reported value contributes null (ignored by the sum); an empty-query summary returns zero.",
        "rollup_behavior": "additive_partition_metric",
        "row_metric_path": "rows[].metrics.in_service_mw",
        "source_fields": [
          "MW In Service"
        ],
        "unit": "MW"
      },
      "requested_max_output_mw": {
        "additive_across_groups": true,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.requested_max_output_mw",
        "category": "requested_mw",
        "definition": "The project's Maximum Facility Output (MFO) \u2014 the headline requested size, as PJM reports it.",
        "description": "REQUESTED interconnection capacity (MW) \u2014 what a project asked to connect to the PJM grid, NOT built, installed, or operating capacity. Historically the large majority of queued MW withdraws before it is built, so a requested-MW total is meaningful only as a REQUESTED total: it is additive across distinct projects (each is its own request) but must never be read as built capacity. Filter `status` (Active / Withdrawn / In Service / \u2026) to scope the queue; for operating capacity use query_power_capacity_v1; for the realized built MW of completed projects use in_service_mw.",
        "display_name": "Requested capacity (max facility output)",
        "display_precision": "MW values are rounded to 6 decimal places in JSON to remove binary floating-point noise.",
        "grain": "queue project",
        "null_handling": "A project with no reported value contributes null (ignored by the sum); an empty-query summary returns zero.",
        "rollup_behavior": "additive_partition_metric",
        "row_metric_path": "rows[].metrics.requested_max_output_mw",
        "source_fields": [
          "MFO"
        ],
        "unit": "MW"
      },
      "requested_summer_mw": {
        "additive_across_groups": true,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.requested_summer_mw",
        "category": "requested_mw",
        "definition": "The project's requested Capacity interconnection (summer net) MW \u2014 PJM's `MW Capacity` column.",
        "description": "REQUESTED interconnection capacity (MW) \u2014 what a project asked to connect to the PJM grid, NOT built, installed, or operating capacity. Historically the large majority of queued MW withdraws before it is built, so a requested-MW total is meaningful only as a REQUESTED total: it is additive across distinct projects (each is its own request) but must never be read as built capacity. Filter `status` (Active / Withdrawn / In Service / \u2026) to scope the queue; for operating capacity use query_power_capacity_v1; for the realized built MW of completed projects use in_service_mw.",
        "display_name": "Requested capacity (net summer)",
        "display_precision": "MW values are rounded to 6 decimal places in JSON to remove binary floating-point noise.",
        "grain": "queue project",
        "null_handling": "A project with no reported value contributes null (ignored by the sum); an empty-query summary returns zero.",
        "rollup_behavior": "additive_partition_metric",
        "row_metric_path": "rows[].metrics.requested_summer_mw",
        "source_fields": [
          "MW Capacity"
        ],
        "unit": "MW"
      },
      "requested_winter_mw": {
        "additive_across_groups": true,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.requested_winter_mw",
        "category": "requested_mw",
        "definition": "The project's requested net winter MW \u2014 PJM's `MW Energy` column (a winter MW figure, not MWh).",
        "description": "REQUESTED interconnection capacity (MW) \u2014 what a project asked to connect to the PJM grid, NOT built, installed, or operating capacity. Historically the large majority of queued MW withdraws before it is built, so a requested-MW total is meaningful only as a REQUESTED total: it is additive across distinct projects (each is its own request) but must never be read as built capacity. Filter `status` (Active / Withdrawn / In Service / \u2026) to scope the queue; for operating capacity use query_power_capacity_v1; for the realized built MW of completed projects use in_service_mw.",
        "display_name": "Requested capacity (net winter)",
        "display_precision": "MW values are rounded to 6 decimal places in JSON to remove binary floating-point noise.",
        "grain": "queue project",
        "null_handling": "A project with no reported value contributes null (ignored by the sum); an empty-query summary returns zero.",
        "rollup_behavior": "additive_partition_metric",
        "row_metric_path": "rows[].metrics.requested_winter_mw",
        "source_fields": [
          "MW Energy"
        ],
        "unit": "MW"
      },
      "source_record_count": {
        "additive_across_groups": true,
        "aggregation": "count source records",
        "authoritative_total_path": "summary.totals.source_record_count",
        "category": "records",
        "definition": "Count of queued PJM projects in the current result scope (one atom = one PJM project).",
        "description": "Number of queued projects (PJM rows) contributing to the value \u2014 scope with status to separate active from withdrawn from in service.",
        "display_name": "Queued project count",
        "display_precision": "Integer.",
        "grain": "queue project",
        "null_handling": "Always an integer count.",
        "rollup_behavior": "additive_partition_metric",
        "row_metric_path": "rows[].metrics.source_record_count",
        "source_fields": [
          "source_record_key"
        ],
        "unit": "count"
      }
    },
    "metrics": [
      "requested_max_output_mw",
      "requested_summer_mw",
      "requested_winter_mw",
      "in_service_mw",
      "source_record_count"
    ],
    "summary_fields": [
      "group_count",
      "totals"
    ]
  },
  "primitive": "query_power_interconnection_queue_pjm_v1",
  "status": "available"
}
