Module organization
Contents
Module organization#
For: developers
OpenSPP is built as a collection of Odoo modules that extend the base Odoo platform. Understanding how modules are organized and how they depend on each other is essential for navigating the codebase and building extensions.
Naming conventions#
All OpenSPP modules use the spp_ prefix:
Pattern |
Meaning |
Examples |
|---|---|---|
|
Core foundation modules |
|
|
Registrant management |
|
|
Program management |
|
|
REST API v2 endpoints |
|
|
CEL expression modules |
|
|
No-code configuration |
|
|
DCI protocol modules |
|
|
Geographic information |
|
|
Grievance redress |
|
|
Disaster relief |
|
|
Demo data modules |
|
Module categories#
Each module declares a category in its __manifest__.py. These categories group modules in the Odoo Apps interface:
Category |
Purpose |
Examples |
|---|---|---|
|
Foundation modules required by most deployments |
|
|
Admin tools and no-code configuration |
|
|
APIs, DCI, banking, external connectivity |
|
|
Geographic and spatial modules |
|
|
Identification and key management |
|
|
System-level modules |
|
|
General-purpose modules |
Various |
Core dependency chain#
The core modules form a clear dependency hierarchy:
spp_security (access control primitives)
|
+-- spp_vocabulary (code systems and controlled lists)
| |
| +-- spp_registry (registrant/group management)
| |
| +-- spp_base_common (common foundation, UI branding)
| |
| +-- spp_programs (programs, cycles, entitlements, payments)
| |
| +-- spp_cel_domain (CEL expressions)
| +-- spp_approval (approval workflows)
| +-- spp_banking (bank details)
| +-- spp_area (geographic areas)
| +-- spp_service_points (service delivery points)
Key dependencies explained#
spp_securityis the lowest-level OpenSPP module. It provides access control groups and security primitives that all other modules depend on.spp_vocabularyprovides controlled vocabulary lists (code systems). The registry uses vocabularies for ID types, relationship types, and other coded values.spp_registryextends Odoo'sres.partnermodel to represent individuals and groups. It depends onspp_vocabularyfor coded fields.spp_base_commonis the typical entry point for installations. It pulls inspp_registryand adds UI branding and common settings.spp_programsis the largest core module. It provides the program management framework including the manager pattern for eligibility, entitlements, cycles, and payments.
Module manifest structure#
Every module has an __manifest__.py file following this pattern:
{
"name": "OpenSPP Programs",
"version": "19.0.2.0.0",
"category": "OpenSPP/Core",
"license": "LGPL-3",
"author": "OpenSPP.org",
"website": "https://github.com/OpenSPP/OpenSPP2",
"depends": [
"spp_registry",
"spp_banking",
"spp_cel_domain",
# ... other dependencies
],
"data": [
"security/groups.xml",
"security/ir.model.access.csv",
"views/program_views.xml",
# ... data files
],
"installable": True,
"auto_install": False,
}
Version format#
Versions follow the pattern {odoo_version}.{major}.{minor}.{patch}:
19.0— Odoo version2.0.0— OpenSPP module version (major.minor.patch)
Third-party dependencies#
OpenSPP includes several OCA (Odoo Community Association) and third-party module sets:
Module set |
Purpose |
|---|---|
|
OCA server UX improvements |
|
OCA server utilities |
|
OCA backend tools |
|
OCA REST framework foundation |
|
Async job queue processing |
|
OpenSPP UI theme (MUK-based) |
|
FastAPI integration for API V2 |
|
Pydantic model extension support |
These are installed automatically by the Docker build and available in the addons path.
openspp.org