| Asset / area | AssetResource (machines are assets with category=Machine) | record | stored: assets (factory_id, category, name, room, contractor_id nullable, gmp_critical bool) | factories / contractors |
| Program | RelationManager on Asset | record | stored: maintenance_programs (asset_id, task, frequency, owner_type internal/contractor, evidence_type) | assets.id |
| Next due | TextColumn::date() red overdue + dashboard widget | derived | last completed log + frequency; overdue GMP rows notify FM + QA | maintenance_logs |
| Evidence | FileUpload / form link on the completion action | media/form | stored: maintenance_logs (done_at, by, photos, cert_ref, result) | — |
| Cleaning log | Dedicated form matching the CTW P21 form | record | fields: date, equipment→asset, type Routine/Changeover/Deep, agent used, start/end, cleaned by→employee, checked by QA/QC, status Clean/Not clean, remarks | assets / users |
| Self-inspection | Program + child checklist (10 areas) | record | areas: raw mat storage, production, packaging, FG warehouse, QC lab, documentation & records, sanitation & hygiene, water system, pest control, calibration & maintenance; findings → CAPA | capas |
| Work order | MaintWorkOrderResource | record | stored: maint_work_orders (asset_id, issue, priority, status, blocks_production bool → flags affected MOs) | assets / mos |
| Report breakdown (slide-over) | CreateAction on MaintWorkOrderResource — Select (asset, optgrouped Machines/Facility/Vehicle), Textarea (issue), ToggleButtons (priority Critical/High/Medium/Low), Radio (take out of service / keep running), FileUpload (photo, optional), Select (reported_by), DateTimePicker (reported_at, default now) | form | writes maint_work_orders (asset_id, issue, priority, status Open, blocks_production derived from schedule, reported_by, media); sets asset status Down when out-of-service chosen | assets / users |
| Compliance profile | Per-factory settings page | config | stored: compliance_profiles (factory_id) → rooms (name, temp_min/max, rh_min/max), checklist templates per room type | factories.id |
| Daily cleaning record | Form: per-room checklist, all items default PASS | record | stored: daily_cleaning_records (room_id, shift AM/PM, items json default-pass, remarks on exceptions only, checked_by, qa_verified_by) | rooms / users |
| Temp/RH record | Form: AM + PM readings per room | record | stored: temp_humidity_records (room_id, time_am/pm, temp_am/pm, rh_am/pm, within_limits AUTO from profile limits) | rooms |
| Pest monitoring (internal) | Form: stations pre-populated, default No Activity | record | stored: pest_monitoring_logs (station_id, activity bool default false, pest_type, qty_est, photo, corrective) — any activity escalates to FM + owner | pest_stations |
| Pest control service (external) | Form per provider visit | record | stored: pest_service_records (provider, technician, areas treated, methods, chemicals + SDS ref, report file) | contractors |
| Pest control plan | Annual document + provider docs checklist | record | stored: pest_control_plans (effective/review dates, activities, provider docs: contract, licences, SDS, training, monthly reports) | contractors |
| Vehicle inspection | Form: weekly 10 checks / monthly +8, default OK | record | stored: vehicle_inspections (vehicle asset_id, type weekly/monthly, odometer, items default OK, remarks on exceptions); road tax / insurance / service-due dates live on the asset and roll into next-due | assets |
| Sanitation log | Form per sanitization event | record | stored: sanitation_logs (area/equipment, type Routine/Deep/Disinfection, agent, dilution, method Wipe/Spray/Fog, performed_by, verified_by) | rooms / assets |