# imgsus/pharmac architecture

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

- Interactive diagram: https://gitdiagram.com/imgsus/pharmac
- Repository: https://github.com/imgsus/pharmac

## Overview

PharmaC is a Laravel pharmacy-management application for staff workflows, inventory, and administration. The documented product lifecycle is to create categories and suppliers, record purchases, add products, then sell them; sales reduce stock and can trigger stock alerts. The graph also preserves the README’s reporting, access-control, user, settings, backup, and dashboard capabilities. Controller and route wiring is only partially evidenced by the sampled source, so peripheral links are intentionally omitted; directory-level nodes represent unsampled feature implementations.

Main entry points: [`routes/web.php`](https://github.com/imgsus/pharmac/blob/main/routes/web.php) (Web routes), [`app/Models`](https://github.com/imgsus/pharmac/tree/main/app/Models) (Domain models), [`app/Http/Controllers/Admin/SaleController.php`](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/SaleController.php) (Sales and POS), [`app/Http/Controllers/Admin/CategoryController.php`](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/CategoryController.php) (Categories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Inventory and Sales"]
  node_category["Categories"]
  node_supplier["Suppliers"]
  node_purchases["Purchases"]
  node_products["Products"]
  node_sales["Sales and POS<br/>[SaleController.php]"]
end

subgraph group_operations["Pharmacy Operations"]
  node_stock_event["Stock event"]
  node_stock_listener["Stock alerts"]
  node_notification["Alert delivery"]
  node_reports["Reports"]
  node_inventory["Inventory checks"]
  node_prescriptions["Prescriptions"]
  node_temperature["Temperature"]
  node_dashboard["Dashboard"]
end

subgraph group_admin["Administration"]
  node_access["Roles and permissions"]
  node_users["Users and profiles<br/>[UserController.php]"]
  node_settings["Settings"]
  node_backup["Application backup"]
  node_audit["Audit logs"]
end

subgraph group_runtime["Request and Persistence"]
  node_web_routes["Web routes<br/>[web.php]"]
  node_models["Domain models"]
  node_database[("Application database")]
end

node_staff(("Pharmacy staff"))

node_staff -->|"sends requests"| node_web_routes
node_web_routes -->|"dispatches"| node_category
node_web_routes -->|"dispatches"| node_supplier
node_web_routes -->|"dispatches"| node_purchases
node_web_routes -->|"dispatches"| node_products
node_web_routes -->|"dispatches"| node_sales
node_category -->|"uses category data"| node_models
node_supplier -->|"uses supplier data"| node_models
node_purchases -->|"reads and updates"| node_models
node_products -->|"uses product data"| node_models
node_sales -->|"checks and updates stock"| node_models
node_models -->|"persists records"| node_database
node_sales -->|"dispatches"| node_stock_event
node_stock_event -->|"notifies listener"| node_stock_listener
node_stock_listener -->|"creates alert"| node_notification
node_web_routes -->|"dispatches"| node_reports
node_web_routes -->|"dispatches"| node_inventory
node_web_routes -->|"dispatches"| node_prescriptions
node_web_routes -->|"dispatches"| node_temperature
node_web_routes -->|"dispatches"| node_dashboard
node_web_routes -->|"dispatches"| node_access
node_web_routes -->|"dispatches"| node_users
node_web_routes -->|"dispatches"| node_settings
node_web_routes -->|"dispatches"| node_backup
node_web_routes -->|"dispatches"| node_audit

click node_web_routes "https://github.com/imgsus/pharmac/blob/main/routes/web.php"
click node_category "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/CategoryController.php"
click node_supplier "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/SupplierController.php"
click node_purchases "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/PurchaseController.php"
click node_products "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/ProductController.php"
click node_sales "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/SaleController.php"
click node_models "https://github.com/imgsus/pharmac/tree/main/app/Models"
click node_stock_event "https://github.com/imgsus/pharmac/blob/main/app/Events/PurchaseOutStock.php"
click node_stock_listener "https://github.com/imgsus/pharmac/blob/main/app/Listeners/NotifyStockAlert.php"
click node_notification "https://github.com/imgsus/pharmac/blob/main/app/Notifications/StockAlertNotification.php"
click node_reports "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/ReportController.php"
click node_inventory "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/InventoryCheckController.php"
click node_prescriptions "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/PrescriptionController.php"
click node_temperature "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/TemperatureController.php"
click node_dashboard "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/DashboardController.php"
click node_access "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/PermissionController.php"
click node_users "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/UserController.php"
click node_settings "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/SettingController.php"
click node_backup "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/BackupController.php"
click node_audit "https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/AuditController.php"

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_category,node_supplier,node_purchases,node_products,node_sales toneBlue
class node_stock_event,node_stock_listener,node_notification,node_reports,node_inventory,node_prescriptions,node_temperature,node_dashboard toneAmber
class node_access,node_users,node_settings,node_backup,node_audit toneMint
class node_web_routes,node_models,node_database toneRose
class node_staff toneIndigo
```

## Components

### Inventory and Sales

- [Categories](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/CategoryController.php): `app/Http/Controllers/Admin/CategoryController.php`
- [Suppliers](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/SupplierController.php): `app/Http/Controllers/Admin/SupplierController.php`
- [Purchases](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/PurchaseController.php): `app/Http/Controllers/Admin/PurchaseController.php`
- [Products](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/ProductController.php): `app/Http/Controllers/Admin/ProductController.php`
- [Sales and POS](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/SaleController.php): `app/Http/Controllers/Admin/SaleController.php`

### Pharmacy Operations

- [Stock event](https://github.com/imgsus/pharmac/blob/main/app/Events/PurchaseOutStock.php): `app/Events/PurchaseOutStock.php`
- [Stock alerts](https://github.com/imgsus/pharmac/blob/main/app/Listeners/NotifyStockAlert.php): `app/Listeners/NotifyStockAlert.php`
- [Alert delivery](https://github.com/imgsus/pharmac/blob/main/app/Notifications/StockAlertNotification.php): `app/Notifications/StockAlertNotification.php`
- [Reports](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/ReportController.php): `app/Http/Controllers/Admin/ReportController.php`
- [Inventory checks](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/InventoryCheckController.php): `app/Http/Controllers/Admin/InventoryCheckController.php`
- [Prescriptions](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/PrescriptionController.php): `app/Http/Controllers/Admin/PrescriptionController.php`
- [Temperature](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/TemperatureController.php): `app/Http/Controllers/Admin/TemperatureController.php`
- [Dashboard](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/DashboardController.php): `app/Http/Controllers/Admin/DashboardController.php`

### Administration

- [Roles and permissions](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/PermissionController.php): `app/Http/Controllers/Admin/PermissionController.php`
- [Users and profiles](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/UserController.php): `app/Http/Controllers/Admin/UserController.php`
- [Settings](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/SettingController.php): `app/Http/Controllers/Admin/SettingController.php`
- [Application backup](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/BackupController.php): `app/Http/Controllers/Admin/BackupController.php`
- [Audit logs](https://github.com/imgsus/pharmac/blob/main/app/Http/Controllers/Admin/AuditController.php): `app/Http/Controllers/Admin/AuditController.php`

### Request and Persistence

- [Web routes](https://github.com/imgsus/pharmac/blob/main/routes/web.php): `routes/web.php`
- [Domain models](https://github.com/imgsus/pharmac/tree/main/app/Models): `app/Models`
- **Application database**

### Other components

- **Pharmacy staff**

## Connections

- Pharmacy staff → Web routes: sends requests
- Web routes → Categories: dispatches
- Web routes → Suppliers: dispatches
- Web routes → Purchases: dispatches
- Web routes → Products: dispatches
- Web routes → Sales and POS: dispatches
- Categories → Domain models: uses category data
- Suppliers → Domain models: uses supplier data
- Purchases → Domain models: reads and updates
- Products → Domain models: uses product data
- Sales and POS → Domain models: checks and updates stock
- Domain models → Application database: persists records
- Sales and POS → Stock event: dispatches
- Stock event → Stock alerts: notifies listener
- Stock alerts → Alert delivery: creates alert
- Web routes → Reports: dispatches
- Web routes → Inventory checks: dispatches
- Web routes → Prescriptions: dispatches
- Web routes → Temperature: dispatches
- Web routes → Dashboard: dispatches
- Web routes → Roles and permissions: dispatches
- Web routes → Users and profiles: dispatches
- Web routes → Settings: dispatches
- Web routes → Application backup: dispatches
- Web routes → Audit logs: dispatches
