Re_Backend/docs/CLAIM_MANAGEMENT_APPROVER_MAPPING.md

5.2 KiB

Claim Management - Approver Mapping Documentation

Overview

The Claim Management workflow has 8 fixed steps with specific approvers and action types. This document explains how approvers are mapped when a claim request is created.

8-Step Workflow Structure

Step 1: Dealer Proposal Submission

  • Approver Type: Dealer (External)
  • Action Type: SUBMIT (Dealer submits proposal documents)
  • TAT: 72 hours
  • Mapping: Uses dealerEmail from claim data
  • Status: PENDING (waiting for dealer to submit)

Step 2: Requestor Evaluation

  • Approver Type: Initiator (Internal RE Employee)
  • Action Type: APPROVE/REJECT (Requestor reviews dealer proposal)
  • TAT: 48 hours
  • Mapping: Uses initiatorId (the person who created the request)
  • Status: PENDING (waiting for requestor to evaluate)

Step 3: Department Lead Approval

  • Approver Type: Department Lead (Internal RE Employee)
  • Action Type: APPROVE/REJECT (Department lead approves and blocks IO budget)
  • TAT: 72 hours
  • Mapping:
    • Option 1: Find user with role MANAGEMENT in same department as initiator
    • Option 2: Use initiator's manager field from User model
    • Option 3: Find user with designation containing "Lead" or "Head" in same department
  • Status: PENDING (waiting for department lead approval)

Step 4: Activity Creation

  • Approver Type: System (Auto-processed)
  • Action Type: AUTO (System automatically creates activity)
  • TAT: 1 hour
  • Mapping: System user (system@royalenfield.com)
  • Status: Auto-approved when triggered

Step 5: Dealer Completion Documents

  • Approver Type: Dealer (External)
  • Action Type: SUBMIT (Dealer submits completion documents)
  • TAT: 120 hours
  • Mapping: Uses dealerEmail from claim data
  • Status: PENDING (waiting for dealer to submit)

Step 6: Requestor Claim Approval

  • Approver Type: Initiator (Internal RE Employee)
  • Action Type: APPROVE/REJECT (Requestor approves completion)
  • TAT: 48 hours
  • Mapping: Uses initiatorId
  • Status: PENDING (waiting for requestor approval)

Step 7: E-Invoice Generation

  • Approver Type: System (Auto-processed via DMS)
  • Action Type: AUTO (System generates e-invoice via DMS integration)
  • TAT: 1 hour
  • Mapping: System user (system@royalenfield.com)
  • Status: Auto-approved when triggered

Step 8: Credit Note Confirmation

  • Approver Type: Finance Team (Internal RE Employee)
  • Action Type: APPROVE/REJECT (Finance confirms credit note)
  • TAT: 48 hours
  • Mapping:
    • Option 1: Find user with role MANAGEMENT and department contains "Finance"
    • Option 2: Find user with designation containing "Finance" or "Accountant"
    • Option 3: Use configured finance team email from admin settings
  • Status: PENDING (waiting for finance confirmation)
  • Is Final Approver: Yes (final step)

Current Implementation Issues

Problems:

  1. Step 1 & 5: Dealer email not being used - using placeholder UUID
  2. Step 3: Department Lead not resolved - using placeholder UUID
  3. Step 8: Finance team not resolved - using placeholder UUID
  4. All steps: Using initiator email for non-initiator steps

Impact:

  • Steps 1, 3, 5, 8 won't have correct approvers assigned
  • Notifications won't be sent to correct users
  • Workflow will be stuck waiting for non-existent approvers

Action Types Summary

Step Action Type Description
1 SUBMIT Dealer submits proposal (not approve/reject)
2 APPROVE/REJECT Requestor evaluates proposal
3 APPROVE/REJECT Department Lead approves and blocks budget
4 AUTO System creates activity automatically
5 SUBMIT Dealer submits completion documents
6 APPROVE/REJECT Requestor approves completion
7 AUTO System generates e-invoice via DMS
8 APPROVE/REJECT Finance confirms credit note (FINAL)

Approver Resolution Logic

For Dealer Steps (1, 5):

// Use dealer email from claim data
const dealerEmail = claimData.dealerEmail;
// Find or create dealer user (if dealer is external, may need special handling)
const dealerUser = await User.findOne({ where: { email: dealerEmail } });
// If dealer doesn't exist in system, create participant entry

For Department Lead (Step 3):

// Priority order:
1. Find user with same department and role = 'MANAGEMENT'
2. Use initiator.manager field to find manager
3. Find user with designation containing "Lead" or "Head" in same department
4. Fallback: Use initiator's manager email from User model

For Finance Team (Step 8):

// Priority order:
1. Find user with department containing "Finance" and role = 'MANAGEMENT'
2. Find user with designation containing "Finance" or "Accountant"
3. Use configured finance team email from admin_configurations table
4. Fallback: Use default finance email (e.g., finance@royalenfield.com)

Next Steps

The createClaimApprovalLevels() method needs to be updated to:

  1. Accept dealerEmail parameter
  2. Resolve Department Lead dynamically
  3. Resolve Finance team member dynamically
  4. Handle cases where approvers don't exist in the system