# ARCHITECTURE RULES – ERPdash

These rules define how the codebase must be structured.
AI tools must follow these rules strictly.

---

# Layered Architecture

Controllers
↓
Services
↓
Models
↓
Database

Controllers must NEVER contain business logic.

---

# Folder Structure

app/

Models/
  Core/
  Finance/
  Sales/
  Inventory/
  HR/

Services/
  Core/
  Finance/
  Sales/
  Inventory/

Http/
  Controllers/Admin
  Requests/Admin

resources/views/dashboard/

---

# Controllers

Controllers responsibilities:

- receive request
- validate request
- call service
- return response

Controllers should stay small.

---

# Services

Services contain business logic.

Example:

CostCenterService
JournalEntryService
InvoiceService

Services should:

- contain reusable logic
- handle transactions
- coordinate models

---

# Models

Models represent database tables.

Rules:

- use relationships
- use HasTranslations if needed
- avoid heavy logic

---

# Views

Views must live under:

resources/views/dashboard/

Example:

resources/views/dashboard/finance/cost_centers

---

# Requests

Validation must be placed in FormRequest classes.

Example:

StoreCostCenterRequest
UpdateCostCenterRequest

Controllers should not contain validation rules.

