Business Licensing (eBOSS) Reference Public

Research Evidence

The live-file evidence behind the ERPat Business Licensing (eBOSS) guide — the exact module.json, config, controller, job, library and workflow files that were read to write this documentation, and the specific fact each source establishes, so every claim in the guide is traceable to the real code.

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-22 Estimated time: 4 min
Behind the Guide

Research Evidence

This guide is written from the module's actual source, not from a specification or assumptions. This page lists the exact files that were read and what each one establishes, so any statement in the guide can be traced back to the code. If the module changes, re-read these files and update the guide to match.

????
Documentation-only. These docs are static HTML under modules/CityBPLO/docs/. No route serves them and no PHP consumes them — they exist for people, not the runtime. The evidence below is a snapshot for module version 1.0.0.

Manifest & module metadata

File readWhat it establishes
module.jsonSlug bplo, display name "Business Licensing (eBOSS)", version 1.0.0, Government category, available on main + tenant DBs, the feature flags (controllers/models/views/jobs/seeders/APIs/widgets/public pages), the full permission list, and the bplo_* table inventory (migrations_bplo).
README.md, CHANGELOG.mdModule-level metadata rendered in Manage Modules; the 1.0.0 initial-release summary.
config/module_config.phpConfirms module_key = bplo (equals the manifest slug), icon and Government category, route prefix bplo.

Configuration sidecars

File readWhat it establishes
config/menu.php, config/default_menu.phpThe single Business Licensing (eBOSS) sidebar group and its 12 child workspaces (Command Center, Applications, Registry, Owners & Representatives, Rules, Clearances, Assessments, Issuance, Compliance, Reports, Charter, Settings), each gated by its permission.
config/permissions.phpThe complete eBOSS RBAC matrix and its categories — including the four-eyes keys (bplo_rules_activate, bplo_assessments_approve, bplo_payments_reconcile) and bplo_sensitive_view.
config/routes.phpEvery bplo/* route and controller target, incl. the public bplo/verify QR rewrite and the bplo/charter public page.
config/system_logs.phpThe full audit-event catalog (action:component keys) across Registry, Applications, Governance, Clearances, Inspections, Assessment, Payments, Issuance, Lifecycle, Compliance, Portal and Administration, with severities.
config/widgets.phpThe three staff dashboard widgets and their gating (pending applications, expiring permits, SLA breaches).
config/public_pages.phpThe public Citizen's Charter (with CMS sync) and Permit Verification destinations.
config/api_routes.php, config/euapi_routes.phpThe client API (/api/v1/bplo/*, scopes bplo:read/bplo:write) and the read-only self-only end-user API (/v1/api/me/bplo/{assignments,inspections}).

Controllers

File readWhat it establishes
controllers/Bplo_issuance.phpThe gate → generate → sign → issue → release pipeline; race-safe permit numbering; void-on-failed-render; reprint re-serves the stored PDF; suspend/reinstate/revoke/supersede; the authorized-e-sign v1 record with the PNPKI seam left open.
controllers/Bplo_assessments.phpAssessment DRAFT → FOR_APPROVAL → APPROVED (immutable); supersede-not-edit; approver ≠ preparer + dual-approval threshold; fee-set four-eyes activation (author ≠ activator) with single-active-per-code; the pure Test Calc.
controllers/Bplo_payments.phpPayment reference lifecycle; reconcile posts a summarized GL entry to Finance (cash debit + revenue credits per accounting code), idempotent and deferred if Finance is off; reverse mirrors it and reopens the bill; settlement advances the application to PAID.
controllers/Bplo_verify.phpSessionless public verification via the permit QR's company_key; derived, revocation-aware status; PII-free result; deliberately not gated on the module toggle.
controllers/Bplo_settings.phpThe exact settings keys (LGU profile, permit year, app-reference format, SLA targets, deficiency pause) and the read-only number-series viewer.
controllers/Bplo_applications.phpThe application workspace tabs (overview, requirements, deficiencies, assignments, holds, timeline, lifecycle) and the renewal/amendment/retirement lifecycle actions.
controllers/Bplo_portal.php, controllers/Bplo_claims.phpThe customer owner-portal scope choke-point (404-not-403, masked fields) and the staff claim-approval flow that binds a party to a business.

Jobs, libraries & workflow

File readWhat it establishes
jobs/SlaSweepJob.phpSlug bplo_sla_sweep, daily 01:15; flags breached SLA clocks and emails compliance officers; per-tenant, idempotent, bounded.
jobs/RenewalReminderJob.phpSlug bplo_renewal_reminder, daily 01:30; digests permits expiring within bplo_renewal_reminder_days (default 30); read-only.
jobs/PermitExpirySweepJob.phpSlug bplo_permit_expiry_sweep, daily 01:45; digests lapsed permits; read-only — never mutates permit status (expiry is derived).
jobs/ComplianceObligationSweepJob.phpSlug bplo_compliance_obligation_sweep, daily 02:00; generates annual-renewal obligations, flags overdue, spawns recurrences — all idempotent.
libraries/Bplo_issuance_gate.phpThe exact issuance-gate criteria: blocking requirements, unresolved/external-unverified clearances, non-compliant inspections, approved assessment, settled bill, active hold, valid signatory.
src/Workflow/StateMaps.phpThe authoritative transition whitelists for application (New/Renewal/Amendment + Retirement), clearance, inspection and permit — the source for the state lifecycles.

Full module inventory (observed)

For completeness, the module directory also contains — confirming the manifest's feature flags:

21
controllers
56
models
11
libraries
4
cron jobs
3
helpers
3
dashboard widgets

Plus the two API controllers (Bplo_api, Bplo_euapi), the module helpers (bplo_helper, bplo_notify_helper, bplo_widget_helper), the pure fee/gate/state src/ classes, the demo seeder, and this docs/ guide. Everything the feature needs lives under modules/CityBPLO/ and loads through ERPat's HMVC compatibility layer.

????
Keeping this honest. When you change a controller, job, permission, setting or state map, update the matching guide page and note the change in the module's CHANGELOG.md. The guide's value is that every claim maps to a real file listed above.
Was this guide helpful?

Report a content problem