# energiacte/cteepbd architecture

> Architecture diagram of the GitHub repository energiacte/cteepbd, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/energiacte/cteepbd
- Repository: https://github.com/energiacte/cteepbd

## Overview

CteEPBD is a Rust library and CLI for assessing building energy performance under EN ISO 52000-1 and Spanish CTE conventions. Its main workflow reads energy-component data and weighting factors, calculates delivered, produced, used and exported energy, then derives area-normalized primary-energy and CO₂ indicators for display or export. The README also documents renewable ACS-demand reporting and plain/XML output. Core calculation and output wiring are based on the README and sampled excerpts; unsampled module internals are represented only where their role is supported by the tree and documentation.

Main entry points: [`src/bin/cteepbd.rs`](https://github.com/energiacte/cteepbd/blob/master/src/bin/cteepbd.rs) (CLI), [`src/components.rs`](https://github.com/energiacte/cteepbd/blob/master/src/components.rs) (Component parser), [`src/balance.rs`](https://github.com/energiacte/cteepbd/blob/master/src/balance.rs) (Carrier balance), [`src/types/balance/mod.rs`](https://github.com/energiacte/cteepbd/blob/master/src/types/balance/mod.rs) (Balance results)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Inputs and configuration"]
  node_components["Component parser<br/>[components.rs]"]
  node_cte_config["CTE defaults<br/>[cte.rs]"]
  node_weighting["Weighting factors<br/>[wfactors.rs]"]
end

subgraph group_model["Energy model"]
  node_energy_types["Energy components<br/>[elements.rs]"]
  node_needs["Building needs<br/>[mod.rs]"]
  node_domain_types["Domain types<br/>[mod.rs]"]
end

subgraph group_calculation["Assessment calculation"]
  node_carrier_balance["Carrier balance<br/>[balance.rs]"]
  node_balance_model["Balance results<br/>[mod.rs]"]
  node_aggregate["Overall balance<br/>[all_carriers.rs]"]
  node_performance["Performance indicators"]
end

subgraph group_outputs["Results and formats"]
  node_plain["Plain output<br/>[asplain.rs]"]
  node_xml["CTE XML output<br/>[asctexml.rs]"]
end

node_user(("CLI user"))
node_component_file["Component data"]
node_factor_file["Factor data"]
node_cli["CLI<br/>[cteepbd.rs]"]
node_result["Assessment results"]

node_user -->|"invokes"| node_cli
node_component_file -->|"provides data"| node_cli
node_factor_file -->|"provides factors"| node_cli
node_cli -->|"parses components"| node_components
node_cli -->|"selects defaults"| node_cte_config
node_cli -->|"loads factors"| node_weighting
node_components -->|"builds components"| node_energy_types
node_components -->|"reads demand"| node_needs
node_cli -->|"calculates balance"| node_carrier_balance
node_carrier_balance -->|"applies factors"| node_weighting
node_carrier_balance -->|"produces balances"| node_balance_model
node_balance_model -->|"aggregates carriers"| node_aggregate
node_aggregate -->|"derives indicators"| node_performance
node_cli -->|"formats results"| node_plain
node_cli -->|"formats results"| node_xml
node_plain -->|"renders"| node_result
node_xml -->|"serializes"| node_result

click node_cli "https://github.com/energiacte/cteepbd/blob/master/src/bin/cteepbd.rs"
click node_components "https://github.com/energiacte/cteepbd/blob/master/src/components.rs"
click node_cte_config "https://github.com/energiacte/cteepbd/blob/master/src/cte.rs"
click node_weighting "https://github.com/energiacte/cteepbd/blob/master/src/wfactors.rs"
click node_energy_types "https://github.com/energiacte/cteepbd/blob/master/src/types/energy/elements.rs"
click node_needs "https://github.com/energiacte/cteepbd/blob/master/src/types/needs/mod.rs"
click node_domain_types "https://github.com/energiacte/cteepbd/blob/master/src/types/mod.rs"
click node_carrier_balance "https://github.com/energiacte/cteepbd/blob/master/src/balance.rs"
click node_balance_model "https://github.com/energiacte/cteepbd/blob/master/src/types/balance/mod.rs"
click node_aggregate "https://github.com/energiacte/cteepbd/blob/master/src/types/balance/all_carriers.rs"
click node_performance "https://github.com/energiacte/cteepbd/blob/master/src/types/balance/energy_performance.rs"
click node_plain "https://github.com/energiacte/cteepbd/blob/master/src/asplain.rs"
click node_xml "https://github.com/energiacte/cteepbd/blob/master/src/asctexml.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_components,node_cte_config,node_weighting,node_user toneBlue
class node_energy_types,node_needs,node_domain_types toneAmber
class node_carrier_balance,node_balance_model,node_aggregate,node_performance toneMint
class node_plain,node_xml toneRose
class node_component_file,node_factor_file,node_result toneIndigo
class node_cli toneTeal
```

## Components

### Inputs and configuration

- [Component parser](https://github.com/energiacte/cteepbd/blob/master/src/components.rs): `src/components.rs`
- [CTE defaults](https://github.com/energiacte/cteepbd/blob/master/src/cte.rs): `src/cte.rs`
- [Weighting factors](https://github.com/energiacte/cteepbd/blob/master/src/wfactors.rs): `src/wfactors.rs`

### Energy model

- [Energy components](https://github.com/energiacte/cteepbd/blob/master/src/types/energy/elements.rs): `src/types/energy/elements.rs`
- [Building needs](https://github.com/energiacte/cteepbd/blob/master/src/types/needs/mod.rs): `src/types/needs/mod.rs`
- [Domain types](https://github.com/energiacte/cteepbd/blob/master/src/types/mod.rs): `src/types/mod.rs`

### Assessment calculation

- [Carrier balance](https://github.com/energiacte/cteepbd/blob/master/src/balance.rs): `src/balance.rs`
- [Balance results](https://github.com/energiacte/cteepbd/blob/master/src/types/balance/mod.rs): `src/types/balance/mod.rs`
- [Overall balance](https://github.com/energiacte/cteepbd/blob/master/src/types/balance/all_carriers.rs): `src/types/balance/all_carriers.rs`
- [Performance indicators](https://github.com/energiacte/cteepbd/blob/master/src/types/balance/energy_performance.rs): `src/types/balance/energy_performance.rs`

### Results and formats

- [Plain output](https://github.com/energiacte/cteepbd/blob/master/src/asplain.rs): `src/asplain.rs`
- [CTE XML output](https://github.com/energiacte/cteepbd/blob/master/src/asctexml.rs): `src/asctexml.rs`

### Other components

- **CLI user**
- **Component data**
- **Factor data**
- [CLI](https://github.com/energiacte/cteepbd/blob/master/src/bin/cteepbd.rs): `src/bin/cteepbd.rs`
- **Assessment results**

## Connections

- CLI user → CLI: invokes
- Component data → CLI: provides data
- Factor data → CLI: provides factors
- CLI → Component parser: parses components
- CLI → CTE defaults: selects defaults
- CLI → Weighting factors: loads factors
- Component parser → Energy components: builds components
- Component parser → Building needs: reads demand
- CLI → Carrier balance: calculates balance
- Carrier balance → Weighting factors: applies factors
- Carrier balance → Balance results: produces balances
- Balance results → Overall balance: aggregates carriers
- Overall balance → Performance indicators: derives indicators
- CLI → Plain output: formats results
- CLI → CTE XML output: formats results
- Plain output → Assessment results: renders
- CTE XML output → Assessment results: serializes
