# ezrabehailu19-wq/accounting_firm architecture

> Architecture diagram of the GitHub repository ezrabehailu19-wq/accounting_firm, 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/ezrabehailu19-wq/accounting_firm
- Repository: https://github.com/ezrabehailu19-wq/accounting_firm

## Overview

This is a PHP/MySQL accounting practice website with a public information site, client portal, and staff console. The main workflow runs from a client submitting a request, through staff review and replies, with documents exchanged and invoices issued for clients to view. Pages delegate application rules to Controler, which uses Model for SQL and Db for prepared database operations. The README documents broader capabilities than the sampled excerpts; uncertain page-to-controller wiring is omitted.

Main entry points: [`classes/controler.class.php`](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/controler.class.php) (Application logic), [`contact_submit.php`](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/contact_submit.php) (Contact submission), [`login.php`](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/login.php) (Sign in), [`admin_invoices.php`](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_invoices.php) (Invoice management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public site"]
  node_public_pages["Public pages<br/>[index.html]"]
  node_contact_submit["Contact submission<br/>[contact_submit.php]"]
end

subgraph group_portal["Client access"]
  node_login["Sign in<br/>[login.php]"]
  node_client_requests["Request tracking<br/>[my_requests.php]"]
  node_client_docs["Document exchange<br/>[documents.php]"]
  node_client_invoices["Invoice viewing<br/>[my_invoices.php]"]
end

subgraph group_practice["Practice console"]
  node_staff_inbox["Request inbox<br/>[admin_messages.php]"]
  node_staff_thread["Request handling<br/>[admin_message.php]"]
  node_staff_users["Client management<br/>[admin_users.php]"]
  node_staff_invoices["Invoice management<br/>[admin_invoices.php]"]
  node_invoice_form["Invoice editor"]
  node_audit["Audit trail<br/>[admin_audit.php]"]
end

subgraph group_runtime["Application runtime"]
  node_auth["Authentication<br/>[Auth.class.php]"]
  node_controller["Application logic"]
  node_bootstrap["Page bootstrap<br/>[includes.inc.php]"]
  node_model["Data access<br/>[Model.class.php]"]
  node_db["SQL operations<br/>[Db.class.php]"]
end

subgraph group_state["Persistent state"]
  node_mysql[("MySQL database<br/>[schema.sql]")]
  node_documents_store[("Uploaded documents")]
end

node_visitor(("Visitor"))
node_client(("Client"))
node_staff(("Staff"))
node_mail["Mail delivery"]

node_visitor -->|"browses"| node_public_pages
node_visitor -->|"submits inquiry"| node_contact_submit
node_public_pages -->|"posts form"| node_contact_submit
node_contact_submit -->|"handles submission"| node_controller
node_client -->|"signs in"| node_login
node_staff -->|"signs in"| node_login
node_login -->|"authenticates"| node_auth
node_auth -->|"looks up account"| node_model
node_client -->|"tracks requests"| node_client_requests
node_client -->|"exchanges files"| node_client_docs
node_client -->|"views bills"| node_client_invoices
node_staff -->|"reviews requests"| node_staff_inbox
node_staff -->|"handles request"| node_staff_thread
node_staff -->|"manages clients"| node_staff_users
node_staff -->|"manages billing"| node_staff_invoices
node_staff_invoices -->|"opens editor"| node_invoice_form
node_staff -->|"reviews activity"| node_audit
node_client_requests -->|"requests data"| node_controller
node_client_docs -->|"manages documents"| node_controller
node_client_invoices -->|"requests invoices"| node_controller
node_staff_inbox -->|"lists requests"| node_controller
node_staff_thread -->|"updates thread"| node_controller
node_staff_users -->|"manages accounts"| node_controller
node_staff_invoices -->|"lists invoices"| node_controller
node_invoice_form -->|"saves invoice"| node_controller
node_audit -->|"loads audit"| node_controller
node_contact_submit -->|"processes inquiry"| node_controller
node_controller -->|"applies policy"| node_model
node_model -->|"runs queries"| node_db
node_db -->|"reads and writes"| node_mysql
node_controller -->|"stores uploads"| node_documents_store
node_controller -.->|"sends messages"| node_mail
node_bootstrap -->|"initializes request"| node_login

click node_public_pages "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/index.html"
click node_contact_submit "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/contact_submit.php"
click node_login "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/login.php"
click node_auth "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/Auth.class.php"
click node_client_requests "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/my_requests.php"
click node_client_docs "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/documents.php"
click node_client_invoices "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/my_invoices.php"
click node_staff_inbox "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_messages.php"
click node_staff_thread "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_message.php"
click node_staff_users "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_users.php"
click node_staff_invoices "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_invoices.php"
click node_invoice_form "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_invoice_form.php"
click node_audit "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_audit.php"
click node_controller "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/controler.class.php"
click node_bootstrap "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/includes/includes.inc.php"
click node_model "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/Model.class.php"
click node_db "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/Db.class.php"
click node_mysql "https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/schema.sql"
click node_documents_store "https://github.com/ezrabehailu19-wq/accounting_firm/tree/main/storage/documents"

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_public_pages,node_contact_submit,node_client toneBlue
class node_login,node_client_requests,node_client_docs,node_client_invoices toneAmber
class node_staff_inbox,node_staff_thread,node_staff_users,node_staff_invoices,node_invoice_form,node_audit toneMint
class node_auth,node_controller,node_bootstrap,node_model,node_db toneRose
class node_mysql,node_documents_store,node_visitor,node_staff,node_mail toneIndigo
```

## Components

### Public site

- [Public pages](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/index.html): `index.html`
- [Contact submission](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/contact_submit.php): `contact_submit.php`

### Client access

- [Sign in](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/login.php): `login.php`
- [Request tracking](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/my_requests.php): `my_requests.php`
- [Document exchange](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/documents.php): `documents.php`
- [Invoice viewing](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/my_invoices.php): `my_invoices.php`

### Practice console

- [Request inbox](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_messages.php): `admin_messages.php`
- [Request handling](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_message.php): `admin_message.php`
- [Client management](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_users.php): `admin_users.php`
- [Invoice management](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_invoices.php): `admin_invoices.php`
- [Invoice editor](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_invoice_form.php): `admin_invoice_form.php`
- [Audit trail](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/admin_audit.php): `admin_audit.php`

### Application runtime

- [Authentication](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/Auth.class.php): `classes/Auth.class.php`
- [Application logic](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/controler.class.php): `classes/controler.class.php`
- [Page bootstrap](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/includes/includes.inc.php): `includes/includes.inc.php`
- [Data access](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/Model.class.php): `classes/Model.class.php`
- [SQL operations](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/classes/Db.class.php): `classes/Db.class.php`

### Persistent state

- [MySQL database](https://github.com/ezrabehailu19-wq/accounting_firm/blob/main/schema.sql): `schema.sql`
- [Uploaded documents](https://github.com/ezrabehailu19-wq/accounting_firm/tree/main/storage/documents): `storage/documents`

### Other components

- **Visitor**
- **Client**
- **Staff**
- **Mail delivery**

## Connections

- Visitor → Public pages: browses
- Visitor → Contact submission: submits inquiry
- Public pages → Contact submission: posts form
- Contact submission → Application logic: handles submission
- Client → Sign in: signs in
- Staff → Sign in: signs in
- Sign in → Authentication: authenticates
- Authentication → Data access: looks up account
- Client → Request tracking: tracks requests
- Client → Document exchange: exchanges files
- Client → Invoice viewing: views bills
- Staff → Request inbox: reviews requests
- Staff → Request handling: handles request
- Staff → Client management: manages clients
- Staff → Invoice management: manages billing
- Invoice management → Invoice editor: opens editor
- Staff → Audit trail: reviews activity
- Request tracking → Application logic: requests data
- Document exchange → Application logic: manages documents
- Invoice viewing → Application logic: requests invoices
- Request inbox → Application logic: lists requests
- Request handling → Application logic: updates thread
- Client management → Application logic: manages accounts
- Invoice management → Application logic: lists invoices
- Invoice editor → Application logic: saves invoice
- Audit trail → Application logic: loads audit
- Contact submission → Application logic: processes inquiry
- Application logic → Data access: applies policy
- Data access → SQL operations: runs queries
- SQL operations → MySQL database: reads and writes
- Application logic → Uploaded documents: stores uploads
- Application logic → Mail delivery: sends messages
- Page bootstrap → Sign in: initializes request
