Inspections & Audits App Overview
Run quarterly safety, quality, and compliance inspections from a single mobile-first platform — with cycle-driven scheduling, multi-stage review, automated corrective actions, and AI-assisted template generation.
What is the Inspections App?
The Inspections app replaces paper checklists, spreadsheets, and email-driven approvals with a centralized workflow that handles the full lifecycle: cycle activation, in-field inspection capture, supervisor and manager review, returned-for-rework, and locked completion. Inspectors work on mobile (with offline support); supervisors and DC managers approve on desktop or mobile; admins configure templates, workflows, and cycles.
Core Value Proposition:
- 🎯 Cycle-driven scheduling — Quarterly, annual, or monthly cycles trigger notifications and bound inspection records, separate from individual checklists.
- 🔁 Multi-stage review with rework loop — Configurable N-level approval workflow per template. Reject sends the same record back to the inspector for revision.
- 🤖 AI-assisted templates — Generate checklists from natural-language prompts or convert PDFs to inspection templates.
- 📱 Mobile + offline — Inspectors work in the field with photo capture, GPS, signatures, and offline sync.
At a Glance
| ⏱️ Setup Time | 🔗 Integrations | 📱 Mobile Ready | 🤖 AI Built-in |
|---|---|---|---|
| 30 minutes | 5 apps | ✅ Yes | ✅ Yes |
Perfect For:
- 🏢 Distribution centers & warehouses — Quarterly rack inspections with location/aisle scoping and DC-manager sign-off
- 🛡️ Safety officers & compliance teams — OSHA-grade audits with regulatory KB-backed AI guidance
- 🚚 Field service & fleet operations — Vehicle and asset inspections tied to AssetPro categories with barcode scan
How It Works
Quarterly Cycle Lifecycle
┌─────────────────────────────────────────────────────────────────────────┐
│ INSPECTION CYCLE LIFECYCLE │
├─────────────────────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ DRAFT │───▶ │ ACTIVE │───▶ │ COMPLETED │ │
│ │ Admin builds │ │ Notifications │ │ Auto on date │ │
│ │ + audience │ │ fire; queue │ │ or all done │ │
│ └──────────────┘ │ banner shown │ │ (configurable│ │
│ └──────┬────────┘ │ per cycle) │ │
│ │ └──────┬───────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Inspectors │ │ ARCHIVED │ │
│ │ create + run │ │ Read-only │ │
│ │ inspections │ │ history │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
Multi-Stage Review Flow
┌─────────────────────────────────────────────────────────────────────────┐
│ INSPECTION → APPROVAL → COMPLETION │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Inspector Supervisor DC Manager │
│ │ │ │ │
│ in_progress ──submit!──▶ in_review ──approve──▶ in_review ──approve───┤
│ ▲ │ │ │
│ │ ▼ ▼ │
│ └─────reject──── returned-for-rework ◀─────reject─────────────────┘
│ ▲ │
│ │ │
│ completed │
│ (locked) │
└─────────────────────────────────────────────────────────────────────────┘
Integration Ecosystem
┌──────────────────┐
│ INSPECTIONS │
└────────┬─────────┘
│
┌──────────────┬───────────────┼───────────────┬──────────────┐
▼ ▼ ▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
│ Tasks │ │ AssetPro │ │ Training │ │ Forms │ │ Governance│
│ (CAs sync │ │ (asset │ │ (training │ │ (form │ │ (template │
│ to Tasks)│ │ scan + │ │ prereq + │ │ template │ │ staleness │
│ │ │ history) │ │ remed. │ │ alt path) │ │ reviews) │
└───────────┘ └───────────┘ │ assign) │ └───────────┘ └───────────┘
└───────────┘
Key Features
🌟 Inspection Cycles (NEW — Phase 1)
Cycles are the timing/communication trigger that announces “the inspection period is active” — separate from individual inspection records.
| Feature | Description |
|---|---|
| Cycle types | quarterly, annual, monthly, custom (InspectionCycle::CYCLE_TYPES) |
| Audience filter | Configurable per cycle: by user_business role, organizational role, or explicit user list (Inspections::CycleNotificationService) |
| Pivot field | Dashboard groups inspections by location, asset, or inspector (InspectionCycle.pivot_field) |
| Close behavior | Manual / auto-on-end-date / auto-when-all-complete (InspectionCycle.close_behavior) |
| Active cycle banner | Surfaces in My Inspections with one-click “Start Inspection” CTA pre-populated with the cycle’s template |
| Cycle dashboard | Per-pivot progress card (not started, in progress, in review, completed) — admin view |
Use Case: A distribution center company runs Q1, Q2, Q3, Q4 rack inspection cycles. Each cycle activates on its start date, fires email + in-app notifications to maintenance staff at participating DCs, and bounds all rack inspections completed during the window.
💡 Pro Tip: Set
cycle_managed: trueon the inspection template so the location/asset schedulers don’t auto-create duplicate inspection records — the cycle owns the timing.
🔁 Multi-Stage Review Workflow (NEW)
Templates can opt into an N-level review workflow. Without one, inspections complete directly (backward compatible).
| Capability | Where |
|---|---|
| Submit for review | Inspection#submit! (in_progress → in_review, creates ApprovalRequest) |
| Reviewer approve / advance level | Desktop & mobile review card; API POST /review/approve; agent tool |
| Reviewer reject with comment | Comment required; returns inspection to inspector |
| Returned-for-rework | Same record edited and resubmitted (no copy); rejection comment surfaced inline on conduct page |
| Audit trail | metadata['workflow_history'] array + ApprovalAction rows per decision |
| Reviewer eligibility | Role + Location via ApprovalLevel.routing_conditions["location_scope"] |
Use Case: A maintenance technician submits a rack inspection. Their supervisor approves at Level 1 (advancing to Level 2). The DC Manager rejects with “needs photo of beam B3.” The inspector sees the rejection on their My Inspections queue, opens the same inspection, addresses the feedback, resubmits, and the supervisor and DC Manager both approve again — locking the record.
🤖 AI Agent — 26 Tools
The Inspections AI Agent is accessible via Ask AI and supports the full lifecycle:
Read-only tools:
list_inspection_templates,get_inspection_templatelist_inspections,get_inspection,list_due_today_inspections,list_overdue_asset_inspections,list_upcoming_inspectionslist_corrective_actions,get_corrective_action_details,get_compliance_summarylist_inspection_schedules,get_asset_inspection_historylist_inspections_awaiting_my_review,list_active_inspection_cyclesregulatory_qa,analyze_inspection_data
Write tools (require user confirmation):
start_inspection,start_asset_inspection,update_inspection_itemsubmit_inspection,approve_inspection_review,reject_inspection_review_with_commentcreate_corrective_actionai_generate_inspection_template,convert_document_to_template
All write tools are flagged in RISKY_TOOLS and require explicit confirmation before executing.
💡 Pro Tip: Ask “is the quarterly inspection cycle still open?” or “what inspections need my approval?” — the agent answers directly without you opening the app.
📋 Inspection Templates
| Feature | Description |
|---|---|
| Item types | yes_no, checkbox, rating, text, number, slider, datetime, photo, signature, select, multi_select, instruction |
| Weighted scoring | Per-item weight + auto-fail-on-no for critical items |
| Conditional visibility | Items can show/hide based on prior responses (conditions JSONB) |
| Pass threshold | Per-template, default 80% |
| Training prerequisite | Optional required_training_course_ids — inspector must complete training before running the inspection |
| Remediation training | Auto-assigns a remediation_training_course to the inspector when they fail |
| AI generation | Generate full templates from a natural-language prompt |
| PDF import | PdfToTemplateService extracts checklist items from existing PDF forms |
| Approval workflow | Optional belongs_to :approval_workflow — opts the template into multi-stage review |
| Cycle-managed flag | cycle_managed: true — schedulers skip these templates so cycles own the timing |
| Dynamic options | select items can pull options from a query (e.g., aisle list = sub-locations of inspection’s DC) |
🔧 Corrective Actions
| Capability | Source |
|---|---|
| Auto-create on failure | FormIntegrationService.process_completion runs after inspection completes / approves |
| Tasks app sync | Optional — corrective action creates a linked Task if auto_create_corrective_actions is enabled |
| Priority levels | low / medium / high / critical |
| Status workflow | pending / in_progress / completed / cancelled |
| Escalation tracking | escalation_history JSONB on each action |
| Manual creation | Inspector or manager can create CAs ad-hoc; gated by authorize_corrective_action_create |
Mailers: corrective_action_assigned, corrective_action_overdue, corrective_action_completed.
📱 Mobile + Quick Scan
- Mobile views:
index(queue with cycle banner + returned-for-rework + awaiting-my-review sections),show(with reviewer approve/reject card),conduct,templates,my_actions - Quick Scan: Scan an asset barcode/QR to start an asset-tied inspection (
apps/inspections/quick_scan/); requires AssetPro app - Photo capture + annotation: Field-level photo evidence with bounding-box / arrow annotations
- GPS capture: latitude, longitude, accuracy, address, timestamp on each inspection
- Offline-ready metadata:
offline_created,synced_atflags onInspection.metadata
🔗 Integrations
| Integration | Capability |
|---|---|
| Tasks | Auto-creates linked Tasks for failed inspection items via FormIntegrationService |
| AssetPro | Asset-tied inspections, Quick Scan barcode entry, asset condition tracking before/after |
| Training | Prerequisite training course gate; remediation course auto-assigned on failure |
| Forms (MaForms) | Templates can use MaForms::FormTemplate as the field set instead of native item model |
| Governance | Inspections::GovernanceAdapter scans InspectionTemplate for staleness and broken-link reviews |
| Notifications | Cycle start, scheduled inspections, inspection completed, failed alert, overdue, weekly digest, CA assigned/overdue/completed |
📊 Analytics & Reports
Dashboards (apps/inspections/{compliance_dashboard,compliance_by_location,compliance_by_category,compliance_trends,analytics,reports}.html.erb):
- Compliance pass rate (by team, location, category, time)
- Inspector performance report
- Category summary report
- Failed-item heatmap
- Cycle progress board (per pivot field)
AI insights: analyze_inspection_data agent tool — pattern recognition across inspections.
Exports: CSV (list + per-inspection details) and PDF (executive summary + items + photos + signatures + audit trail) via Inspections::CsvExportService and Inspections::PdfExportService.
🔔 Notifications
| Mailer Method | Triggered |
|---|---|
cycle_started |
When Inspections::CycleStarterJob activates a cycle |
inspection_completed |
When an inspection finishes (or final approval lands) |
inspection_failed_alert |
Score below pass threshold |
critical_failure_alert |
Auto-fail-on-no item triggered |
corrective_action_assigned/overdue/completed |
CA lifecycle events |
scheduled_inspections_notification |
Daily summary of newly assigned inspections from schedulers |
scheduled_inspection_reminder |
Pre-due reminder |
overdue_inspection_alert |
Past due_at without completion |
weekly_compliance_summary |
Manager digest |
All notifications use NotificationDelivery.should_notify? for dedup. Cycle reminders fire in phases (mid_cycle, late_week_1..4) — one per audience member per phase.
🤖 Background Jobs
| Job | Schedule | Purpose |
|---|---|---|
Inspections::CycleStarterJob |
Daily 06:15 UTC | Activates due cycles, dispatches notifications, auto-completes per close_behavior |
Inspections::CycleReminderJob |
Daily 14:00 UTC | Sends mid-cycle and late-cycle reminders |
Inspections::AssetInspectionSchedulerJob |
Daily | Generates inspections from AssetPro category schedules |
Inspections::LocationInspectionSchedulerJob |
Daily | Generates inspections from InspectionSchedule records |
Inspections::ProcessCompletionJob |
On-demand | Runs FormIntegrationService after a review-flow inspection completes |
All jobs respect cycle_managed templates — cycle-driven templates aren’t auto-created by the schedulers.
User Roles & Permissions
| Role | Capabilities |
|---|---|
| Maintenance / Inspector | Create + run own inspections; resubmit returned-for-rework; complete corrective actions assigned to them; view their queue with cycle banner |
Supervisor (inspections_supervisor or manager_or_above?) |
Approve / reject Level 1 inspection reviews; view team inspections (location-scoped); manage schedules and templates |
DC Manager (inspections_dc_manager or location-scoped manager) |
Final approval / rejection at Level 2; same team-view as Supervisor |
Inspections Admin (inspections_app_admin?) |
Cross-DC visibility (“All Business Locations” dropdown); manage templates, workflows, cycles, regulatory KB, settings |
| Business Admin | Full access including app config, license toggles, audit |
Role + location scoping is enforced via ApprovalLevel.routing_conditions["location_scope"] and Inspections::TeamScopeService.
How We Compare
How the MangoApps Inspections app stacks up against leading inspection / safety audit platforms:
| Feature | MangoApps Workforce | iAuditor (SafetyCulture) | Veriforce (formerly Lighthouse) | Intelex |
|---|---|---|---|---|
| Cycle-driven inspection periods | ✅ | ⚡ (schedules only) | ⚡ | ✅ |
| Multi-stage approval workflow | ✅ | ⚡ | ✅ | ✅ |
| Returned-for-rework on same record | ✅ | ❌ | ⚡ | ✅ |
| AI-generated templates from prompt | ✅ | ✅ | ❌ | ❌ |
| PDF → template extraction | ✅ | ✅ | ❌ | ❌ |
| Photo annotation in field | ✅ | ✅ | ✅ | ✅ |
| Offline mobile capture | ✅ | ✅ | ✅ | ⚡ |
| Integrated training prerequisites | ✅ | ❌ | ⚡ | ⚡ |
| Auto-task creation for failures | ✅ | ⚡ (paid tier) | ✅ | ✅ |
| Built-in regulatory KB Q&A | ✅ | ❌ | ❌ | ⚡ |
| No per-feature pricing | ✅ | 💰 | 💰 | 💰 |
| Legend: ✅ Included | ❌ Not Available | 💰 Paid Add-on | ⚡ Limited |
Why MangoApps Workforce?
- 🔗 One platform, no integrations to maintain — Inspections, Tasks, Training, AssetPro, and Governance live in the same database
- 🤖 AI is native, not bolted on — Template generation, regulatory Q&A, and pattern analysis use the same Ask AI sidebar your team already uses
- 🏷️ Single license, all features — No per-module add-ons; cycle workflow, AI, mobile offline, analytics included
- 🔄 Generic by design — The cycle + review framework works for racks, fire safety, vehicles, food prep, lab QC — same code, different templates
Getting Started
For Inspectors (Mobile)
- Open
/m/apps/inspectionsfrom your phone - Tap the active cycle banner to start a new inspection (or tap “+ New Inspection” for ad-hoc)
- Pick the location from the dropdown, walk the floor, capture photos, and answer items
- Tap Submit for Review — your inspection routes to the Supervisor automatically
- Watch My Inspections for “Returned for Rework” — address feedback and resubmit
For Supervisors / DC Managers
- Open My Inspections — your “Awaiting My Review” section shows pending items
- Tap an inspection, review items + photos, then Approve or Reject with a comment
- Approved → advances to the next reviewer or completes; rejected → returns to inspector
For Administrators
- Go to Inspections > Settings and enable cycles + AI features
- Build (or AI-generate) the inspection template; set
cycle_managed: trueif cycle-driven - Configure the approval workflow — add Levels with role + location routing
- Create the first cycle: pick template, dates, audience filter, close behavior
- Activate the cycle — notifications fire, queue banners appear for participants
Best Practices
- ✅ Use cycles for recurring inspections — Quarterly racks, annual fire safety, monthly vehicle. Use schedules for ad-hoc recurring drives.
- ✅ Set
cycle_managed: trueon templates that participate in cycles — prevents the schedulers from creating duplicates. - ✅ Configure audience filter narrowly — Use organizational role + location_ids on the cycle, not “all admins” — reduces email fatigue.
- ✅ Require comments on rejection — Built-in. The Reject modal won’t submit without a reason.
- ✅ Use approver_user_ids for the pilot — Explicit user assignment is simpler than role + location for a 2-DC pilot. Promote to
approver_roleswhen scaling. - ✅ Auto-close cycles by date — Set
close_behavior: 'on_end_date'so admins don’t have to remember to mark cycles complete. - ✅ Photo evidence on critical items —
requires_photo: truefor safety-critical checklist items.
Frequently Asked Questions
Q: How is a cycle different from a schedule?
A: A schedule (InspectionSchedule) auto-creates inspection records on a cron — useful when you want a daily forklift check generated automatically. A cycle (InspectionCycle) is a notification + bounding window — it announces the period and provides a queue banner for users to create inspections on demand. Templates marked cycle_managed: true opt into the cycle model and are skipped by schedules.
Q: Can a template have BOTH a workflow and direct-complete?
A: No — a template either has an approval_workflow_id attached (review flow) or it doesn’t (direct-complete on submit). The decision is per-template, not per-inspection. Existing templates without a workflow continue to complete directly.
Q: What happens to corrective actions during the review flow?
A: They’re created when the inspection reaches :completed, not when the inspector submits. For review-flow inspections, that’s after the final reviewer approves. Inspections::ProcessCompletionJob runs the same FormIntegrationService async whether the path was direct-complete or post-approval.
Q: Can I have more than two reviewer levels?
A: Yes — ApprovalWorkflow supports any number of levels. The 2-level (Supervisor → DC Manager) flow is one customer’s seed. A fire-safety customer might use 1 level (Safety Officer); a regulated industry might use 3 (Tech → Compliance → Audit).
Q: How does location scoping work for reviewers?
A: Each ApprovalLevel can set routing_conditions: { "location_scope": "approvable.location_id" }. A user is eligible to review if they’re in the level’s approver_user_ids or have a matching approver_role, AND they’re assigned to the inspection’s location via UserLocation. App-admins (inspections_app_admin?) bypass location scoping for cross-DC visibility.
Related Resources
- Asset Pro App Overview — Pair Inspections with assets for barcode-based inspection start
- Tasks App Overview — Corrective actions auto-create as Tasks
- Forms App Overview — Alternative form template engine for complex inspection types
- Safety Hub App Overview — Incident reports + Inspections together close the safety loop
Inspect with confidence. Review with accountability. Audit with evidence.