# puj16/sapu-app architecture

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

- Interactive diagram: https://gitdiagram.com/puj16/sapu-app
- Repository: https://github.com/puj16/sapu-app

## Overview

Sapu-App manages fertilizer distribution from farmer land records and subsidy applications through group validation, RDKK allocation, stock tracking, payment status, and delivery monitoring. Controllers query and update the domain models and render role-specific Blade screens; the sampled code directly confirms application, RDKK, dashboard, and distribution data access. The tree and README identify additional authentication, notification, export, and reporting capabilities, but their wiring was not sampled, so those links are not inferred.

Main entry points: [`app/Http/Controllers/PenyaluranController.php`](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PenyaluranController.php) (Payment and delivery), [`app/Http/Controllers/DashboardController.php`](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/DashboardController.php) (Role dashboards), [`app/Http/Controllers/PengajuanController.php`](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PengajuanController.php) (Fertilizer applications), [`app/Http/Controllers/RdkkController.php`](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/RdkkController.php) (RDKK planning)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and dashboards"]
  node_auth["Authentication<br/>[Authcontroller.php]"]
  node_dashboards["Role dashboards"]
  node_dashboard_views["Dashboard screens"]
end

subgraph group_eligibility["Farmer eligibility"]
  node_land_ctl["Land records"]
  node_land["Land parcels<br/>[Lahan.php]"]
  node_application_ctl["Fertilizer applications"]
  node_applications["Applications<br/>[Pengajuan.php]"]
  node_farmers_data["Farmer profiles<br/>[Petani.php]"]
  node_application_views["Application screens"]
end

subgraph group_allocation["Allocation and inventory"]
  node_rdkk_ctl["RDKK planning<br/>[RdkkController.php]"]
  node_rdkk["RDKK allocations<br/>[Rdkk.php]"]
  node_fertilizer["Fertilizer catalog<br/>[Pupuk.php]"]
  node_stock_ctl["Stock tracking<br/>[StokController.php]"]
  node_stock["Fertilizer stock<br/>[Stok.php]"]
end

subgraph group_delivery["Payment and delivery"]
  node_delivery_ctl["Payment and delivery"]
  node_deliveries["Delivery records<br/>[Penyaluran.php]"]
  node_partial_delivery["Partial delivery details"]
  node_delivery_views["Delivery screens"]
  node_reports["Reports and exports"]
  node_notifications["Push notifications"]
  node_notification_worker["Notification display<br/>[service-worker.js]"]
end

subgraph group_platform["Persistence and integrations"]
  node_mysql[("Relational database<br/>[database.php]")]
end

node_farmers(("Farmers"))
node_staff(("Group and field staff"))

node_farmers -->|"sign in"| node_auth
node_staff -->|"sign in"| node_auth
node_farmers -->|"manage parcels"| node_land_ctl
node_land_ctl -->|"reads and writes"| node_land
node_farmers -->|"submit request"| node_application_ctl
node_application_ctl -->|"reads and writes"| node_applications
node_application_ctl -->|"checks parcel"| node_land
node_application_ctl -->|"renders"| node_application_views
node_staff -->|"plan allocation"| node_rdkk_ctl
node_rdkk_ctl -->|"reads approved"| node_applications
node_rdkk_ctl -->|"creates and updates"| node_rdkk
node_rdkk_ctl -->|"reads catalog"| node_fertilizer
node_staff -->|"track stock"| node_stock_ctl
node_stock_ctl -->|"manages"| node_stock
node_staff -->|"record delivery"| node_delivery_ctl
node_delivery_ctl -->|"reads allocation"| node_rdkk
node_delivery_ctl -->|"checks stock"| node_stock
node_delivery_ctl -->|"reads and updates"| node_deliveries
node_delivery_ctl -->|"reads details"| node_partial_delivery
node_delivery_ctl -->|"renders"| node_delivery_views
node_dashboards -->|"reads allocations"| node_rdkk
node_dashboards -->|"counts statuses"| node_applications
node_dashboards -->|"summarizes status"| node_deliveries
node_dashboards -->|"reads parcels"| node_land
node_dashboards -->|"renders"| node_dashboard_views
node_rdkk_ctl -->|"persists records"| node_mysql
node_application_ctl -->|"persists records"| node_mysql
node_delivery_ctl -->|"persists records"| node_mysql
node_stock_ctl -->|"persists records"| node_mysql
node_notifications -.->|"pushes notices"| node_notification_worker

click node_auth "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/Authcontroller.php"
click node_dashboards "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/DashboardController.php"
click node_dashboard_views "https://github.com/puj16/sapu-app/tree/main/resources/views"
click node_land_ctl "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/LahanController.php"
click node_land "https://github.com/puj16/sapu-app/blob/main/app/Models/Lahan.php"
click node_application_ctl "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PengajuanController.php"
click node_applications "https://github.com/puj16/sapu-app/blob/main/app/Models/Pengajuan.php"
click node_farmers_data "https://github.com/puj16/sapu-app/blob/main/app/Models/Petani.php"
click node_application_views "https://github.com/puj16/sapu-app/blob/main/resources/views/petani/pengajuan.blade.php"
click node_rdkk_ctl "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/RdkkController.php"
click node_rdkk "https://github.com/puj16/sapu-app/blob/main/app/Models/Rdkk.php"
click node_fertilizer "https://github.com/puj16/sapu-app/blob/main/app/Models/Pupuk.php"
click node_stock_ctl "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/StokController.php"
click node_stock "https://github.com/puj16/sapu-app/blob/main/app/Models/Stok.php"
click node_delivery_ctl "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PenyaluranController.php"
click node_deliveries "https://github.com/puj16/sapu-app/blob/main/app/Models/Penyaluran.php"
click node_partial_delivery "https://github.com/puj16/sapu-app/blob/main/app/Models/detailPenyaluranSebagian.php"
click node_delivery_views "https://github.com/puj16/sapu-app/blob/main/resources/views/poktan/penyaluran.blade.php"
click node_reports "https://github.com/puj16/sapu-app/tree/main/app/Http/Controllers"
click node_notifications "https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PushNotificationController.php"
click node_notification_worker "https://github.com/puj16/sapu-app/blob/main/public/service-worker.js"
click node_mysql "https://github.com/puj16/sapu-app/blob/main/config/database.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_auth,node_dashboards,node_dashboard_views toneBlue
class node_land_ctl,node_land,node_application_ctl,node_applications,node_farmers_data,node_application_views toneAmber
class node_rdkk_ctl,node_rdkk,node_fertilizer,node_stock_ctl,node_stock toneMint
class node_delivery_ctl,node_deliveries,node_partial_delivery,node_delivery_views,node_reports,node_notifications,node_notification_worker toneRose
class node_mysql,node_farmers,node_staff toneIndigo
```

## Components

### Access and dashboards

- [Authentication](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/Authcontroller.php): `app/Http/Controllers/Authcontroller.php`
- [Role dashboards](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/DashboardController.php): `app/Http/Controllers/DashboardController.php`
- [Dashboard screens](https://github.com/puj16/sapu-app/tree/main/resources/views): `resources/views`

### Farmer eligibility

- [Land records](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/LahanController.php): `app/Http/Controllers/LahanController.php`
- [Land parcels](https://github.com/puj16/sapu-app/blob/main/app/Models/Lahan.php): `app/Models/Lahan.php`
- [Fertilizer applications](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PengajuanController.php): `app/Http/Controllers/PengajuanController.php`
- [Applications](https://github.com/puj16/sapu-app/blob/main/app/Models/Pengajuan.php): `app/Models/Pengajuan.php`
- [Farmer profiles](https://github.com/puj16/sapu-app/blob/main/app/Models/Petani.php): `app/Models/Petani.php`
- [Application screens](https://github.com/puj16/sapu-app/blob/main/resources/views/petani/pengajuan.blade.php): `resources/views/petani/pengajuan.blade.php`

### Allocation and inventory

- [RDKK planning](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/RdkkController.php): `app/Http/Controllers/RdkkController.php`
- [RDKK allocations](https://github.com/puj16/sapu-app/blob/main/app/Models/Rdkk.php): `app/Models/Rdkk.php`
- [Fertilizer catalog](https://github.com/puj16/sapu-app/blob/main/app/Models/Pupuk.php): `app/Models/Pupuk.php`
- [Stock tracking](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/StokController.php): `app/Http/Controllers/StokController.php`
- [Fertilizer stock](https://github.com/puj16/sapu-app/blob/main/app/Models/Stok.php): `app/Models/Stok.php`

### Payment and delivery

- [Payment and delivery](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PenyaluranController.php): `app/Http/Controllers/PenyaluranController.php`
- [Delivery records](https://github.com/puj16/sapu-app/blob/main/app/Models/Penyaluran.php): `app/Models/Penyaluran.php`
- [Partial delivery details](https://github.com/puj16/sapu-app/blob/main/app/Models/detailPenyaluranSebagian.php): `app/Models/detailPenyaluranSebagian.php`
- [Delivery screens](https://github.com/puj16/sapu-app/blob/main/resources/views/poktan/penyaluran.blade.php): `resources/views/poktan/penyaluran.blade.php`
- [Reports and exports](https://github.com/puj16/sapu-app/tree/main/app/Http/Controllers): `app/Http/Controllers`
- [Push notifications](https://github.com/puj16/sapu-app/blob/main/app/Http/Controllers/PushNotificationController.php): `app/Http/Controllers/PushNotificationController.php`
- [Notification display](https://github.com/puj16/sapu-app/blob/main/public/service-worker.js): `public/service-worker.js`

### Persistence and integrations

- [Relational database](https://github.com/puj16/sapu-app/blob/main/config/database.php): `config/database.php`

### Other components

- **Farmers**
- **Group and field staff**

## Connections

- Farmers → Authentication: sign in
- Group and field staff → Authentication: sign in
- Farmers → Land records: manage parcels
- Land records → Land parcels: reads and writes
- Farmers → Fertilizer applications: submit request
- Fertilizer applications → Applications: reads and writes
- Fertilizer applications → Land parcels: checks parcel
- Fertilizer applications → Application screens: renders
- Group and field staff → RDKK planning: plan allocation
- RDKK planning → Applications: reads approved
- RDKK planning → RDKK allocations: creates and updates
- RDKK planning → Fertilizer catalog: reads catalog
- Group and field staff → Stock tracking: track stock
- Stock tracking → Fertilizer stock: manages
- Group and field staff → Payment and delivery: record delivery
- Payment and delivery → RDKK allocations: reads allocation
- Payment and delivery → Fertilizer stock: checks stock
- Payment and delivery → Delivery records: reads and updates
- Payment and delivery → Partial delivery details: reads details
- Payment and delivery → Delivery screens: renders
- Role dashboards → RDKK allocations: reads allocations
- Role dashboards → Applications: counts statuses
- Role dashboards → Delivery records: summarizes status
- Role dashboards → Land parcels: reads parcels
- Role dashboards → Dashboard screens: renders
- RDKK planning → Relational database: persists records
- Fertilizer applications → Relational database: persists records
- Payment and delivery → Relational database: persists records
- Stock tracking → Relational database: persists records
- Push notifications → Notification display: pushes notices
