# Split entsoe (generic ENTSO-E client) and backcasting (Balmorel validation) into separate packages `pybalmorel.entsoe` originally held both raw ENTSO-E fetching and all Balmorel-comparison/validation logic (load/price/generation alignment, XKFX Observed Max Flow overrides, plotting). We split it into two packages: `pybalmorel.entsoe`, a generic client for the ENTSO-E transparency platform with no knowledge of Balmorel results, and `pybalmorel.backcasting`, which depends on `entsoe` (and on `pybalmorel.MainResults`) to validate simulated Balmorel behaviour against ENTSO-E observations for a historical year. `entsoe` keeps `bidding_zone_translation` (the Balmorel-region ↔ ENTSO-E canonical-zone bridge, "Canonical Region Name" in `CONTEXT.md`) even though it only has a consumer inside `backcasting` today. This is deliberate: the table translates *ENTSO-E* regions into Balmorel's naming, which is exactly the kind of zone-code knowledge other, non-backcasting consumers of raw ENTSO-E data for Balmorel regions would also need — keeping it in `entsoe` avoids forcing every such consumer to depend on the backcasting-validation package to get at it. `region_to_entsoe_code`, `entsoe_subzones`, and `entsoe_code_to_region` moved from `flows.py` into `entsoe` for the same reason: they operate purely on zone-code tables, with no Balmorel-scenario or XKFX logic in them. `entsoe` has no CLI yet — `backcasting` owns the CLI (`python -m pybalmorel.backcasting ...`) entirely, since every existing command (`format`, `statistics`, `generation`, `prices`, `transmission-max-flow`) is validation/comparison logic. A standalone `entsoe`-only CLI for downloading raw data scoped to Balmorel bidding zones is plausible future work, tracked as a TODO in `entsoe/__init__.py`, not built now. The rename is a clean break: `pybalmorel.entsoe.format`/`statistics`/`generation`/`prices`/`transmission-max-flow` and their CLI invocations move to `pybalmorel.backcasting` with no re-exports or deprecation shims, since this functionality is unreleased (feature branch, not on PyPI).