The Business Situation

This representative case study follows a 145-person precision components manufacturer operating two production sites. The business records approximately 35 safety events each month, including near misses, unsafe conditions, minor injuries, equipment-related events, and environmental concerns.

The Quality department owns the safety event process. Two site safety coordinators conduct triage, six Operations supervisors contribute to investigations, the Quality manager approves corrective action plans, and an HR safety liaison manages restricted injury information. An Operations director participates in approval and escalation for high-severity events.

Employees previously reported events through telephone calls, direct messages, email, and conversations with supervisors. A Quality coordinator copied available details into an Excel workbook and followed up for photographs, witness information, action owners, and completion evidence.

This process created delays at the point where speed mattered most. Quality could not rely on receiving immediate notice of a serious event, Operations could not see a consistent action queue, and HR sometimes received injury information after investigation work had already started.

Note: This case study is provided as a representative example of the types of AI integration and digital transformation solutions Intelligex designs and delivers. Actual engagements are tailored to each client’s goals, constraints, existing systems, timeline, and available resources, so the approach, tools, and outcomes may vary.

The business already used Microsoft 365, so the implementation retained that environment. The proposed system connected Microsoft Forms, Microsoft Lists, Power Automate, SharePoint, Microsoft 365 Approvals, and Outlook notifications. Optional AI summarization was considered only after the rule-based workflow was stable.

The Existing Process

The original process usually followed this sequence:

  1. An employee reported an event to a supervisor by telephone, message, email, or conversation.
  2. The supervisor decided whether to contact Quality immediately.
  3. A Quality coordinator asked for the event time, location, people involved, injury details, photographs, and witness information.
  4. The coordinator created or updated a row in a shared Excel workbook.
  5. Photographs and documents were saved in email, chat, local folders, or a shared drive.
  6. A safety coordinator assigned the investigation through email.
  7. The investigator documented findings in a Word document or email thread.
  8. Corrective actions were added to the spreadsheet, often as free text in a single cell.
  9. Quality sent manual reminders to action owners.
  10. The Quality manager reviewed the event and supporting evidence before marking the spreadsheet row closed.

Information and ownership problems

  • Reports arrived in different formats.
  • Required fields were frequently missing.
  • The same event could be entered more than once.
  • Action owners were sometimes named only in free text.
  • Injury information was mixed with general operational notes.
  • Supervisors could not reliably see what was awaiting their action.

Control and reporting problems

  • There was no dependable alert for every urgent event.
  • Files were stored separately from the incident record.
  • Approval evidence remained in email.
  • Spreadsheet changes did not provide a complete workflow history.
  • Overdue actions required manual reconciliation.
  • Monthly reporting required cleaning and restructuring data.

These problems had practical consequences. Missing information delayed investigation, unclear ownership increased follow-up work, and disconnected files made it difficult to demonstrate why an event was closed. Restricted employee information was also harder to govern when it appeared in email threads and general-purpose folders.

The process depended heavily on one Quality coordinator knowing where records and messages were stored. When that employee was unavailable, other staff had difficulty reconstructing the current state of an investigation.

What the New System Needed to Do

The team documented the business and technical requirements before selecting the final design.

Required capabilities for the safety event workflow
Requirement Required behavior Control objective
Structured intake Capture the event time, site, area, category, narrative, immediate danger, injury indicator, witnesses, and photographs. Reduce missing and inconsistent information.
Immediate alerting Notify defined safety and operations roles when immediate danger, medical attention, high severity, or critical severity is reported. Reduce reliance on an employee manually forwarding a message.
Controlled record Create one incident record with a unique identifier and version history. Establish an authoritative system of record.
Privacy separation Keep detailed injury and employee information in a restricted list. Limit access to sensitive information.
Investigation routing Assign the correct safety coordinator using the reported site and maintain a named owner. Make ownership visible and measurable.
Corrective actions Store each action as a separate child record with an owner, due date, status, and evidence. Prevent multiple actions from being hidden in one text field.
Approvals Route action plans and final closure to the appropriate human approvers. Retain approval decisions and comments.
Regulatory review Allow qualified staff to identify a possible reporting obligation, set a deadline, and record the external reference. Avoid using automation to make legal or regulatory conclusions.
Evidence management Create a controlled SharePoint folder and connect evidence to the incident record. Retain photographs, investigation files, and completion evidence together.
Reminders and escalation Remind owners before due dates and escalate overdue actions. Reduce manual follow-up.
Operational reporting Provide views for open incidents, overdue actions, regulatory reviews, manual exceptions, and automation failures. Support daily management and periodic reporting.
Exception handling Mark failed records, retain error details, and provide a controlled retry process. Prevent silent automation failures.
Manual control Allow authorized staff to reassign, return, reject, reopen, or correct a record. Ensure workflow rules do not replace professional judgment.

The form also needed to state that it was not a substitute for calling the site emergency number or initiating an emergency stop. A digital workflow can improve notification, but it must not delay immediate safety action.

Implementation Approaches Considered

Implementation options evaluated
Approach Connected tools Effort Customization Main limitation
Improve the spreadsheet process Excel, email, shared folders Low Low Weak routing, permissions, record relationships, and failure monitoring.
Microsoft 365 workflow Forms, Lists, Power Automate, SharePoint, Outlook, Approvals Moderate Moderate to high Requires disciplined configuration and ongoing ownership.
No-code database External form, no-code database, automation platform, cloud storage Moderate High Adds another data platform, permission model, and vendor relationship.
Dedicated environment, health, and safety platform Specialist safety application and Microsoft 365 integrations Moderate to high Varies by product Higher procurement effort and potentially more functionality than the initial use case required.
Custom application Custom web application, database, identity platform, storage, APIs High Very high Requires application development, security engineering, support, and release management.

Improved spreadsheet process

Standardizing the workbook and creating email templates would have reduced some variation, but it would not have provided reliable intake validation, controlled child action records, structured approvals, or dependable workflow monitoring.

Microsoft 365 workflow

This approach used services already familiar to employees. Microsoft Lists could represent incidents and corrective actions as related records, Power Automate could orchestrate routing and approvals, and SharePoint could retain evidence with version history and permissions.

No-code database

A no-code database could provide a strong user interface and relational structure. It was less suitable for this scenario because the business wanted to keep identity, documents, and sensitive records within its established Microsoft 365 governance boundary.

Dedicated safety software

A specialist safety platform would become appropriate if the manufacturer required broader environmental, health, audit, training, permit, inspection, and regulatory functions. For the current volume and scope, procurement and migration effort were difficult to justify without first proving the workflow requirements.

Custom application

A custom application offered the greatest flexibility but introduced unnecessary development and support responsibilities. The required workflow could be implemented with native Microsoft 365 components and standard connectors.

The Selected Solution

The selected design used a restricted SharePoint team site as the security and document boundary. Microsoft Lists provided the operational records within that site, while Power Automate connected the form, lists, approvals, files, and notifications.

Selected tools and their responsibilities
Tool Responsibility Important control
Microsoft Forms Employee intake for safety events and initial photographs. Organization-only responses, required fields, branching, and a privacy notice.
Microsoft Lists System of record for incidents, corrective actions, routing, injury details, and workflow logs. Unique submission keys, controlled choices, indexed fields, version history, and restricted lists.
Power Automate Record creation, routing, alerts, approvals, reminders, escalation, file movement, logging, and recovery. Named owners, environment separation, scope-based failure handling, and idempotency checks.
SharePoint Site security, evidence library, list storage, versioning, retention, and operational pages. Restricted membership, controlled links, version history, and retention aligned with policy.
Microsoft 365 Approvals Human approval of action plans and incident closure. Approval IDs, outcomes, comments, and response dates copied into the workflow log.
Outlook Urgent alerts, assignments, reminders, escalations, and failure notifications. Messages sent from an approved shared mailbox or controlled automation identity.
Microsoft Lists views and SharePoint pages Operational reporting for current status, ownership, overdue work, and failures. Reports use the controlled lists rather than copied spreadsheets.
Optional Azure OpenAI service Draft an incident narrative summary and identify potentially missing information. Restricted data exclusion, structured output validation, and mandatory human review.

The business retained Microsoft 365 identity, SharePoint, and Outlook. The shared Excel incident register was retired after migration and retained as a read-only historical file according to the organization’s retention policy.

Manual re-entry, routine routing emails, standard reminders, folder creation, and approval tracking were removed. Human staff continued to control severity confirmation, root-cause findings, regulatory classification, action-plan acceptance, injury decisions, and final closure.

System Architecture and Data Flow

The architecture separated intake, operational records, restricted injury details, action tracking, evidence, and workflow history. Power Automate acted as the orchestration layer rather than the permanent system of record.

  1. Submission: An employee submits Microsoft Forms data. The trigger receives the response ID and form ID. Power Automate retrieves the full response and creates a submission key. If the key already exists, the flow records a duplicate event and stops without creating a second incident.
  2. Incident creation: Power Automate validates required values and creates a Microsoft Lists item with the temporary status Intake Processing. SharePoint returns its numeric item ID.
  3. Controlled identifier: The flow converts the SharePoint item ID into an incident identifier such as INC-2026-000418 and writes it back to the list.
  4. Restricted injury record: If injury is reported, the flow writes employee and injury details to the restricted Injury Details list. The general incident record receives only an injury indicator and the restricted record ID.
  5. Evidence folder: Power Automate creates a folder in the Safety Evidence library using the incident ID. Uploaded photographs are copied from the Forms upload location into the controlled folder.
  6. Routing: The flow reads the location routing list, assigns the site safety coordinator, calculates the internal triage target, and stores the routing version used.
  7. Alerting: Immediate danger, urgent medical attention, High, or Critical selections create an urgent Outlook alert. The alert does not make a final severity or regulatory determination.
  8. Investigation: The assigned coordinator confirms severity, records investigation findings, and creates one Corrective Actions item for each required action.
  9. Approval: The Quality manager reviews the investigation and action plan. High or Critical records then route to the Operations director and HR safety liaison when applicable.
  10. Action tracking: A scheduled flow sends reminders, escalates overdue actions, and moves the incident to verification only when all required action records are complete.
  11. Closure: Quality verifies evidence and submits the incident for closure approval. The flow records the approval response, closure date, and processing time.
  12. Failure path: Any failed or timed-out stage updates AutomationStatus, increments RetryCount, records a concise error, and places the item in a manual-review view.
  • Intake: Microsoft Forms group-owned safety event form.
  • System of record: Microsoft Lists stored in a restricted SharePoint site.
  • Automation layer: Power Automate cloud flows using standard Microsoft 365 connections.
  • Document storage: A SharePoint Safety Evidence library organized by incident ID.
  • Notifications: Outlook email and Microsoft 365 approval notifications.
  • Reporting: Microsoft Lists views displayed on controlled SharePoint pages.
  • AI layer: Optional tenant-approved Azure OpenAI deployment for draft summaries after redaction and human request.

Data Structure

The implementation used related lists instead of storing an investigation and all corrective actions in one record. The SharePoint numeric item ID served as the stable technical key. The formatted incident ID served as the business-facing identifier.

Safety Incidents list

Core incident fields
Field Type Required Source or values Purpose
IncidentID Single line text, unique After creation Automation generated Business identifier such as INC-2026-000418.
ExternalSubmissionKey Single line text, unique Yes Form ID and response ID Prevents duplicate creation from repeated trigger events.
FormsResponseID Single line text Yes Microsoft Forms Supports source reconciliation.
Created and Modified System date and time Yes SharePoint Provides system timestamps and version history.
ReporterName Single line text Yes Forms responder identity Identifies the submitting employee within the restricted site.
ReporterEmail Single line text Yes Forms responder identity Supports confirmation and clarification.
EventDateTime Date and time Yes Form Records when the event occurred, not when it was submitted.
LocationCode Choice or lookup Yes Plant 1, Plant 2, Other Controlled Area Determines routing and reporting.
ExactArea Single line text Yes Form Identifies the work area, line, room, or external site.
EventType Choice Yes Near Miss, Unsafe Condition, Injury, Equipment, Environmental, Other Supports triage and reporting.
EventNarrative Multiple lines Yes Form Captures what happened and immediate actions taken.
ImmediateDanger Yes or No Yes Form Controls urgent alerting.
InjuryFlag Yes or No Yes Form Indicates whether a restricted injury record is required.
RestrictedInjuryRecordID Number Conditional Automation Links to the restricted record without exposing its details.
PreliminarySeverity Choice Yes Low, Medium, High, Critical Reporter or supervisor indication used for alerting only.
ConfirmedSeverity Choice During triage Low, Medium, High, Critical Human-confirmed operational severity.
Owner Person Yes Routing matrix or reassignment Names the current accountable coordinator.
Status Choice Yes Controlled workflow statuses Shows the incident lifecycle stage.
ApprovalStatus Choice Yes Not Requested, Pending, Approved, Rejected, Expired, Cancelled Separates approval state from investigation status.
TriageDue Date and time Yes Automation Internal response target based on reported severity.
InvestigationDue Date and time During triage Safety coordinator Controls investigation reminders.
RegulatoryReviewRequired Choice Yes Not Assessed, Yes, No Records a qualified human determination.
RegulatoryDue Date and time Conditional Quality or HR Tracks a confirmed external reporting deadline.
RegulatoryReference Single line text Conditional Authorized user Stores a submission or case reference after filing.
EvidenceFolderURL Hyperlink Yes Automation Connects the record to controlled evidence.
DuplicateOf Lookup to Safety Incidents No Safety coordinator Links a duplicate report to the retained incident.
AutomationStatus Choice Yes Pending, Running, Succeeded, Failed, Retry Requested, Manual Review Supports monitoring and recovery.
LastAutomationRun Date and time No Automation Shows the latest processing attempt.
RetryCount Number Yes Automation, default 0 Limits uncontrolled reprocessing.
ErrorMessage Multiple lines No Automation Stores a sanitized operational error.
ClosureDate Date and time No Automation Records approved closure.
ProcessingTimeHours Number No Automation Supports cycle-time reporting.
Notes Multiple lines No Authorized users Stores controlled operational notes not held elsewhere.

Restricted Injury Details list

This list used separate list-level permissions. Only designated HR and Quality roles could access it.

Restricted injury fields
Field Type Required Purpose
Incident Lookup to Safety Incidents, unique Yes Creates a one-to-one relationship with the incident.
PersonInvolved Person or single line text Yes Identifies the affected employee or contractor.
InjuryDescription Multiple lines Yes Stores the minimum necessary injury information.
MedicalAttention Choice Yes None, First Aid, External Assessment, Emergency Response, Unknown.
WorkStatus Choice No Unknown, Returned, Restricted, Absent, Not Applicable.
HRReviewStatus Choice Yes Pending, In Review, Complete, Returned.
LastReviewedBy Person No Provides accountability for restricted review.

Corrective Actions list

Corrective action fields
Field Type Required Purpose
ActionID Single line text, unique After creation Creates an identifier such as INC-2026-000418-A03.
Incident Lookup to Safety Incidents Yes Creates a one-to-many relationship.
ActionDescription Multiple lines Yes Defines a specific, verifiable action.
ActionType Choice Yes Containment, Corrective, Preventive, Training, Engineering, Procedure.
Owner Person Yes Names the employee accountable for completion.
DueDate Date and time Yes Controls reminders and escalation.
Status Choice Yes Draft, Open, In Progress, Completed, Verification Required, Verified, Rejected, Cancelled.
CompletionNotes Multiple lines Conditional Explains what was completed.
EvidenceURL Hyperlink Conditional Links completion evidence in SharePoint.
VerifiedBy Person Conditional Records independent verification.
VerifiedDate Date and time Conditional Records when verification occurred.
EscalationLevel Number Yes Tracks reminder and escalation state.
LastReminderDate Date and time No Prevents repeated reminders on the same schedule.

Supporting lists and relationships

  • Routing Matrix: One active row per location containing the safety coordinator, backup coordinator, Operations manager, HR contact, and routing version.
  • Workflow Log: One-to-many entries linked to an incident, with event type, timestamp, actor, flow run ID, approval ID, outcome, comments, and sanitized details.
  • Safety Evidence library: One folder per incident with metadata for IncidentID, EvidenceType, Restricted, SourceFileID, and CapturedDate.

Indexes were added to IncidentID, ExternalSubmissionKey, Status, Owner, LocationCode, AutomationStatus, DueDate, and the incident lookup on child lists. Unique-value enforcement was enabled for ExternalSubmissionKey, IncidentID, ActionID, and the injury list’s incident relationship.

Workflow Statuses and Ownership

Incident workflow statuses
Status Meaning and owner Entry condition Exit condition Reminder or escalation
Intake Processing Automation is validating the response and creating records. Valid Forms response received. Required records and folder created, or processing fails. Failure creates a manual-review item immediately.
New Safety coordinator owns initial triage. Intake completed. Coordinator accepts and starts triage. Reminder follows the calculated TriageDue value.
Triage Safety coordinator confirms severity, scope, and investigation owner. New event accepted. Required triage fields are complete. Overdue triage escalates to the Quality manager.
Investigation Assigned investigator records facts, causal analysis, and proposed actions. Triage completed. Investigation and required action drafts are complete. Reminder follows InvestigationDue.
Awaiting Action Plan Approval Quality manager reviews the investigation and action plan. Investigator submits the plan. Approved, rejected, or returned for information. Reminders at 24 and 48 hours, escalation at 72 hours.
Actions Open Each corrective action owner is responsible for assigned work. Action plan approved. All required actions reach Verified or an approved Cancelled state. Pre-due reminders and overdue escalation run daily.
Verification Safety coordinator checks completion evidence and effectiveness. All action owners mark their actions complete. Actions are verified or returned to their owners. Unverified items remain visible in the verification queue.
Awaiting Closure Approval Quality manager controls final closure. All actions verified and regulatory review complete. Closure approved or returned. Approval reminders follow the same controlled schedule.
Returned for Information Previous owner must correct missing or rejected information. Approver or verifier rejects the submitted material. Owner resubmits to the prior workflow stage. Return comments are mandatory and retained.
Closed No active owner, but Quality retains record stewardship. Final closure approved. Reopened only by an authorized Quality manager. No routine reminders.
Duplicate Quality links the report to the retained incident. Human confirms that two submissions describe the same event. Normally terminal unless the decision is reversed. No action reminders are sent from the duplicate record.

Automation could move a record only when required fields and child records met defined conditions. It could not confirm severity, determine root cause, decide regulatory reportability, accept a corrective action as effective, or approve final closure.

Step-by-Step Implementation

Step 1: Prepare the Accounts and Permissions

  1. Create separate test and production SharePoint sites. Use a naming convention such as Safety Case Management - Test and Safety Case Management.
  2. Confirm that the Microsoft 365 tenant provides the required Forms, SharePoint, Microsoft Lists, Power Automate, Outlook, and Approvals capabilities. Licensing and connector availability should be verified for the specific tenant rather than assumed from a plan name.
  3. Create a group-owned Microsoft Form so ownership does not depend on one employee account. Restrict form ownership to the Safety System Owners group.
  4. Create security groups for Safety System Owners, Safety Case Managers, Site Investigators, HR Restricted Reviewers, Action Owners, and Reporting Readers.
  5. Give Safety System Owners full control over the site and flows. Give Safety Case Managers edit access to the incident, action, routing, log, and evidence resources.
  6. Give HR Restricted Reviewers access to the injury list. Do not grant Site Investigators access to that list unless their job requires it.
  7. Limit Routing Matrix editing to system owners. Investigators may read the active routing information but should not change assignment rules.
  8. Create a shared mailbox or approved sender identity represented by YOUR_SAFETY_SHARED_MAILBOX. Grant only the automation connection and designated safety administrators permission to send from it.
  9. Use organization-managed Power Automate connections. If tenant policy permits a dedicated automation account, protect it with multifactor authentication, conditional access, monitored ownership, and a documented backup owner.
  10. Create two test users: one standard employee submitter and one site investigator. Create separate test approver accounts or use approved staff who understand that test notifications are not operational events.
  11. Document production and test resource identifiers, including YOUR_FORM_ID, YOUR_SITE_URL, list names, library paths, and mailbox address. Store the document in an administrator-only location.

The flows should have at least two co-owners. Departing employees must not be the sole owners of forms, connections, or production flows.

Step 2: Build the Intake

Create a group-owned Microsoft Form named Safety Incident Report. Restrict responses to authenticated employees if responder identity and file upload are required. Configure the form so the employee’s identity is available to the flow.

Microsoft Forms intake fields
Field Input type Required Validation or branching
Event date Date Yes Require a valid date. Future dates are flagged by the flow.
Event time Time or short text Yes Use a documented 24-hour format if a native time input is unavailable.
Site Choice Yes Plant 1, Plant 2, Other Controlled Area.
Exact area Short text Yes Minimum practical description such as line, room, or work cell.
Event type Choice Yes Near Miss, Unsafe Condition, Injury, Equipment, Environmental, Other.
What happened? Long text Yes Ask for observable facts and immediate actions, not speculation or blame.
Is there an immediate danger? Choice Yes Yes or No. A Yes response creates an urgent alert.
Was anyone injured? Choice Yes Yes, No, or Unknown. Yes and Unknown open injury-related questions.
Person involved Short text Conditional Collect only the minimum identity needed for follow-up.
Injury description Long text Conditional Do not request diagnosis or unrelated medical history.
Medical attention Choice Conditional None, First Aid, External Assessment, Emergency Response, Unknown.
Preliminary severity Choice Yes Low, Medium, High, Critical. Explain that Quality confirms the final operational level.
Witness information Long text No Request names or work contact details only.
Photographs or supporting files File upload No Accept only business-relevant formats permitted by tenant policy.
Do uploaded files show an identifiable person or injury? Choice Conditional Yes, No, or Unsure. Treat Yes and Unsure as restricted.
Supervisor notified Choice Yes Yes, No, or Not Available.

Place a notice at the beginning of the form:

If there is immediate danger, injury requiring urgent assistance, fire, spill, or another emergency, follow the site emergency procedure first. Submitting this form does not replace calling the emergency contact, alerting a supervisor, or stopping unsafe work where authorized.

Place a privacy notice before the submit action. Explain who can access the report, why employee and injury information is collected, how long it is retained, and where employees can ask privacy questions.

Microsoft Forms does not trigger the flow until a response is submitted. An abandoned or incomplete form therefore creates no controlled record. Required fields reduce incomplete submissions, but employees still need an alternative reporting channel for accessibility, connectivity failure, or emergencies.

Duplicate prevention has two levels. The technical level uses the unique Forms response ID. The business level allows a safety coordinator to mark two distinct employee submissions as reports of the same event and link one to the retained incident.

For spam prevention, restrict the form to authenticated organization users. If external contractor reporting is required later, create a separate controlled intake with additional validation rather than weakening the employee form.

Submit one test response with a photograph. In the SharePoint document library associated with the group form, locate the actual upload path. It commonly follows a folder structure for Microsoft Forms, the form name, and the upload question, but the production flow should use the path observed in that tenant.

Step 3: Create the System of Record

  1. Create the Safety Incidents list using simple initial column names such as IncidentID and ExternalSubmissionKey. This keeps SharePoint internal names predictable even if display names are changed later.
  2. Disable list attachments. Evidence must be stored in the controlled library so file management follows one process.
  3. Enable version history and configure retention according to the organization’s legal, regulatory, insurance, employment, and privacy requirements.
  4. Set ExternalSubmissionKey to enforce unique values. SharePoint creates an index when unique-value enforcement is enabled.
  5. Create the Restricted Injury Details list and remove inherited access that is not required. Grant access only to the approved Quality and HR groups.
  6. Create Corrective Actions with a required lookup to Safety Incidents. Configure delete behavior to prevent accidental removal of a parent incident while child actions exist.
  7. Create Workflow Log with a lookup to Safety Incidents. Users should not edit log entries after creation except through a documented administrator correction process.
  8. Create Routing Matrix with one active row for each site. Add EffectiveFrom, EffectiveTo, and RoutingVersion so the system can retain which rule was applied.
  9. Create the Safety Evidence library. Add metadata columns for IncidentID, EvidenceType, Restricted, SourceFileID, and CapturedDate.
  10. Create indexes on fields used by flow filters and operational views.

The formatted incident ID cannot be generated until SharePoint returns the numeric list item ID. The intake flow therefore creates the item first and then updates it using this expression:

concat(
  'INC-',
  formatDateTime(utcNow(),'yyyy'),
  '-',
  padLeft(string(outputs('Create_incident')?['body/ID']),6,'0')
)

For corrective actions, create the action item first and use its list ID to produce a unique suffix:

concat(
  outputs('Get_incident')?['body/IncidentID'],
  '-A',
  padLeft(string(outputs('Create_corrective_action')?['body/ID']),2,'0')
)

Create filtered views for each major role. Views improve usability but are not security boundaries. Sensitive information must be protected with site, library, and list permissions.

Step 4: Connect the Tools

Tool connections and field movement
Source Destination Trigger and authentication Mapping and returned identifier Failure behavior
Microsoft Forms Power Automate New response trigger using an organization Microsoft 365 connection. Response ID is passed to the response-detail action. Failed retrieval remains visible in flow monitoring and sends an administrator alert.
Power Automate Safety Incidents Create item after validation using the SharePoint connection. Form fields map to list columns. SharePoint returns the numeric item ID. Unique submission key prevents a second record from being committed.
Power Automate Restricted Injury Details Conditional create when injury is Yes or Unknown. Person and injury responses map to restricted fields. The returned item ID is stored on the incident. Incident remains in Intake Processing until the restricted write succeeds or enters manual review.
Forms upload folder Safety Evidence library For each uploaded file, read content from the group form’s SharePoint path. File receives an incident-prefixed name and metadata. The destination folder URL is stored on the incident. Failed copies are logged individually and the incident cannot silently complete intake.
Routing Matrix Safety Incidents Query active row matching LocationCode. Coordinator, backup, manager, HR contact, and routing version are copied to the workflow context. No match sets Manual Review and alerts the system owner.
Safety Incidents Outlook and Approvals Status or severity conditions initiate notifications. Incident ID, location, owner, due date, and controlled record link are sent. Notification failure is logged without deleting or rolling back the incident.
Corrective Actions Safety Incidents Created or modified action trigger. Action state is aggregated to determine whether verification can begin. Invalid transitions enter manual review and do not close the parent.

Connections use Microsoft 365 OAuth authentication managed by the tenant. Credentials are never placed in expressions, list columns, email bodies, or flow descriptions.

Step 5: Build the Core Automation

Automation 1: Form intake and controlled record creation

  • Trigger: Microsoft Forms receives a new response.
  • Conditions: Response ID exists, the site is allowed, required answers are present, and the submission key is not already stored.
  • Actions: Get response details, validate values, create incident, generate incident ID, create restricted injury record when needed, create evidence folder, copy files, read routing, update status, send confirmation, and write the workflow log.
  • Fields updated: IncidentID, FormsResponseID, owner, due dates, restricted record ID, evidence URL, status, routing version, and automation fields.
  • Notification: Employee confirmation, owner assignment, and urgent role alerts when the rule is met.
  • Exception: Set Manual Review, increment RetryCount, record a sanitized error, and alert the automation support owner.

The exact action order is:

  1. Receive the Forms response ID.
  2. Retrieve response details.
  3. Compose ExternalSubmissionKey.
  4. Query Safety Incidents for that key.
  5. Terminate successfully if a completed incident already exists.
  6. Validate site, date, severity, injury, and danger values.
  7. Create the incident with Status = Intake Processing and AutomationStatus = Running.
  8. Generate and save IncidentID.
  9. Create the restricted injury item if required and save its returned ID.
  10. Create the evidence folder.
  11. Parse the uploaded-file array and copy each file.
  12. Query Routing Matrix for one active matching row.
  13. Assign the owner and calculate TriageDue.
  14. Send urgent alerts if the deterministic alert condition is true.
  15. Update IntakeComplete = Yes, Status = New, and AutomationStatus = Succeeded.
  16. Create a Workflow Log entry and send the reporter confirmation.

Automation 2: Triage routing

  • Trigger: A Safety Incidents item is created or modified with IntakeComplete set to Yes, Status equal to New, and TriageRouted equal to No.
  • Conditions: Owner is populated and the routing row is active.
  • Actions: Mark TriageRouted, notify the owner, and create a log entry.
  • Fields updated: TriageRouted, LastAutomationRun, AutomationStatus.
  • Notification: Assignment email containing the controlled incident link and internal target.
  • Exception: Missing owner or routing rule sends the incident to Manual Review.

Automation 3: Investigation submission

  • Trigger: Investigator sets SubmitActionPlan = Yes.
  • Conditions: ConfirmedSeverity, investigation summary, owner, InvestigationDue, and regulatory assessment are complete. Required actions exist unless a no-action rationale is approved.
  • Actions: Validate child actions, lock the draft submission fields, update status, and start action-plan approval.
  • Fields updated: Status, ApprovalStatus, ApprovalRequestedDate, PlanVersion.
  • Notification: Quality manager receives an approval request.
  • Exception: Missing fields return the item to the investigator with a list of validation failures.

Automation 4: Corrective action monitoring

  • Trigger: Corrective action created or modified, plus a daily scheduled flow.
  • Conditions: Action has an owner, due date, valid status, and related incident.
  • Actions: Generate ActionID, send assignment, schedule reminders, update escalation level, and aggregate child status.
  • Fields updated: ActionID, LastReminderDate, EscalationLevel, parent incident status when all actions reach the required state.
  • Notification: Assignment, upcoming due date, overdue notice, and manager escalation.
  • Exception: An invalid owner or missing parent moves the action to the exception view.

Automation 5: Closure

  • Trigger: Safety coordinator sets SubmitForClosure = Yes.
  • Conditions: All required actions are Verified, regulatory review is complete, required evidence exists, and no unresolved exception remains.
  • Actions: Start closure approval, capture response, update closure fields, calculate processing time, and write the log.
  • Fields updated: ApprovalStatus, Status, ClosureDate, ProcessingTimeHours, LastAutomationRun.
  • Notification: Investigator, action owners, reporter when appropriate, and Quality receive closure confirmation.
  • Exception: Rejection returns the incident for information and preserves the approver’s comments.

Trigger conditions and processing flags prevent the flows from repeatedly responding to their own list updates. The unique submission key and unique action identifiers provide a second idempotency layer.

Step 6: Add Approvals, Reminders, and Escalations

The action-plan approval used a sequential and conditional structure:

  1. The Quality manager receives the first approval.
  2. If the Quality manager rejects it, the incident moves to Returned for Information. No later approval is created.
  3. If the Quality manager approves a Low or Medium event with no injury, the action plan becomes approved.
  4. If severity is High or Critical, the flow creates a second approval requiring responses from the Operations director and Quality manager’s designated senior backup where policy requires.
  5. If injury information is involved, the HR safety liaison receives a parallel review focused on restricted employment and injury controls.
  6. Only after all required human responses are approved does the incident move to Actions Open.

The final closure approval uses similar logic, but the approval details include verified actions, evidence links, investigation findings, and regulatory review state.

Reminder and escalation rules
Item Reminder Escalation Automatic decision prohibited
New incident triage At 50 percent of the internal target if still New. At target expiry to Quality manager and backup coordinator. No automatic severity confirmation.
Investigation Two calendar days before InvestigationDue, then on the due date. Daily after overdue, with manager escalation after two days. No automatic investigation completion.
Action-plan approval After 24 and 48 hours. After 72 hours to the documented backup approver. No automatic approval or rejection.
Corrective action Seven and two days before due date where enough lead time exists. On overdue day one, then to the owner’s manager after two days. No automatic verification.
Regulatory review At configured intervals based on the human-entered due date. To Quality leadership and HR according to policy. No automatic legal classification or submission.

Unavailable approvers are handled through a maintained delegation record. If an approval has already been created for an unavailable person, the system owner cancels it, records the reason, updates the designated approver, and launches a replacement. The flow never treats elapsed time as approval.

Every approval writes the approval ID, assigned users, requested date, outcome, response date, and comments to Workflow Log. This preserves business evidence outside transient flow run history.

Step 7: Add Documents and File Management

Create a library named Safety Evidence. Use a folder for each incident:

Safety Evidence/
  INC-2026-000418/
    Intake/
    Investigation/
    Corrective Actions/
    Regulatory/
    Closure/

Power Automate creates the incident folder and the Intake subfolder during initial processing. Other folders may be created when the corresponding workflow stage starts.

Use filenames that preserve context while avoiding collisions:

INC-2026-000418_8f31a270_original-file-name.jpg

The eight-character value comes from a generated GUID. The original filename remains visible, but a second upload with the same name does not overwrite the first file.

After creating a file, update its library metadata with IncidentID, EvidenceType, Restricted, SourceFileID, and CapturedDate. Save the incident folder URL on the parent list item rather than placing multiple file links in a long text field.

Initial photographs marked as containing a person, injury, or uncertain content are treated as restricted. Access is reviewed before broader investigator sharing. SharePoint links must use organization-only or specific-person access, not anonymous sharing.

Enable version history. Replacing a document should create a new version when it is the same logical record. A materially different item should be uploaded as a new file. Investigators should not delete prior evidence to make a corrected document appear original.

File-size and file-type limits vary by tenant configuration and Microsoft service settings. Test the allowed formats and practical sizes before launch. The form should direct employees to contact Safety if an upload fails or a file exceeds the permitted limit.

Retention and disposition must follow the organization’s approved safety, employment, insurance, legal-hold, and privacy policies. Automation should not invent a retention period.

Step 8: Add Reporting and Operational Views

Operational views
View Source and filter Owner
New and Untriaged Safety Incidents where Status is New or Triage. Site safety coordinators.
High and Critical Open ConfirmedSeverity is High or Critical and Status is not Closed or Duplicate. Quality leadership.
Awaiting My Action Owner equals the current user and status requires work. Investigators and coordinators.
Overdue Investigations InvestigationDue is before today and status is Investigation. Quality manager.
Open Corrective Actions Action status is Open or In Progress. Operations managers.
Overdue Corrective Actions DueDate is before today and status is not Verified or Cancelled. Quality and Operations.
Verification Queue Action status is Verification Required. Safety coordinators.
Regulatory Review RegulatoryReviewRequired is Not Assessed or Yes with incomplete reference. Quality and HR.
Returned or Rejected Status is Returned for Information or ApprovalStatus is Rejected. Current record owner.
Automation Failures AutomationStatus is Failed, Retry Requested, or Manual Review. System owner.
Recently Closed Status is Closed and ClosureDate is within the selected reporting period. Quality manager.

Place selected list views on a restricted SharePoint operations page. The views read live list data, so there is no separate refresh process. Monthly summaries can use grouped list views or an approved reporting tool later, but copied spreadsheets should not become a competing system of record.

Calculate processing time when an incident closes rather than relying on a dynamic calculated column using the current date. The closure flow stores a stable number of hours for reporting.

The dashboard owner is the Quality systems manager. Alert thresholds, severity definitions, and overdue periods require documented approval before they are changed.

Step 9: Add Security and Governance Controls

  • Least privilege: Grant only the permissions required for each role. Do not make all supervisors site owners.
  • Restricted injury data: Store detailed injury information in the separate restricted list and avoid copying it into general notifications.
  • Notification minimization: Urgent emails should identify the incident, location, danger indicator, and controlled record link. They should not reproduce unnecessary medical details.
  • Shared links: Disable anonymous sharing for the site. Use organization-only or specific-person links according to policy.
  • Credential storage: Keep credentials in managed Power Automate connections. Never place secrets in list columns or flow variables.
  • Flow ownership: Maintain two owners and record who can edit production flows.
  • Audit evidence: Enable list and library versioning, retain Workflow Log entries, and preserve approval outcomes.
  • Former employees: Remove site, group, mailbox, form, and flow access through the normal offboarding process.
  • Backups and retention: Use Microsoft 365 retention and backup arrangements approved by the organization. Test restore procedures rather than assuming version history is a complete backup.
  • Privacy: Collect the minimum necessary personal data and document access, purpose, retention, and data-subject handling requirements.
  • AI restrictions: Do not send names, employee identifiers, medical descriptions, photographs, witness contact data, or regulatory conclusions to the optional AI service.
  • Human control: Require qualified staff to confirm severity, findings, regulatory obligations, action effectiveness, and closure.

Regulatory reporting requirements vary by jurisdiction and event type. The workflow tracks a qualified human decision and deadline, but it is not a substitute for legal, safety, employment, or regulatory advice.

Step 10: Deploy and Test

  1. Build the form, lists, library, views, and flows in the test site.
  2. Use synthetic names and events. Do not use real injury or employee data during development.
  3. Run normal, urgent, injury, duplicate, rejected, overdue, failed-file, and failed-approval scenarios.
  4. Verify permissions by signing in as the standard submitter, investigator, Quality manager, HR reviewer, reporting reader, and unauthorized user.
  5. Conduct user acceptance testing with one safety coordinator, one Operations supervisor, one HR reviewer, and the Quality manager.
  6. Pilot the system at one site for two reporting cycles while retaining the old process only as a monitored contingency.
  7. Reconcile every pilot form response against the Safety Incidents list and every attachment against the evidence library.
  8. Correct defects in test, export or document the flow changes, obtain approval, and apply the controlled version to production.
  9. Activate production flows in sequence: intake, routing, action monitoring, approvals, reminders, closure, and reporting.
  10. Communicate the launch procedure, emergency warning, form location, owner responsibilities, and support contact.
  11. Monitor every production run during the first week and review the failure queue daily during the initial month.
  12. Keep a rollback plan that can disable flows, preserve received Forms responses, and temporarily route new reports to the safety shared mailbox without deleting records already created.

Implementation documentation should include the architecture, data dictionary, routing rules, flow inventory, permission matrix, test evidence, recovery procedure, and named primary and backup owners.

Code and Configuration

The core implementation does not require a conventional software application or standalone script. Microsoft Forms, SharePoint, Microsoft Lists, and Power Automate provide the required triggers and actions. The configuration below contains the expressions, schemas, conditions, and failure structure needed to reproduce the flows.

Power Automate interface labels can vary by tenant and product release. The important configuration is the trigger, condition, action, field mapping, returned identifier, and run-after behavior.

Submission key

Place this expression in a Compose action after the Forms trigger. If the tenant exposes Response Id only as dynamic content, insert that token in place of the final trigger expression.

concat(
  'FORMS:',
  'YOUR_FORM_ID',
  ':',
  string(triggerBody()?['responseId'])
)

Use the result in a SharePoint Get items filter against ExternalSubmissionKey. Because the generated value contains only a controlled prefix, form identifier, and response identifier, it can be safely used after normal connector encoding.

Incident ID

Place this in an Update item action immediately after Create item returns the SharePoint ID:

concat(
  'INC-',
  formatDateTime(utcNow(),'yyyy'),
  '-',
  padLeft(string(outputs('Create_incident')?['body/ID']),6,'0')
)

Urgent alert condition

Use a Condition after values have been normalized. Replace action names with the names used in the flow.

@or(
  equals(outputs('Normalized_ImmediateDanger'),'Yes'),
  equals(outputs('Normalized_MedicalAttention'),'Emergency Response'),
  equals(outputs('Normalized_PreliminarySeverity'),'High'),
  equals(outputs('Normalized_PreliminarySeverity'),'Critical')
)

This condition creates an alert. It does not confirm final severity or regulatory reportability.

Triage target expression

The following nested expression applies representative internal targets. The business should replace these durations with its approved operating policy.

if(
  equals(outputs('Normalized_PreliminarySeverity'),'Critical'),
  addHours(utcNow(),1),
  if(
    equals(outputs('Normalized_PreliminarySeverity'),'High'),
    addHours(utcNow(),4),
    if(
      equals(outputs('Normalized_PreliminarySeverity'),'Medium'),
      addHours(utcNow(),24),
      addHours(utcNow(),48)
    )
  )
)

Routing trigger condition

Add a trigger condition to the incident-created-or-modified flow so it does not respond to every update made by itself:

@and(
  equals(triggerOutputs()?['body/IntakeComplete'],true),
  equals(triggerOutputs()?['body/TriageRouted'],false),
  equals(triggerOutputs()?['body/Status/Value'],'New')
)

Inspect the trigger’s raw output during testing. Depending on column configuration, a choice value may be exposed as a direct string or as a value property. Adjust only the property path, not the condition’s logic.

Uploaded-file schema

The Forms file-upload answer is normally returned as a JSON array. Add Parse JSON using a sample response from the tenant. The following schema accepts the commonly returned fields while allowing optional values:

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "name": {
        "type": "string"
      },
      "link": {
        "type": "string"
      },
      "id": {
        "type": "string"
      },
      "type": {
        "type": [
          "string",
          "null"
        ]
      },
      "size": {
        "type": [
          "integer",
          "null"
        ]
      },
      "referenceId": {
        "type": [
          "string",
          "null"
        ]
      },
      "driveId": {
        "type": [
          "string",
          "null"
        ]
      },
      "status": {
        "type": [
          "integer",
          "null"
        ]
      },
      "uploadSessionUrl": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "required": [
      "name",
      "link",
      "id"
    ]
  }
}

Inside Apply to each, build the source path using the exact upload location found during the test submission:

concat(
  '/Shared Documents/Apps/Microsoft Forms/Safety Incident Report/Photographs or supporting files/',
  item()?['name']
)

Generate the destination filename:

concat(
  variables('IncidentID'),
  '_',
  substring(guid(),0,8),
  '_',
  item()?['name']
)

Use SharePoint Get file content using path for the observed source path, then Create file in the incident’s Intake folder. Update the new file’s metadata using the returned file item identifier.

Processing-time calculation

When closure is approved, calculate elapsed hours from the SharePoint Created value:

div(
  sub(
    ticks(utcNow()),
    ticks(outputs('Get_incident_for_closure')?['body/Created'])
  ),
  36000000000
)

Approval evidence snapshot

Store a concise approval entry in Workflow Log. The exact approval output paths should be selected from the dynamic content returned by the tested approval action.

{
  "incidentId": "@{outputs('Get_incident')?['body/IncidentID']}",
  "approvalId": "@{outputs('Create_quality_approval')?['body/name']}",
  "approvalStage": "Action Plan",
  "outcome": "@{outputs('Wait_for_quality_approval')?['body/outcome']}",
  "responses": "@{string(outputs('Wait_for_quality_approval')?['body/responses'])}",
  "recordedAtUtc": "@{utcNow()}",
  "flowRunId": "@{workflow()?['run']?['name']}"
}

Try, catch, and final scopes

Each production flow uses three Power Automate scopes:

  1. Try: Contains validation and business actions.
  2. Catch: Configured to run after Try has failed, timed out, or been skipped due to an upstream failure. It updates AutomationStatus, RetryCount, ErrorMessage, and Workflow Log, then sends a support alert.
  3. Finally: Runs after Try or Catch. It updates LastAutomationRun and records the flow run ID where an incident record exists.

Use exponential retry for safe read operations and transient notification actions where the connector supports it. Create operations require idempotency checks because an uncertain response could mean that the destination committed the record even though Power Automate did not receive confirmation.

To test the configuration, submit one test response for each severity, one with an injury, one with multiple files, and one repeated trigger event. Review the Power Automate run inputs and outputs, SharePoint version history, Workflow Log, list records, evidence metadata, emails, and approval responses.

Failure Handling and Operational Reliability

The Automation Failures view acts as a business-facing dead-letter queue. A dead-letter queue is a controlled collection of records that could not be processed automatically and require review or retry.

Failure and recovery procedures
Failure Automated response Manual recovery Owner
Missing required response Stop before controlled processing or mark Manual Review if the form returned an unexpected blank. Contact the reporter and complete the controlled record. Safety coordinator.
Invalid site or severity Reject the mapping and record the invalid value. Correct the source configuration or incident value, then request retry. System owner.
Duplicate trigger event Find ExternalSubmissionKey and terminate without creating another incident. No recovery unless the retained item is incomplete. Automation.
Two employees report the same event Create both because the source responses are distinct. Human marks one Duplicate and links it to the retained incident. Safety coordinator.
Partial incident creation Leave status as Intake Processing or Manual Review and record completed identifiers. Run the repair flow, which skips existing child records and creates only missing components. System owner.
Routing row missing Do not guess an owner. Set Manual Review and alert Quality. Add or correct the routing row, then request retry. Quality systems manager.
Authentication expired Flow run fails and support notification is attempted through an independent monitored channel. Repair the connection, validate permissions, and replay affected records. Microsoft 365 administrator.
File read failure Log source file ID and leave intake incomplete. Confirm the source path and permissions, then retry that file. System owner.
File create failure Do not mark intake complete. Preserve the incident and source reference. Resolve library capacity, path, filename, or permission issue and rerun the repair action. SharePoint owner.
Invalid email address Record notification failure while retaining the business record. Correct the routing or user profile and resend from the incident. Quality coordinator.
Notification service failure Retry safe notification actions and record final failure. Use the shared mailbox and document the manual notification. Safety coordinator.
Unavailable approver Continue reminders but never auto-approve. Cancel, log, delegate, and recreate the approval. Quality manager.
Approval timeout Set ApprovalStatus to Expired and escalate. Confirm the correct approver and launch a new approval. System owner.
Rate limit or timeout Apply connector retry where safe and preserve idempotency keys. Wait for service recovery and replay failed records in a controlled batch. System owner.
Invalid status transition Reject the update and set Manual Review. Review version history, correct the status, and document the reason. Safety case manager.
Workflow Log unavailable Do not delete the business transaction. Record the missing-log condition on the incident. Reconcile flow run history and create the missing log entry. System owner.
AI service failure Skip AI fields and retain the normal investigation workflow. Investigator reads and summarizes the narrative manually. Investigator.

A Power Automate instant flow named Retry Failed Incident can use the For a selected item trigger. It should require AutomationStatus to be Failed or Manual Review, verify that RetryCount is below the approved limit, set Retry Requested, and invoke the same idempotent processing stages. It must not delete and recreate the incident.

Daily reconciliation compares the Forms response count with incident submission keys, identifies incidents stuck in Intake Processing, finds files without an IncidentID, and lists records whose LastAutomationRun is unexpectedly old.

A Complete Example

An employee at Plant 2 observes unusual movement in a machine guard on Press Line 3. The employee stops the equipment according to site procedure, informs the supervisor, and submits the safety form.

  • Forms response ID: 762
  • Event type: Unsafe Condition
  • Immediate danger: Yes
  • Injury: No
  • Preliminary severity: High
  • Files: guard-front.jpg and mounting-point.jpg

The Forms trigger passes response ID 762 to Power Automate. The flow retrieves the answers and creates this submission key:

FORMS:YOUR_FORM_ID:762

No matching key exists, so the flow validates the controlled values and creates Safety Incidents item 418 with status Intake Processing. SharePoint returns item ID 418, and the flow generates:

INC-2026-000418

Because Injury is No, no Restricted Injury Details item is created. The flow creates the SharePoint folder Safety Evidence/INC-2026-000418/Intake and copies the two photographs with incident-prefixed filenames.

The Routing Matrix returns the Plant 2 safety coordinator, backup coordinator, and Operations manager. The incident receives its owner and a four-hour internal triage target because the preliminary severity is High.

The urgent alert condition evaluates to true because ImmediateDanger is Yes and PreliminarySeverity is High. Outlook sends a controlled alert to the Plant 2 safety coordinator, Operations manager, Quality manager, and backup coordinator. The message contains the incident ID, location, immediate-danger indicator, and controlled SharePoint link. It does not contain injury or medical details.

The safety coordinator opens the record, confirms High severity, starts the investigation, and records that the machine remains isolated. After reviewing maintenance records and physical evidence, the investigator documents the observed mounting condition without relying on AI to determine fault or root cause.

Three corrective action records are created:

  1. Inspect the affected guard assembly and replace damaged mounting hardware.
  2. Inspect comparable presses for the same condition.
  3. Update the preventive maintenance check to include documented guard-fastener verification.

Each action receives an owner, due date, and ActionID. The Quality manager approves the investigation and proposed plan. Because severity is High, the Operations director also approves the action plan. Regulatory review is set to No by an authorized reviewer, so the workflow records that decision without initiating an external reporting task.

When action owners mark work complete, they attach evidence to the incident folder. The safety coordinator verifies each action independently. One incomplete photograph is rejected and returned to the action owner, while the other actions remain complete.

After replacement evidence is uploaded, all three actions become Verified. The incident moves to Awaiting Closure Approval. The Quality manager reviews the evidence and approves closure.

Power Automate records the approval ID, approver, comments, response time, closure date, and processing hours. The final status becomes Closed. The incident, actions, approvals, files, routing information, and workflow history remain linked through INC-2026-000418.

Implementation Cost

All amounts below are representative planning assumptions, not verified client costs or Microsoft pricing. The business must confirm licensing, internal labour rates, storage requirements, and implementation scope.

Representative one-time implementation costs
Cost item Assumption Estimated amount
Internal requirements and setup 24 hours at $55 per hour $1,320
User acceptance testing 14 hours at $42 per hour $588
Training 8 hours at $42 per hour $336
Documentation 6 hours at $55 per hour $330
Optional professional implementation 48 hours at a representative $150 per hour $7,200
Representative implementation total Internal labour plus optional professional assistance $9,774
Representative recurring costs
Cost item Assumption Monthly amount
Existing Microsoft 365 services No incremental charge assumed because required capabilities are already licensed. Tenant confirmation is required. $0 incremental assumption
Storage and automation allowance Planning reserve rather than a quoted vendor price. $35
Operational maintenance labour 3 hours at $42 per hour $126
Optional AI usage Representative low-volume usage estimate, excluded from core implementation. $6

The optional AI integration may require an approved Azure resource, a premium Power Automate capability, a custom connector, or another licensed integration method. Those costs must be confirmed within the specific Microsoft tenant and are not included in the core $35 recurring tool assumption.

Estimated Time and Cost Savings

The estimates below value administrative capacity. They do not assume a reduction in payroll and do not place a financial value on avoided injuries, compliance issues, or operational disruption.

Core savings assumptions
Assumption Value
Monthly workflow volume 35 safety reports
Current administrative handling time 48 minutes per report
New administrative handling time 10 minutes per report
Exception rate 10 percent
Exception review time 12 minutes per exception
Monthly maintenance time 3 hours
Loaded hourly labour cost $42
Recurring software allowance $35 per month
One-time implementation cost $9,774

Current monthly labour hours: Monthly volume × current minutes per record ÷ 60

35 × 48 ÷ 60 = 28.00 hours

New monthly labour hours: Monthly volume × new minutes per record ÷ 60, plus exception handling and maintenance

(35 × 10 ÷ 60) + (35 × 10% × 12 ÷ 60) + 3
= 5.83 + 0.70 + 3.00
= 9.53 hours

Monthly hours recovered: Current monthly labour hours minus new monthly labour hours

28.00 - 9.53 = 18.47 hours

Estimated monthly labour value: Monthly hours recovered × loaded hourly labour cost

18.47 × $42 = $775.74

Net estimated monthly value: Monthly labour value minus recurring tool costs

$775.74 - $35 = $740.74

Estimated payback period: One-time implementation cost ÷ net estimated monthly value

$9,774 ÷ $740.74 = 13.2 months

Recovered time may provide additional investigation capacity, quicker response, reduced overtime, fewer administrative tasks, and lower dependency on one coordinator. It does not automatically reduce payroll expense.

Non-financial benefits include clearer ownership, fewer follow-up messages, faster urgent alerts, better separation of injury information, consistent action tracking, improved audit evidence, more reliable reporting, and a more predictable reporting experience for employees.

Readers should replace the following assumptions with their own figures:

  • Monthly event volume and seasonal variation.
  • Current intake, re-entry, filing, follow-up, and reporting time.
  • Expected automation exception rate.
  • Investigator and administrator labour rates.
  • Microsoft licensing and storage costs.
  • Implementation and testing effort.
  • Maintenance time and support model.
  • Approval delay and reminder frequency.

Adding AI to the Automation

AI is an optional enhancement added only after the core workflow, permissions, data validation, and failure handling operate reliably.

Normal automation already provides structured intake, unique records, deterministic urgent alerts, routing, reminders, approvals, evidence links, and reporting. None of those functions requires AI.

Potential AI uses include summarizing long narratives, suggesting an event category, identifying potentially missing information, comparing investigation documents, and supporting semantic search across approved summaries.

AI should not be used where a required field, exact match, lookup table, threshold, permission, or workflow rule provides a more reliable result. Immediate-danger alerts, due-date calculations, access control, status transitions, and duplicate response prevention remain rule-based.

The recommended enhancement creates a draft summary from a redacted event narrative and identifies information the investigator may need to request. It does not determine root cause, blame, reportability, diagnosis, final severity, or closure.

  • Trigger: An authorized coordinator sets AIReviewRequested to Yes after placing a redacted narrative in AIReadyNarrative.
  • AI input: Incident ID, general event type, location code, immediate-danger indicator, injury indicator, preliminary severity, and redacted narrative.
  • Prohibited data: Names, employee IDs, contact details, medical descriptions, photographs, witness identifiers, approval comments, legal advice, and regulatory submission content.
  • Expected output: Draft summary, missing-information list, suggested category, suggested priority, rationale, and confidence score.
  • Validation: Parse JSON, enforce allowed categories, check confidence range, and reject blank or oversized fields.
  • Human review: Investigator accepts, edits, or rejects every draft.
  • Low confidence: Confidence below 0.75 is labeled Low Confidence and cannot populate an approved summary.
  • Failure behavior: Set AIStatus to Failed and continue the standard investigation process.

Reusable system instruction

You assist a qualified occupational safety investigator by summarizing supplied information.

Use only the facts in the input. Do not infer root cause, fault, intent, legal liability, regulatory reportability, medical diagnosis, final severity, or whether an incident should be closed.

Do not introduce names or identifying details. If information is missing, list the missing category rather than inventing an answer.

Return one valid JSON object only. Do not include Markdown or explanatory text outside the JSON.

Allowed suggested_event_type values:
Near Miss
Unsafe Condition
Injury
Equipment
Environmental
Other
Unclear

Allowed suggested_priority values:
Low
Medium
High
Critical
Unclear

The priority is a non-binding suggestion for human review. Immediate danger or emergency response should be highlighted, but the human reviewer makes the final decision.

Reusable user prompt

Incident ID: {{IncidentID}}
Location code: {{LocationCode}}
Reported event type: {{EventType}}
Immediate danger reported: {{ImmediateDanger}}
Injury reported: {{InjuryFlag}}
Preliminary severity: {{PreliminarySeverity}}

Redacted narrative:
{{AIReadyNarrative}}

Return:
1. A factual summary of no more than 80 words.
2. Missing information selected only from:
   event_time
   exact_location
   equipment_identifier
   immediate_controls
   witness_information
   sequence_of_events
   injury_indicator
   photo_or_evidence
3. A suggested event type.
4. A suggested priority.
5. A short rationale.
6. A confidence value from 0 to 1.

Expected structured output

{
  "summary": "An employee observed movement in a machine guard during operation and stopped the equipment. The area was isolated and a supervisor was notified. No injury was reported.",
  "missing_information": [
    "equipment_identifier",
    "witness_information"
  ],
  "suggested_event_type": "Unsafe Condition",
  "suggested_priority": "High",
  "rationale": "Immediate danger was reported and equipment was stopped pending review.",
  "confidence": 0.88
}

Parse JSON schema

{
  "type": "object",
  "properties": {
    "summary": {
      "type": "string"
    },
    "missing_information": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "event_time",
          "exact_location",
          "equipment_identifier",
          "immediate_controls",
          "witness_information",
          "sequence_of_events",
          "injury_indicator",
          "photo_or_evidence"
        ]
      }
    },
    "suggested_event_type": {
      "type": "string",
      "enum": [
        "Near Miss",
        "Unsafe Condition",
        "Injury",
        "Equipment",
        "Environmental",
        "Other",
        "Unclear"
      ]
    },
    "suggested_priority": {
      "type": "string",
      "enum": [
        "Low",
        "Medium",
        "High",
        "Critical",
        "Unclear"
      ]
    },
    "rationale": {
      "type": "string"
    },
    "confidence": {
      "type": "number",
      "minimum": 0,
      "maximum": 1
    }
  },
  "required": [
    "summary",
    "missing_information",
    "suggested_event_type",
    "suggested_priority",
    "rationale",
    "confidence"
  ],
  "additionalProperties": false
}

If Azure OpenAI is used through an approved Power Automate HTTP or custom connector, configure the resource endpoint with placeholders rather than embedding credentials:

POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=YOUR_API_VERSION

Headers:
Content-Type: application/json
api-key: stored in the managed connection, not in the flow body

The request body can be configured as follows. The active API version and model deployment must be taken from the organization’s Azure resource configuration.

{
  "messages": [
    {
      "role": "system",
      "content": "@{variables('AI_System_Instruction')}"
    },
    {
      "role": "user",
      "content": "@{variables('AI_User_Prompt')}"
    }
  ],
  "temperature": 0.1
}

Extract the returned content using the tested response shape for the deployed API version, then pass it to Parse JSON. A commonly used chat-completions content path is:

body('Call_Azure_OpenAI')?['choices']?[0]?['message']?['content']

Save the draft in AIDraftSummary, not the approved investigation summary. Also save AIStatus, AIConfidence, AIPromptVersion, AIRequestID, AIRequestedDate, AIReviewedBy, and AIReviewedDate.

Log model deployment, prompt version, request identifier, response status, token usage when available, and estimated cost. Do not write the prohibited source data into Workflow Log.

Benefits of the AI Enhancement

  • Reduces the time required to draft a concise summary from a long narrative.
  • Applies a consistent summary structure across investigators.
  • Highlights potentially missing information for follow-up.
  • Provides a non-binding category and priority suggestion for human review.
  • Supports reporting based on approved summaries rather than raw free text.
  • Allows investigators to focus more time on evidence and corrective action quality.

These benefits are specific to interpreting unstructured text. Record creation, alerts, routing, approvals, reminders, document control, access restrictions, and failure recovery are benefits of the core automation and do not depend on AI.

What Remains Rule-Based or Human-Controlled

Decisions excluded from AI control
Decision Control method Reason
Immediate alert Rule-based fields and thresholds Urgent notification should not depend on probabilistic interpretation.
Confirmed severity Qualified safety reviewer Requires context, policy, and professional judgment.
Medical or work-status decision Authorized HR and health professionals Involves sensitive information and qualified assessment.
Root-cause conclusion Investigator and review process Requires evidence, interviews, technical analysis, and challenge.
Regulatory reportability Authorized Quality, HR, and legal roles Legal and jurisdictional interpretation must remain accountable to people.
Corrective action approval Quality and Operations approvers Actions can affect safety, cost, production, and employment responsibilities.
Action effectiveness Independent verification Completion evidence must be checked against actual conditions.
Final closure Quality manager approval Closure is a formal acceptance of the investigation and controls.

Estimating the Additional Value of AI

The following assumptions compare the original process, core automation, and optional AI enhancement.

Representative AI value assumptions
Measure Assumption
Monthly volume 35 records
Original administrative handling 48 minutes per record
Core automation handling 10 minutes per record
Gross AI drafting reduction 4 minutes per record
Mandatory AI review 1 minute per record
Expected correction rate 10 percent, requiring 2 additional minutes
Expected service failure rate 3 percent, reverting to the 4-minute manual task
Representative AI usage cost $6 per month
Expected AI handling time per record
= 10 - 4 + 1 + (10% × 2) + (3% × 4)
= 7.32 minutes

Additional monthly hours recovered
= 35 × (10 - 7.32) ÷ 60
= 1.56 hours

Additional labour capacity value
= 1.56 × $42
= $65.52

Net additional monthly value
= $65.52 - $6
= $59.52

This estimate treats AI as a modest capacity improvement, not as a replacement for investigators. Actual correction and failure rates must be measured through reviewed production samples.

Testing Checklist

Use synthetic sample data before processing real employee, injury, or safety information.

Minimum workflow test cases
Test Expected result
Normal submission One incident, identifier, folder, routing assignment, confirmation, and log entry are created.
Missing required field Form blocks submission or flow sends the record to Manual Review.
Invalid choice value Flow rejects the mapping and records a sanitized error.
Future event date Record is flagged for review rather than silently accepted.
Duplicate submission event Unique submission key prevents a second incident.
Separate reports of the same event Both records exist until a human links one as Duplicate.
Immediate danger Urgent alert is sent to the configured roles.
Injury reported Restricted injury record is created and not visible to unauthorized users.
Multiple files Every file is copied once, renamed safely, and assigned metadata.
Failed file upload Incident remains incomplete or enters Manual Review.
Failed folder creation No false success is recorded and recovery data is retained.
Missing routing row No owner is guessed; support receives an exception alert.
Failed authentication Flow fails visibly and affected records are recoverable.
Expired credential Connection repair and controlled replay restore processing.
Approval accepted Outcome and evidence are logged and status advances correctly.
Approval rejected Status becomes Returned for Information and comments are preserved.
Unavailable approver No automatic approval occurs; delegation and replacement are recorded.
Reassignment New owner receives notice and the change appears in version history.
Reminder One reminder is sent at the configured interval.
Overdue escalation Owner and manager receive the correct escalation without duplicate daily messages.
Failed notification Business record remains valid and notification failure is logged.
Unauthorized user User cannot access the restricted site, list, injury record, or evidence.
Invalid status transition Automation prevents progression and creates a review item.
Malformed AI output Parse JSON fails safely and the standard workflow continues.
Inaccurate AI output Human reviewer rejects or edits the draft without changing source facts.
AI service unavailable AIStatus becomes Failed and the investigator completes the task manually.
Successful closure All required actions are verified, approval is logged, and closure fields are populated.
Reporting accuracy Views match source list records and permission restrictions.
Audit evidence Version history, Workflow Log, approval data, and file metadata can reconstruct the process.
Retry behavior Retry creates missing components without duplicating completed ones.

Ongoing Maintenance

The Quality systems manager owns the business process. A Microsoft 365 administrator is the technical backup, and a second Quality employee owns operational continuity.

Maintenance schedule
Frequency Activity Owner
Daily Review failed runs, Manual Review items, stuck intake records, and urgent notification failures. Quality systems manager.
Weekly Review overdue investigations, actions, approvals, regulatory reviews, and retry counts. Quality manager.
Monthly Reconcile Forms responses, incidents, restricted records, evidence folders, and workflow logs. System owner and backup.
Monthly Review Power Automate usage, storage growth, AI usage, and connector errors. Microsoft 365 administrator.
Quarterly Review permissions, group membership, shared links, form owners, flow owners, and mailbox access. Quality, HR, and IT.
Quarterly Sample closed incidents for approval evidence, action verification, and reporting accuracy. Quality manager.
Quarterly Sample AI outputs for factual accuracy, prohibited data, correction rate, and low-confidence handling. AI governance owner and Quality.
Semiannually Test credential recovery, retry procedures, notification fallback, and backup restoration. Microsoft 365 administrator.
Annually Review status definitions, severity rules, regulatory procedures, retention, privacy notice, and training material. Quality, Operations, HR, legal, and privacy roles.
On staff change Remove former-user access and transfer ownership of forms, flows, sites, mailboxes, and documentation. IT and process owner.

Flow edits should follow a controlled release process. Changes are built and tested outside production, reviewed by the business owner, documented with a version number, and monitored after deployment.

When to Move to Dedicated Software

The Microsoft 365 implementation may remain appropriate while event volume, permissions, workflow complexity, and reporting needs remain manageable. Replacement should be based on evidence rather than an assumption that every workflow requires a specialist platform.

Signs that the implementation may have been outgrown include:

  • Transaction volume creates slow list queries, complex indexing, or excessive flow runs.
  • Many locations require different legal rules, languages, forms, and approval paths.
  • Employees need a full mobile application with offline reporting.
  • Contractors or customers need a secure external reporting portal.
  • Fine-grained record permissions become too difficult to administer safely.
  • Formal regulatory submissions require certified interfaces or jurisdiction-specific content.
  • Safety events must connect deeply with training, inspections, permits, equipment maintenance, occupational health, claims, or enterprise risk systems.
  • Exception rates and manual repair effort continue to increase.
  • Reporting requires advanced trend analysis, leading indicators, cross-site benchmarking, or formal audit packages.
  • Vendor support commitments and validated release controls become mandatory.
  • Security risk increases because too many users, unique permissions, flows, and document paths must be maintained manually.
  • The business requires complex mobile evidence capture, offline synchronization, geolocation, or barcode scanning.

Relevant categories include environment, health, and safety management systems, quality management systems, governance and risk platforms, and industry-specific incident management applications. A move should include requirements validation, data migration planning, retention controls, integration design, and a comparison against the actual cost of maintaining the Microsoft 365 workflow.

Implementation Checklist

  • Confirm business scope, event definitions, owners, severity levels, and regulatory responsibilities.
  • Approve Microsoft Forms, Microsoft Lists, Power Automate, SharePoint, Outlook, and Approvals as the selected tools.
  • Verify licenses, connectors, storage, retention, and tenant policies.
  • Create test and production accounts, sites, forms, mailboxes, and security groups.
  • Define least-privilege permissions and restricted injury access.
  • Build the form with required fields, branching, emergency guidance, privacy notice, and upload controls.
  • Create the Safety Incidents, Restricted Injury Details, Corrective Actions, Routing Matrix, and Workflow Log lists.
  • Create the Safety Evidence library, metadata, folders, permissions, and versioning.
  • Configure unique keys, indexes, relationships, statuses, defaults, and controlled choices.
  • Document every source-to-destination field mapping.
  • Build intake, routing, investigation, corrective action, approval, closure, reminder, and recovery flows.
  • Add idempotency checks, trigger conditions, run-after scopes, logging, and retry limits.
  • Configure human approval thresholds, sequential approvals, parallel reviews, rejection, and delegation.
  • Configure reminders, escalations, overdue rules, and unavailable-approver handling.
  • Create urgent, assignment, reminder, failure, and closure notifications.
  • Create operational views for new, overdue, incomplete, rejected, regulatory, verification, and failed records.
  • Confirm evidence naming, duplicate-file handling, version control, retention, and archiving.
  • Review privacy, security, shared-link, audit, backup, and former-user controls.
  • Validate all expressions, JSON schemas, connection references, and environment-specific identifiers.
  • Run normal, exception, security, approval, file, retry, and reporting tests with sample data.
  • Complete user acceptance testing and a phased pilot.
  • Document activation, monitoring, rollback, support, and manual recovery procedures.
  • Replace representative cost assumptions with confirmed licensing and labour figures.
  • Replace representative savings assumptions with measured handling times and exception rates.
  • Add AI only after the core workflow is reliable and governance approval is complete.
  • Require redaction, structured output validation, human review, and AI cost monitoring.
  • Name the primary system owner, technical backup, and business continuity owner.
  • Define the volume, security, reporting, integration, and maintenance criteria that would justify dedicated software.

Get a FREE
Proof of Concept
& Consultation

No Cost, No Commitment!