# nourenzi/pension architecture

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

- Interactive diagram: https://gitdiagram.com/nourenzi/pension
- Repository: https://github.com/nourenzi/pension

## Overview

This is a client-side Jordanian social-security pension calculator. Users enter personal and contribution details, then receive eligibility comparisons under 2014 and proposed rules, pension and lump-sum estimates, and a visual report. Its principal calculation and presentation logic lives in script.js; the README also documents an FAQ and offline PWA support. The excerpts show rendering calls and service-worker caching behavior, but do not expose all event wiring or the full calculation flow, so those connections are documented at a higher level rather than inferred from unsampled code.

Main entry points: [`script.js`](https://github.com/nourenzi/pension/blob/main/script.js) (Results report), [`index.html`](https://github.com/nourenzi/pension/blob/main/index.html) (Calculator interface), [`sw.js`](https://github.com/nourenzi/pension/blob/main/sw.js) (Service worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Inputs and Guidance"]
  node_interface["Calculator interface<br/>[index.html]"]
  node_input_capture["Input capture<br/>[script.js]"]
  node_validation["Input validation<br/>[script.js]"]
  node_faq["Legal FAQ<br/>[index.html]"]
end

subgraph group_calculation["Pension Calculations"]
  node_rules["Dual law rules<br/>[script.js]"]
  node_month_logic["Month-based dates<br/>[script.js]"]
  node_eligibility["Eligibility comparison<br/>[script.js]"]
  node_pension["Pension estimate<br/>[script.js]"]
  node_lump_sum["Lump-sum estimate<br/>[script.js]"]
end

subgraph group_results["Results and Sharing"]
  node_report["Results report<br/>[script.js]"]
  node_eligibility_view["Eligibility display<br/>[script.js]"]
  node_chart["Pension chart<br/>[script.js]"]
  node_share["Share summary<br/>[script.js]"]
end

subgraph group_offline["Offline App"]
  node_service_worker["Service worker<br/>[sw.js]"]
  node_app_shell["Cached app assets<br/>[index.html]"]
end

node_user(("Calculator user"))
node_chartjs(("Chart.js"))

node_user -->|"enters details"| node_interface
node_interface -->|"provides inputs"| node_input_capture
node_input_capture -->|"validates"| node_validation
node_validation -->|"evaluates rules"| node_rules
node_rules -->|"uses month conversion"| node_month_logic
node_rules -->|"compares conditions"| node_eligibility
node_rules -->|"estimates pension"| node_pension
node_rules -->|"estimates compensation"| node_lump_sum
node_eligibility -->|"reports results"| node_report
node_pension -->|"reports estimate"| node_report
node_lump_sum -->|"reports estimate"| node_report
node_report -->|"renders"| node_eligibility_view
node_report -->|"draws chart"| node_chart
node_chart -->|"creates chart"| node_chartjs
node_report -->|"updates summary"| node_share
node_service_worker -->|"caches assets"| node_app_shell

click node_interface "https://github.com/nourenzi/pension/blob/main/index.html"
click node_input_capture "https://github.com/nourenzi/pension/blob/main/script.js"
click node_validation "https://github.com/nourenzi/pension/blob/main/script.js"
click node_faq "https://github.com/nourenzi/pension/blob/main/index.html"
click node_rules "https://github.com/nourenzi/pension/blob/main/script.js"
click node_month_logic "https://github.com/nourenzi/pension/blob/main/script.js"
click node_eligibility "https://github.com/nourenzi/pension/blob/main/script.js"
click node_pension "https://github.com/nourenzi/pension/blob/main/script.js"
click node_lump_sum "https://github.com/nourenzi/pension/blob/main/script.js"
click node_report "https://github.com/nourenzi/pension/blob/main/script.js"
click node_eligibility_view "https://github.com/nourenzi/pension/blob/main/script.js"
click node_chart "https://github.com/nourenzi/pension/blob/main/script.js"
click node_share "https://github.com/nourenzi/pension/blob/main/script.js"
click node_service_worker "https://github.com/nourenzi/pension/blob/main/sw.js"
click node_app_shell "https://github.com/nourenzi/pension/blob/main/index.html"

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_interface,node_input_capture,node_validation,node_faq,node_user toneBlue
class node_rules,node_month_logic,node_eligibility,node_pension,node_lump_sum toneAmber
class node_report,node_eligibility_view,node_chart,node_share toneMint
class node_service_worker,node_app_shell toneRose
class node_chartjs toneIndigo
```

## Components

### Inputs and Guidance

- [Calculator interface](https://github.com/nourenzi/pension/blob/main/index.html): `index.html`
- [Input capture](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Input validation](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Legal FAQ](https://github.com/nourenzi/pension/blob/main/index.html): `index.html`

### Pension Calculations

- [Dual law rules](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Month-based dates](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Eligibility comparison](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Pension estimate](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Lump-sum estimate](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`

### Results and Sharing

- [Results report](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Eligibility display](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Pension chart](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`
- [Share summary](https://github.com/nourenzi/pension/blob/main/script.js): `script.js`

### Offline App

- [Service worker](https://github.com/nourenzi/pension/blob/main/sw.js): `sw.js`
- [Cached app assets](https://github.com/nourenzi/pension/blob/main/index.html): `index.html`

### Other components

- **Calculator user**
- **Chart.js**

## Connections

- Calculator user → Calculator interface: enters details (evidence: `README.md`)
- Calculator interface → Input capture: provides inputs (evidence: `README.md`)
- Input capture → Input validation: validates (evidence: `script.js`)
- Input validation → Dual law rules: evaluates rules (evidence: `README.md`)
- Dual law rules → Month-based dates: uses month conversion (evidence: `README.md`)
- Dual law rules → Eligibility comparison: compares conditions (evidence: `README.md`)
- Dual law rules → Pension estimate: estimates pension (evidence: `README.md`)
- Dual law rules → Lump-sum estimate: estimates compensation (evidence: `README.md`)
- Eligibility comparison → Results report: reports results (evidence: `README.md`)
- Pension estimate → Results report: reports estimate (evidence: `README.md`)
- Lump-sum estimate → Results report: reports estimate (evidence: `README.md`)
- Results report → Eligibility display: renders (evidence: `script.js`)
- Results report → Pension chart: draws chart (evidence: `script.js`)
- Pension chart → Chart.js: creates chart (evidence: `script.js`)
- Results report → Share summary: updates summary (evidence: `script.js`)
- Service worker → Cached app assets: caches assets (evidence: `sw.js`)
