# niharsalvi2105/repair_estimator_app architecture

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

- Interactive diagram: https://gitdiagram.com/niharsalvi2105/repair_estimator_app
- Repository: https://github.com/niharsalvi2105/repair_estimator_app

## Overview

KONE Repair Estimator is a Power Apps Code App for preparing, pricing, saving, and submitting repair estimates against Dataverse. Users select a branch and customer/equipment/package data, build an estimate, review calculated pricing, and save or submit it; plugin-side pricing and validation provide authoritative results. The repository also includes dashboard, cloning, master-data, export-delivery, and carefully staged customer-import capabilities. Source excerpts are partial, so some backend links rely on indexed references; the README documents the broader product workflow and import safeguards.

Main entry points: [`src/App.tsx`](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/App.tsx) (App navigation), [`backend-pricing/Automation/ExportRequestPlugin.cs`](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Automation/ExportRequestPlugin.cs) (Export request plugin), [`backend-pricing/Plugins/EstimateCalculationPlugin.cs`](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Plugins/EstimateCalculationPlugin.cs) (Estimate calculation plugin), [`src/data/repairEstimatorRepository.ts`](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/repairEstimatorRepository.ts) (Estimator repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Estimator app"]
  node_app["App navigation<br/>[App.tsx]"]
  node_workspace["Estimate workspace"]
  node_dashboard["Dashboard"]
  node_masterui["Master-data workspace"]
end

subgraph group_data["Dataverse access"]
  node_repository["Estimator repository"]
  node_draftrepo["Draft repository<br/>[draftRepository.ts]"]
  node_session["Session and access"]
  node_operation["Dataverse operations"]
end

subgraph group_backend["Estimate services"]
  node_draft["Draft service<br/>[DraftPlugin.cs]"]
  node_dashboardread["Dashboard reader<br/>[DashboardReader.cs]"]
  node_presets["Opportunity presets"]
  node_equipment["Contract equipment"]
  node_catalog["Part catalog<br/>[PartCatalog.cs]"]
end

subgraph group_pricing["Pricing and export"]
  node_loader["Estimate input loader"]
  node_query["Dataverse query helpers<br/>[Query.cs]"]
  node_engine["Pricing engine<br/>[PricingEngine.cs]"]
  node_writer["Calculation writer"]
  node_calculation["Estimate calculation plugin"]
  node_export["Export request plugin"]
  node_snapshot["Export snapshot<br/>[ExportSnapshot.cs]"]
  node_names["Schema names<br/>[Names.cs]"]
end

subgraph group_ops["Master data operations"]
  node_customerimport["Customer bulk import"]
  node_customerapply["Customer import apply"]
end

node_user(("Estimator"))
node_dataverse[("Dataverse")]
node_workbook["Excel workbooks"]

node_user -->|"uses"| node_app
node_app -->|"opens"| node_workspace
node_app -->|"loads branches"| node_repository
node_app -->|"loads drafts"| node_draftrepo
node_app -.->|"shows"| node_dashboard
node_app -.->|"opens"| node_masterui
node_workspace -.->|"fetches reference data"| node_repository
node_repository -->|"reads records"| node_dataverse
node_draftrepo -.->|"reads and writes"| node_dataverse
node_session -->|"checks identity and privileges"| node_dataverse
node_repository -->|"uses"| node_operation
node_operation -->|"calls services"| node_dataverse
node_dataverse -.->|"triggers plugin"| node_draft
node_draft -->|"requests validation"| node_calculation
node_draft -->|"reads and writes"| node_dataverse
node_dataverse -.->|"provides estimate inputs"| node_loader
node_loader -->|"queries records"| node_query
node_calculation -->|"loads inputs"| node_loader
node_calculation -->|"calculates pricing"| node_engine
node_calculation -->|"writes results"| node_writer
node_writer -->|"uses results"| node_engine
node_export -->|"builds snapshot"| node_snapshot
node_export -->|"loads estimate inputs"| node_loader
node_export -->|"calculates pricing"| node_engine
node_export -->|"writes calculation"| node_writer
node_dashboardread -.->|"reads dashboard data"| node_dataverse
node_presets -.->|"reads presets"| node_dataverse
node_equipment -.->|"reads equipment"| node_dataverse
node_catalog -.->|"reads catalog"| node_dataverse
node_customerimport -->|"stages candidates"| node_customerapply
node_customerapply -->|"imports and verifies"| node_dataverse
node_customerapply -->|"reads source workbooks"| node_workbook

click node_app "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/App.tsx"
click node_workspace "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/EstimatorWorkspace.tsx"
click node_dashboard "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/DashboardMetrics.tsx"
click node_masterui "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/MasterDataWorkspace.tsx"
click node_repository "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/repairEstimatorRepository.ts"
click node_draftrepo "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/draftRepository.ts"
click node_session "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/sessionRepository.ts"
click node_operation "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/dataverseOperation.ts"
click node_draft "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/DraftPlugin.cs"
click node_dashboardread "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/DashboardReader.cs"
click node_presets "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/OpportunityPresets.cs"
click node_equipment "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/ContractEquipment.cs"
click node_catalog "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/PartCatalog.cs"
click node_loader "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Data/EstimateInputLoader.cs"
click node_query "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Data/Query.cs"
click node_engine "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Pricing/PricingEngine.cs"
click node_writer "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Plugins/CalculationWriter.cs"
click node_calculation "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Plugins/EstimateCalculationPlugin.cs"
click node_export "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Automation/ExportRequestPlugin.cs"
click node_snapshot "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Automation/ExportSnapshot.cs"
click node_names "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Infrastructure/Names.cs"
click node_customerimport "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/automation/import-customer-masters-bulk.py"
click node_customerapply "https://github.com/niharsalvi2105/repair_estimator_app/blob/main/automation/apply-customer-masters.py"

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_app,node_workspace,node_dashboard,node_masterui toneBlue
class node_repository,node_draftrepo,node_session,node_operation,node_dataverse toneAmber
class node_draft,node_dashboardread,node_presets,node_equipment,node_catalog toneMint
class node_loader,node_query,node_engine,node_writer,node_calculation,node_export,node_snapshot,node_names toneRose
class node_customerimport,node_customerapply,node_user,node_workbook toneIndigo
```

## Components

### Estimator app

- [App navigation](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/App.tsx): `src/App.tsx`
- [Estimate workspace](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/EstimatorWorkspace.tsx): `src/EstimatorWorkspace.tsx`
- [Dashboard](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/DashboardMetrics.tsx): `src/DashboardMetrics.tsx`
- [Master-data workspace](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/MasterDataWorkspace.tsx): `src/MasterDataWorkspace.tsx`

### Dataverse access

- [Estimator repository](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/repairEstimatorRepository.ts): `src/data/repairEstimatorRepository.ts`
- [Draft repository](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/draftRepository.ts): `src/data/draftRepository.ts`
- [Session and access](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/sessionRepository.ts): `src/data/sessionRepository.ts`
- [Dataverse operations](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/src/data/dataverseOperation.ts): `src/data/dataverseOperation.ts`

### Estimate services

- [Draft service](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/DraftPlugin.cs): `backend/DraftPlugin.cs`
- [Dashboard reader](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/DashboardReader.cs): `backend/DashboardReader.cs`
- [Opportunity presets](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/OpportunityPresets.cs): `backend/OpportunityPresets.cs`
- [Contract equipment](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/ContractEquipment.cs): `backend/ContractEquipment.cs`
- [Part catalog](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend/PartCatalog.cs): `backend/PartCatalog.cs`

### Pricing and export

- [Estimate input loader](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Data/EstimateInputLoader.cs): `backend-pricing/Data/EstimateInputLoader.cs`
- [Dataverse query helpers](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Data/Query.cs): `backend-pricing/Data/Query.cs`
- [Pricing engine](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Pricing/PricingEngine.cs): `backend-pricing/Pricing/PricingEngine.cs`
- [Calculation writer](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Plugins/CalculationWriter.cs): `backend-pricing/Plugins/CalculationWriter.cs`
- [Estimate calculation plugin](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Plugins/EstimateCalculationPlugin.cs): `backend-pricing/Plugins/EstimateCalculationPlugin.cs`
- [Export request plugin](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Automation/ExportRequestPlugin.cs): `backend-pricing/Automation/ExportRequestPlugin.cs`
- [Export snapshot](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Automation/ExportSnapshot.cs): `backend-pricing/Automation/ExportSnapshot.cs`
- [Schema names](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/backend-pricing/Infrastructure/Names.cs): `backend-pricing/Infrastructure/Names.cs`

### Master data operations

- [Customer bulk import](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/automation/import-customer-masters-bulk.py): `automation/import-customer-masters-bulk.py`
- [Customer import apply](https://github.com/niharsalvi2105/repair_estimator_app/blob/main/automation/apply-customer-masters.py): `automation/apply-customer-masters.py`

### Other components

- **Estimator**
- **Dataverse**
- **Excel workbooks**

## Connections

- Estimator → App navigation: uses
- App navigation → Estimate workspace: opens (evidence: `src/App.tsx`)
- App navigation → Estimator repository: loads branches (evidence: `src/App.tsx`)
- App navigation → Draft repository: loads drafts (evidence: `src/App.tsx`)
- App navigation → Dashboard: shows (evidence: `src/App.tsx`)
- App navigation → Master-data workspace: opens (evidence: `src/App.tsx`)
- Estimate workspace → Estimator repository: fetches reference data
- Estimator repository → Dataverse: reads records (evidence: `src/data/repairEstimatorRepository.ts`)
- Draft repository → Dataverse: reads and writes
- Session and access → Dataverse: checks identity and privileges (evidence: `src/data/sessionRepository.ts`)
- Estimator repository → Dataverse operations: uses (evidence: `src/data/repairEstimatorRepository.ts`)
- Dataverse operations → Dataverse: calls services
- Dataverse → Draft service: triggers plugin
- Draft service → Estimate calculation plugin: requests validation (evidence: `backend/DraftPlugin.cs`)
- Draft service → Dataverse: reads and writes (evidence: `backend/DraftPlugin.cs`)
- Dataverse → Estimate input loader: provides estimate inputs
- Estimate input loader → Dataverse query helpers: queries records (evidence: `backend-pricing/Data/EstimateInputLoader.cs`)
- Estimate calculation plugin → Estimate input loader: loads inputs (evidence: `backend-pricing/Plugins/EstimateCalculationPlugin.cs`)
- Estimate calculation plugin → Pricing engine: calculates pricing (evidence: `backend-pricing/Plugins/EstimateCalculationPlugin.cs`)
- Estimate calculation plugin → Calculation writer: writes results (evidence: `backend-pricing/Plugins/EstimateCalculationPlugin.cs`)
- Calculation writer → Pricing engine: uses results (evidence: `backend-pricing/Plugins/CalculationWriter.cs`)
- Export request plugin → Export snapshot: builds snapshot (evidence: `backend-pricing/Automation/ExportRequestPlugin.cs`)
- Export request plugin → Estimate input loader: loads estimate inputs (evidence: `backend-pricing/Automation/ExportRequestPlugin.cs`)
- Export request plugin → Pricing engine: calculates pricing (evidence: `backend-pricing/Automation/ExportRequestPlugin.cs`)
- Export request plugin → Calculation writer: writes calculation (evidence: `backend-pricing/Automation/ExportRequestPlugin.cs`)
- Dashboard reader → Dataverse: reads dashboard data
- Opportunity presets → Dataverse: reads presets
- Contract equipment → Dataverse: reads equipment
- Part catalog → Dataverse: reads catalog
- Customer bulk import → Customer import apply: stages candidates
- Customer import apply → Dataverse: imports and verifies
- Customer import apply → Excel workbooks: reads source workbooks
