SI Enhancement increases sum insured for active members on a policy via Excel upload (files.action = si_enhancement). The process recalculates premium from slab/rack rates and creates pending SI endorsements on employee_polices — SI and premium are not updated in place until endorsements are applied downstream.

Core logic: EmployeeServiceController::employeesSIEnhanceProcess. Premium math uses transform_si_excel_row_to_calculatable_format and premium_calculation_manager (see EB rack rate calculation).

Overview

flowchart LR A["Upload Excel action si_enhancement"] --> B["excelFileFormatValidation"] B --> C["excelFileDataValidation"] C --> D["employeesSIEnhanceProcess job"] D --> E["Recalc premium plus pending SI endorsements"] B -->|errors| F["files.status failed"] C -->|errors| F D -->|loop done| G["files.status success"]

In short:

Key files and routes

AreaLocation
UI app/Views/employee_upload.php — action SI Enhancement
Upload EmployeeController::employeesUplodWithEvents
Validation excelFileFormatValidation, excelFileDataValidation
SI process employeesSIEnhanceProcess
Onboard SI path employeesSIEnhanceProcessWhileOnbboard — SI during dependent addition onboard (not Excel)
Job employeesSIEnhanceProcess in JobWorker.php
Helpers excel_util_helper.phptransform_si_excel_row_to_calculatable_format, premium_calculation_manager

Routes (group /employee, authMVC):

i
files.policy_id is the client policy id. Slab rates load via getPolicySlabRatesForEmpOnboard(policy_id, client_id).

Sync vs background jobs

Step< 1 MB≥ 1 MB
Format validationInline on uploadJob excelFileFormatValidation
Data validationJob excelFileDataValidationSame
SI enhanceJob employeesSIEnhanceProcessSame

Step 1: excelFileFormatValidation

Format error codes

CodeMeaning
1Mandatory missing
2Wrong format
3Not in allowed list
4Custom validation failed (e.g. invalid Augmented SI for slab)
5File / policy / slab problem
6Column headers wrong

Step 2: excelFileDataValidation

name_and_empid_check_in_db for si_enhancement:

On success → queues employeesSIEnhanceProcess.

Step 3: employeesSIEnhanceProcess

flowchart TD A["Read row Augmented SI and date"] --> B["Match active employee and policy"] B --> C{"Pending SI on basic_cover_si?"} C -->|Yes| D["Skip row log error"] C -->|No| E["Resolve rack rate by relationship"] E --> F["premium_calculation_manager"] F --> G["Insert 3 pending endorsements actions si"]

Per row:

  1. Strip number formatting from Augmented SI (removeNumberFormatting).
  2. Load employee (emp code + name + branch) and active employee_polices row.
  3. Find applicable slab/rack rate from member relationship (Son/Daughter → childrens, parents, etc.).
  4. Build calculatable member payload via transform_si_excel_row_to_calculatable_format (uses family max age/count).
  5. premium_calculation_manager → new premium for the augmented SI.
  6. Insert pending endorsements on employee_polices (actions = si):
field_namenew_value source
basic_cover_siExcel Augmented SI (column D)
premiumRecalculated premium from rack logic
si_enhancement_dateExcel Date of SI Enhancement (column E)

Sets files.status = success when the loop completes. Skipped rows (duplicate pending SI, missing member) are logged only — the file still succeeds.

SI Enhancement Excel columns

ColHeaderRequiredNotes
AS.NoYes
BEMP IDYes
CNAME OF EMP/DEPYesMust match DB
DAugmented SIYesNew SI; validated via check_si
EDate of SI EnhancementYesd-M-Y

Row layout examples

Enhance Self SI — one row:

EMP IDNAMEAugmented SIDate of SI Enhancement
EMP001Raj Kumar100000019-May-2026

Enhance spouse only — separate row (premium uses that member’s relationship for rack selection):

EMP IDNAMEAugmented SIDate of SI Enhancement
EMP001Priya Kumar50000019-May-2026

Developer steps

  1. Confirm slab/rack rates exist for the client policy (same as inception).
  2. Upload with upload-action-type=si_enhancement; note file_id.
  3. On validation failure, check /employee/excel_error/{file_id} — codes 4 (SI/slab) or 10 (member missing).
  4. After success, query emp_endorsement where file_id = upload id, actions = 'si', status = 'pending' — expect up to 3 rows per member (same group_key).
  5. Compare new_value on basic_cover_si and premium to Excel and rack expectations.

Common pitfalls

Related: Inception, Correction, EB rack rate calculation.