# bcgov/unity architecture

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

- Interactive diagram: https://gitdiagram.com/bcgov/unity
- Repository: https://github.com/bcgov/unity

## Overview

Unity Grant Manager is a government grant-management platform for application intake, assessment, approvals, payments, reporting, and notifications. The principal workflow takes applications through adjudication and payment; the repository also includes applicant-profile and attachment services, configurable forms and score sheets, and an AI module. The README documents the end-to-end capabilities, while sampled source confirms selected workflow, attachment, profile, notification, and AI behavior. Some subsystem links are therefore omitted where the available excerpts do not establish their runtime wiring.

Main entry points: [`applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications`](https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications) (Application Intake), [`applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs`](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs) (Application Workflow), [`applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore`](https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore) (Application Data), [`applications/Unity.GrantManager/src/Unity.GrantManager.HttpApi/Controllers/AttachmentController.cs`](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.HttpApi/Controllers/AttachmentController.cs) (Attachments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_intake["Intake and Profiles"]
  node_intake["Application Intake<br/>[GrantApplications]"]
  node_profile["Applicant Profile"]
  node_attachments["Attachments"]
  node_forms["Forms and Submissions"]
end

subgraph group_adjudication["Review and Decisions"]
  node_workflow["Application Workflow"]
  node_assessment["Assessment<br/>[Scoresheets]"]
  node_approvals["Approvals"]
  node_payments["Payments"]
end

subgraph group_services["Platform Services"]
  node_reporting["Reporting<br/>[Index.cshtml.cs]"]
  node_notifications["Notifications"]
  node_storage[("Application Data")]
end

subgraph group_ai["AI Generation"]
  node_aiqueue["AI Generation Queue"]
  node_aipipeline["AI Operations<br/>[Operations]"]
  node_airuntime["AI Runtime"]
  node_generationhandler["Intake AI Handler"]
end

node_applicant(("Applicant"))
node_objectstore[("S3 Object Storage")]
node_mail["Email Service"]
node_openai["OpenAI"]

node_applicant -->|"submits application"| node_intake
node_intake -->|"uses form data"| node_forms
node_intake -->|"processes application"| node_workflow
node_workflow -->|"advances to review"| node_assessment
node_workflow -->|"supports decisions"| node_approvals
node_approvals -->|"authorizes payment"| node_payments
node_intake -->|"resolves profile data"| node_profile
node_attachments -->|"reads and writes files"| node_objectstore
node_attachments -->|"retrieves file blobs"| node_storage
node_notifications -->|"manages email notices"| node_mail
node_intake -->|"raises process event"| node_generationhandler
node_generationhandler -->|"queues intake"| node_aiqueue
node_aiqueue -->|"dispatches generation"| node_aipipeline
node_aipipeline -->|"executes operations"| node_airuntime
node_airuntime -->|"sends model requests"| node_openai
node_workflow -->|"loads application state"| node_storage
node_payments -->|"queries payment data"| node_storage

click node_intake "https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications"
click node_profile "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/Queries/ApplicantProfileQueryService.cs"
click node_attachments "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.HttpApi/Controllers/AttachmentController.cs"
click node_forms "https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Application.Contracts"
click node_workflow "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs"
click node_assessment "https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Application.Contracts/Scoresheets"
click node_approvals "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs"
click node_payments "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/Services/PaymentRequestQueryManager.cs"
click node_reporting "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Web/Pages/AIReporting/Index.cshtml.cs"
click node_notifications "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Controllers/FormNotificationsApiController.cs"
click node_storage "https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore"
click node_aiqueue "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Generation/IApplicationGenerationQueue.cs"
click node_aipipeline "https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Operations"
click node_airuntime "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Runtime/Execution/OpenAIRuntimeService.cs"
click node_generationhandler "https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications/Automation/Generation/Handlers/QueueApplicationAIPipelineOnProcessHandler.cs"

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_intake,node_profile,node_attachments,node_forms toneBlue
class node_workflow,node_assessment,node_approvals,node_payments,node_objectstore toneAmber
class node_reporting,node_notifications,node_storage toneMint
class node_aiqueue,node_aipipeline,node_airuntime,node_generationhandler toneRose
class node_applicant,node_mail,node_openai toneIndigo
```

## Components

### Intake and Profiles

- [Application Intake](https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications): `applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications`
- [Applicant Profile](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/Queries/ApplicantProfileQueryService.cs): `applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/Queries/ApplicantProfileQueryService.cs`
- [Attachments](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.HttpApi/Controllers/AttachmentController.cs): `applications/Unity.GrantManager/src/Unity.GrantManager.HttpApi/Controllers/AttachmentController.cs`
- [Forms and Submissions](https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Application.Contracts): `applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Application.Contracts`

### Review and Decisions

- [Application Workflow](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs): `applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs`
- [Assessment](https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Application.Contracts/Scoresheets): `applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Application.Contracts/Scoresheets`
- [Approvals](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs): `applications/Unity.GrantManager/src/Unity.GrantManager.Domain/Applications/ApplicationManager.cs`
- [Payments](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/Services/PaymentRequestQueryManager.cs): `applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/Services/PaymentRequestQueryManager.cs`

### Platform Services

- [Reporting](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Web/Pages/AIReporting/Index.cshtml.cs): `applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Web/Pages/AIReporting/Index.cshtml.cs`
- [Notifications](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Controllers/FormNotificationsApiController.cs): `applications/Unity.GrantManager/src/Unity.GrantManager.Web/Controllers/FormNotificationsApiController.cs`
- [Application Data](https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore): `applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore`

### AI Generation

- [AI Generation Queue](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Generation/IApplicationGenerationQueue.cs): `applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Generation/IApplicationGenerationQueue.cs`
- [AI Operations](https://github.com/bcgov/unity/tree/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Operations): `applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Operations`
- [AI Runtime](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Runtime/Execution/OpenAIRuntimeService.cs): `applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Runtime/Execution/OpenAIRuntimeService.cs`
- [Intake AI Handler](https://github.com/bcgov/unity/blob/main/applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications/Automation/Generation/Handlers/QueueApplicationAIPipelineOnProcessHandler.cs): `applications/Unity.GrantManager/src/Unity.GrantManager.Application/GrantApplications/Automation/Generation/Handlers/QueueApplicationAIPipelineOnProcessHandler.cs`

### Other components

- **Applicant**
- **S3 Object Storage**
- **Email Service**
- **OpenAI**

## Connections

- Applicant → Application Intake: submits application
- Application Intake → Forms and Submissions: uses form data
- Application Intake → Application Workflow: processes application
- Application Workflow → Assessment: advances to review
- Application Workflow → Approvals: supports decisions
- Approvals → Payments: authorizes payment
- Application Intake → Applicant Profile: resolves profile data
- Attachments → S3 Object Storage: reads and writes files
- Attachments → Application Data: retrieves file blobs
- Notifications → Email Service: manages email notices
- Application Intake → Intake AI Handler: raises process event
- Intake AI Handler → AI Generation Queue: queues intake
- AI Generation Queue → AI Operations: dispatches generation
- AI Operations → AI Runtime: executes operations
- AI Runtime → OpenAI: sends model requests
- Application Workflow → Application Data: loads application state
- Payments → Application Data: queries payment data
