Layout
The module folder
roi-cloud/
├── module.json manifest
├── sql/
│ ├── 010.tables.sql new tables
│ ├── 020.functions.sql analytics functions
│ ├── 030.views.sql materialized views
│ └── 900.seed.sql reference data
├── ui/
│ ├── menu.yaml nav entry
│ └── routes.php optional views
└── tests/
└── roi-cloud.test.sql assertions
Manifest
The contract
One small JSON file declares identity, dependencies, entrypoints, permissions and UI placement.
{
"id": "ROI-CLOUD",
"name": "Cloud what-if",
"version": "0.4.0",
"requires": ["ROI-DB"],
"entrypoints": [
"sdb",
"sdb_calc_compute_estd",
"sdb_calc_ram_estd"
],
"tables": ["cloud_estimate"],
"permissions": ["client", "admin", "super"],
"ui": { "menu": "Cloud", "order": 40 }
}