From f7838352b0657c3f5307e7fbde074e7cce29e6f7 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Wed, 24 May 2023 09:56:47 +0700 Subject: [PATCH] update validasi benefit & plan --- .../Controllers/Api/CorporateController.php | 167 +++++++++++++++++- Modules/Internal/Routes/api.php | 1 + .../Internal/Services/CorporateService.php | 109 +++++++++++- .../Internal/Services/ExclusionService.php | 6 +- app/Models/CorporateBenefit.php | 60 +++++++ app/Models/Plan.php | 51 ++++++ .../src/pages/Corporates/Benefit/List.tsx | 13 ++ .../src/pages/Corporates/Plan/List.tsx | 13 ++ lang/en/plan.php | 73 ++++++++ .../Corporate Plan & Benefit Import.xlsx | Bin 16883 -> 15571 bytes public/files/CorporateMembershipList.xlsx | Bin 0 -> 4212 bytes .../CorporatePlan&BenefitImportData.xlsx | Bin 0 -> 6630 bytes 12 files changed, 484 insertions(+), 9 deletions(-) create mode 100644 lang/en/plan.php mode change 100755 => 100644 public/files/Corporate Plan & Benefit Import.xlsx create mode 100644 public/files/CorporatePlan&BenefitImportData.xlsx diff --git a/Modules/Internal/Http/Controllers/Api/CorporateController.php b/Modules/Internal/Http/Controllers/Api/CorporateController.php index 421ae88a..fbc4d638 100755 --- a/Modules/Internal/Http/Controllers/Api/CorporateController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateController.php @@ -19,6 +19,7 @@ use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Maatwebsite\Excel\Facades\Excel; use Box\Spout\Reader\Common\Creator\ReaderEntityFactory; +use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use App\Models\File; use Illuminate\Support\Facades\File as FacadesFile; use Illuminate\Support\Facades\Response; @@ -455,7 +456,6 @@ class CorporateController extends Controller } else if ($sheet->getName() == 'Benefit') { $corporateService->handleBenefitRow($corporate, $row_data); } - // Write Success Result to File $import->addArrayToRow(array_merge($row_data, [ 'Ingest Code' => 200, @@ -519,5 +519,170 @@ class CorporateController extends Controller break; } } + + public function dataPlanBenefit(Request $request, $corporate_id){ + + $file_name = 'Corporate Plan and Benefit'; + // Membuat penulis entitas Spout + $writer = WriterEntityFactory::createXLSXWriter(); + // Membuka penulis untuk menulis ke file + $writer->openToFile(public_path('files/CorporatePlan&BenefitImportData.xlsx')); + + // Sheet 1 + $writer->getCurrentSheet()->setName('Plans'); + $headers_map_to_table_fields = Plan::$listing_doc_headers; + $headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields); + $writer->addRow($headerRow); + + $dataPlans = Plan::query() + ->filter($request->all()) + ->where('corporate_id', $corporate_id) + // ->whereHas('corporatePlan', function ($corporatePlan) use ($corporate_id) { + // $corporatePlan->where('corporate_id', $corporate_id); + // }) + // ->with('corporatePlan') + ->orderBy('corporate_plan_id', 'asc') + ->get()->toArray(); + foreach ($dataPlans as $index => $row){ + $rowData = [ + $row['service_code'], // Service + $row['corporate_plan_id'], // Plan + $row['code'], // Customer plans + $row['type'], // Plan Type + $row['start'], // Start Date of Plan + $row['end'], // End Date of Plan + $row['require_referral'], // Referral + $row['referral_source'], // Referral Source + $row['referral_duration'], // Referral Duration + $row['family_plan'], // Family Plan + $row['family_plan_share_rules'], // Family Sharing Overflow + $row['limit_rules'], // Plan Limit + $row['layer'], // Layer ID + $row['layer_conditions'], // Layer Condition + $row['budget_type'], // Budget Type + $row['budget_code'], // Budget Code + $row['budget_conditions'], // Budget Condition + $row['surgery_limit'], // Surgery + $row['non_surgery_limit'], // Non Surgery + $row['max_claim_limit'], // Max/Claim + $row['max_claim_count'], // Max Count of Claim + $row['area_limit'], // Area + $row['limit_shared_plans'], // Shared Plan + $row['limit_shared_plan_type'], // Shared Plan Type + $row['cashless_percentage'], // Cashless(%) + $row['reimbursement_percentage'], // Reimbursement(%) + $row['digital_percentage'], // Digital(%) + $row['co_share_m_percentage'], // CoShareM(%) + $row['co_share_s_percentage'], // CoShareS(%) + $row['co_share_c_percentage'], // CoShareC(%) + $row['cashless_deductible'], // Cashless Deductible + $row['cashless_deductible'], // Reimbursement Deductible + $row['digital_deductible'], // Digital Deductible + $row['co_share_m_deductible'], // DeductibleM + $row['co_share_s_deductible'], // DeductibleS + $row['co_share_c_deductible'], // DeductibleC + $row['co_share_deductible_condition'], // Co-share & Deductible Condition + $row['msc'], // MSC + $row['genders'], // Gender + $row['min_age'], // Min Age + $row['max_age'], // Max Age + $row['rule_of_excess'], // Rule of Excess + $row['max_excess_covered'], // Max Excess Covered + $row['prorate_type'], // Prorate Type + $row['prorate_lookup'], // Prorate Lookup + $row['currency'], // Currency + $row['max_surgery_reinstatement_days'], // Reinstatement days for Surgery NonSurgery + $row['max_surgery_periode_days'], // Max Periode of Surgery Non Surgery + ]; + $row = WriterEntityFactory::createRowFromArray($rowData); + $writer->addRow($row); + } + + // Menutup penulis + + // Sheet 2 + $writer->addNewSheetAndMakeItCurrent(); + $writer->getCurrentSheet()->setName('Benefit'); + $headers_map_to_table_fields = CorporateBenefit::$listing_doc_headers; + $headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields); + $writer->addRow($headerRow); + + $dataBenfit = CorporateBenefit::query() + ->where('corporate_id', $corporate_id) + ->with('benefit', 'plan') + ->orderBy('plan_id', 'asc') + ->get()->toArray(); + // dd($dataBenfit); + foreach($dataBenfit as $index => $row){ + $rowData = [ + $row['benefit']['service_code'] ?? NULL, // "Service", + $row['plan']['type'] ?? NULL, // "Plan", + $row['benefit']['code'] ?? NULL, // "Benefit Code", + $row['benefit']['code'] ?? NULL, // "Customer Benefit Code", + $row['benefit']['description'] ?? NULL, // "Detail Benefit", + $row['budget'], // "ASO/Budget", + $row['budget_conditions'], // "Budget Condition", + $row['budget_code'], // "Budget Code", + $row['primary_benefit_code'], // "Primary benefit", + $row['benefit_mode'], // "Benefit Mode", + $row['room_class_coverage'], // "Room Class", + $row['max_bed_coverage'], // "Max Bed", + $row['tolerance_parameter'], // "Tolerance Paramater", + $row['max_room_class'], // "Max. Room Class", + $row['limit_amount'], // "Limit Value", + $row['area_limit'], // "Area", + $row['shared_benefit'], // "Shared Benefit With", + $row['shared_benefit_type'], // "Shared Benefit Type", + $row['msc'], // "MSC", + $row['genders'], // "Gender", + $row['min_age'], // "Min Age", + $row['max_age'], // "Max Age", + $row['max_frequency_period'], // "Freq. Period", + $row['daily_frequency'], // "Daily Frequency", + $row['weekly_frequency'], // "Weekly Frequency", + $row['monthly_frequency'], // "Monthly Frequency", + $row['yearly_frequency'], // "Yearly Frequency", + $row['custom_frequency_days'], // "Custom Duration", + $row['custom_duration_value'], // "Custom Duration Value", + NULL, // "Cashless, Reimbursement", + $row['high_plan_factor'], // "High Plan Factor", + $row['pre_post_treatment'], // "Pre Post Treatment", + $row['pre_treatment_days'], // "Pre Treatment", + $row['post_treatment_days'], // "Post Treatment", + $row['layer_type_1'], // "Layer Type 1", + $row['layer_value_1'], // "Layer Value 1", + $row['layer_type_2'], // "Layer Type 2", + $row['layer_value_2'], // "Layer Value 2", + $row['cashless_percentage'], // "Cashless (%)", + $row['reimbursement_percentage'], // "Reimburse (%)", + $row['digital_percentage'], // "Digital (%)", + $row['co_share_m_percentage'], // "CoShareM (%)", + $row['co_share_s_percentage'], // "CoShareS (%)", + $row['co_share_c_deductible'], // "CoShareC (%)", + $row['cashless_deductible'], // "Cashless Deductible", + $row['reimbursement_deductible'], // "Reimbursement Deductible", + $row['digital_deductible'], // "Digital Deductible", + $row['co_share_m_deductible'], // "DeductibleM", + $row['co_share_s_deductible'], // "DeductibleS", + $row['co_share_c_deductible'], // "DeductibleC", + $row['prorate_type'], // "Prorate Type", + $row['prorate_lookup'], // "Prorate Lookup", + $row['max_days_for_disability'], // "Max Days for Disability", + $row['max_period_for_disability'], // "Max Periode of Disability", + $row['currency'], // "Currency", + $row['show_benefit_item'], // "Show Benefit Item", + $row['show_benefit_value'], // "Show Benefit Value", + ]; + $row = WriterEntityFactory::createRowFromArray($rowData); + $writer->addRow($row); + } + + $writer->close(); + + return Helper::responseJson([ + 'file_name' => "Data Corporate Plan & Benefit List " . date('Y-m-d h:i:s'), + "file_url" => url('files/CorporatePlan&BenefitImportData.xlsx') + ]); + } } diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index a3eb8867..40b65fa6 100755 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -66,6 +66,7 @@ Route::prefix('internal')->group(function () { Route::get('corporates/import-document-example/{document_type}', [CorporateController::class, 'importDocumentExample']); Route::put('corporates/{corporate_id}/activation', [CorporateController::class, 'activation']); Route::post('corporates/{corporate_id}/import-plan-benefit', [CorporateController::class, 'importPlanBenefit']); + Route::get('corporates/{corporate_id}/data-plan-benefit', [CorporateController::class, 'dataPlanBenefit']); Route::get('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'index']); Route::post('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'store']); diff --git a/Modules/Internal/Services/CorporateService.php b/Modules/Internal/Services/CorporateService.php index 809bdf08..672ee4db 100755 --- a/Modules/Internal/Services/CorporateService.php +++ b/Modules/Internal/Services/CorporateService.php @@ -6,6 +6,7 @@ use App\Exceptions\ImportRowException; use App\Models\Benefit; use App\Models\Corporate; use App\Models\CorporateBenefit; +use App\Models\CorporatePolicy; use App\Models\Plan; use Box\Spout\Writer\Common\Creator\WriterEntityFactory; @@ -13,16 +14,105 @@ class CorporateService { protected function validatePlanRow($row) { + // $corporate_policy = CorporatePolicy::where('corporate_id', $corporateId)->get(); + /* + Refer to Coverage code : + MEDIVAC = Medical evacuation + MSO = Medical second opinion + PAC = Personal Assistant Concierge + OPDE = Outpatient Dental + IP=Inpatient + OP=Outpatient + MA=Maternity + ANC = Ante/Post Natal Care + DE=Dental + GL=Glasses + SP=Special Treatment + PF=Pooled Fund + MCU=Medical Check Up + KB-VACC = Family Planning/Vaccination + LAB = Test Diagnostic + PHAR = Pharmacy + **/ + + $service_code = ['MEDIVAC', 'MSO', 'PAC', 'OPDE', 'IP', 'OP', 'MA', 'ANC', 'DE', 'GL', 'SP', 'PF', 'MCU', 'KB-VACC', 'LAB', 'PHAR']; + $plan_code = [1, 2, 3, 4]; + $prorate_type = [0, 1, 2]; + $family_plan = ['F', 'S', 'N']; + if (empty($row['service_code'])) { - throw new ImportRowException(__('plan.RECORD_TYPE_REQUIRED'), 0, null, $row); + throw new ImportRowException(__('plan.REQUIRED', [ + 'attribute' => 'Service Code' + ] ), 0, null, $row); + } else if (!in_array($row['service_code'], $service_code)){ + throw new ImportRowException(__('plan.NOT_MATCH', [ + 'attribute' => 'Service Code', + 'code' => $row['service_code'] + ]), 0, null, $row); + } + + if (empty($row['corporate_plan_id'])) { + throw new ImportRowException(__('plan.REQUIRED', [ + 'attribute' => 'Plan' + ]), 0, null, $row); } if (empty($row['code'])) { - throw new ImportRowException(__('plan.CODE_REQUIRED'), 0, null, $row); + throw new ImportRowException(__('plan.REQUIRED', [ + 'attribute' => 'Customer Plan' + ]), 0, null, $row); + } + + if (!in_array($row['type'], $plan_code)){ + throw new ImportRowException(__('plan.NOT_MATCH', [ + 'attribute' => 'Plan Type', + 'code' => $row['type'] + ]), 0, null, $row); + } else if ($row['type'] == 2 && $row['limit_rules'] != 999999999){ + throw new ImportRowException(__('plan.LIMIT_PLAN'), 0, null, $row); } - if (empty($row['type'])) { - throw new ImportRowException(__('plan.TYPE_REQUIRED'), 0, null, $row); + // if (!empty($row['start'])) { + // throw new ImportRowException(__('plan.REQUIRED', [ + // 'attribute' => 'Start Date of Plan' + // ]), 0, null, $row); + // } + + // if (empty($row['type'])) { + // throw new ImportRowException(__('plan.TYPE_REQUIRED'), 0, null, $row); + // } else if (!in_array($row['type'],$plan_code)){ + // throw new ImportRowException(__('plan.NOT_MATCH', [ + // 'attribute' => 'Plan Type', + // 'code' => $row['code'] + // ]), 0, null, $row); + // } + + if (!empty($row['family_plan']) && !in_array($family_plan)) { + throw new ImportRowException(__('plan.NOT_MATCH', [ + 'attribute' => 'Family Plan', + 'code' => $row['family_plan'] + ]), 0, null, $row); + } + + if (!empty($row['family_plan']) && !in_array($family_plan)) { + throw new ImportRowException(__('plan.NOT_MATCH', [ + 'attribute' => 'Family Plan', + 'code' => $row['family_plan'] + ]), 0, null, $row); + } + + if (!empty($row['prorate_type']) && !in_array($prorate_type)) { + throw new ImportRowException(__('plan.NOT_MATCH', [ + 'attribute' => 'Prorate Type', + 'code' => $row['prorate_type'] + ]), 0, null, $row); + } + + if (!empty($row['prorate_lookup']) && !in_array($prorate_type)) { + throw new ImportRowException(__('plan.NOT_MATCH', [ + 'attribute' => 'Prorate Lookup', + 'code' => $row['prorate_lookup'] + ]), 0, null, $row); } if (empty($row['limit_rules'])) { @@ -38,8 +128,8 @@ class CorporateService { try { $plan_data = $row; - $plan_data["corporate_id"] = $corporate->id; $this->validatePlanRow($plan_data); + $plan_data["corporate_id"] = $corporate->id; $plan = $corporate->plans()->updateOrCreate([ 'corporate_plan_id' => $plan_data['corporate_plan_id'], // 'active' => 0, @@ -53,6 +143,8 @@ class CorporateService protected function validateBenefitRow($row) { + $max_frequence = 7; + $budget_aso = [1,2]; if (empty($row['service_code'])) { throw new ImportRowException(__('benefit.SERVICE_CODE_REQUIRED'), 0, null, $row); } @@ -77,6 +169,13 @@ class CorporateService if (empty($row['genders'])) { throw new ImportRowException(__('benefit.GENDER_REQUIRED'), 0, null, $row); } + if (!empty($row['max_frequency_period']) && $row['max_frequency_period'] >= $max_frequence){ // jenis frequence + throw new ImportRowException(__('benefit.MAX_FREQUENCY'), 0, null, $row); + } + + if (!empty($row['budget']) && !in_array($budget_aso)) { + + } } public function handleBenefitRow(Corporate $corporate, $row) diff --git a/Modules/Internal/Services/ExclusionService.php b/Modules/Internal/Services/ExclusionService.php index af7e6b62..e0f875d4 100755 --- a/Modules/Internal/Services/ExclusionService.php +++ b/Modules/Internal/Services/ExclusionService.php @@ -13,9 +13,9 @@ class ExclusionService { protected function validateDiagnosisExclusionRow($row) { - // if (empty($row['service_code'])) { - // throw new ImportRowException(__('plan.RECORD_TYPE_REQUIRED'), 0, null, $row); - // } + if (empty($row['service_code'])) { + throw new ImportRowException(__('plan.REQUIRED'), 0, null, $row); + } } public function handleDiagnosisExclusionRow(Corporate $corporate, $row) diff --git a/app/Models/CorporateBenefit.php b/app/Models/CorporateBenefit.php index 8dcd763a..09f30fdc 100755 --- a/app/Models/CorporateBenefit.php +++ b/app/Models/CorporateBenefit.php @@ -131,6 +131,66 @@ class CorporateBenefit extends Model "Show Benefit Value" => 'show_benefit_value', ]; + public static $listing_doc_headers = [ + "Service", + "Plan", + "Benefit Code", + "Customer Benefit Code", + "Detail Benefit", + "ASO/Budget", + "Budget Condition", + "Budget Code", + "Primary benefit", + "Benefit Mode", + "Room Class", + "Max Bed", + "Tolerance Paramater", + "Max. Room Class", + "Limit Value", + "Area", + "Shared Benefit With", + "Shared Benefit Type", + "MSC", + "Gender", + "Min Age", + "Max Age", + "Freq. Period", + "Daily Frequency", + "Weekly Frequency", + "Monthly Frequency", + "Yearly Frequency", + "Custom Duration", + "Custom Duration Value", + "Cashless, Reimbursement", + "High Plan Factor", + "Pre Post Treatment", + "Pre Treatment", + "Post Treatment", + "Layer Type 1", + "Layer Value 1", + "Layer Type 2", + "Layer Value 2", + "Cashless (%)", + "Reimburse (%)", + "Digital (%)", + "CoShareM (%)", + "CoShareS (%)", + "CoShareC (%)", + "Cashless Deductible", + "Reimbursement Deductible", + "Digital Deductible", + "DeductibleM", + "DeductibleS", + "DeductibleC", + "Prorate Type", + "Prorate Lookup", + "Max Days for Disability", + "Max Periode of Disability", + "Currency", + "Show Benefit Item", + "Show Benefit Value", + ]; + public static $max_frequency_periods = [ 0 => 'Policy Period', 1 => 'Daily Visit', diff --git a/app/Models/Plan.php b/app/Models/Plan.php index dab9b882..8950724a 100755 --- a/app/Models/Plan.php +++ b/app/Models/Plan.php @@ -126,6 +126,57 @@ class Plan extends Model "Max Periode of Surgery Non Surgery" => "max_surgery_periode_days", ]; + public static $listing_doc_headers = [ + "Service", + "Plan", + "Customer Plan", + "Plan Type", + "Start Date of Plan", + "End Date of Plan", + "Referral", + "Referral Source", + "Referral Duration", + "Family Plan", + "Family Sharing Overflow", + "Plan Limit", + "Layer ID", + "Layer Condition", + "Budget Type", + "Budget Code", + "Budget Condition", + "Surgery", + "Non Surgery", + "Max/Claim", + "Max Count of Claim", + "Area", + "Shared Plan", + "Shared Plan Type", + "Cashless(%)", + "Reimbursement(%)", + "Digital(%)", + "CoShareM(%)", + "CoShareS(%)", + "CoShareC(%)", + "Cashless Deductible", + "Reimbursement Deductible", + "Digital Deductible", + "DeductibleM", + "DeductibleS", + "DeductibleC", + "Co-share & Deductible Condition", + "MSC", + "Gender", + "Min Age", + "Max Age", + "Rule of Excess", + "Max Excess Covered", + "Prorate Type", + "Prorate Lookup", + "Currency", + "Reinstatement days for Surgery NonSurgery", + "Max Periode of Surgery Non Surgery", + ]; + public function setAreaLimitAttribute($value) { $this->attributes['area_limit'] = empty($value) ? null : $value; diff --git a/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx b/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx index f5f3ee0f..cf4d38d5 100755 --- a/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx @@ -182,6 +182,18 @@ export default function PlanList() { }) } + const handleGetData = (type :string) => { + axios.get(`corporates/${corporate_id}/data-plan-benefit`) + .then((response) => { + const link = document.createElement('a'); + link.href = response.data.data.file_url; + link.setAttribute('download', response.data.data.file_name); + document.body.appendChild(link); + link.click(); + handleClose(); + }) + } + return (
Import {handleGetTemplate('plan-benefit')}}>Download Template + {handleGetData('data-plan-benefit')}}>Download Data Plan & Benefit )} diff --git a/frontend/dashboard/src/pages/Corporates/Plan/List.tsx b/frontend/dashboard/src/pages/Corporates/Plan/List.tsx index 24e9c887..477c5899 100755 --- a/frontend/dashboard/src/pages/Corporates/Plan/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Plan/List.tsx @@ -165,6 +165,18 @@ export default function CorporatePlanList() { }) } + const handleGetData = (type :string) => { + axios.get(`corporates/${corporate_id}/data-plan-benefit`) + .then((response) => { + const link = document.createElement('a'); + link.href = response.data.data.file_url; + link.setAttribute('download', response.data.data.file_name); + document.body.appendChild(link); + link.click(); + handleClose(); + }) + } + return (
Import {handleGetTemplate('plan-benefit')}}>Download Template + {handleGetData('data-plan-benefit')}}>Download Plans & Benefit )} diff --git a/lang/en/plan.php b/lang/en/plan.php new file mode 100644 index 00000000..45fa5a7b --- /dev/null +++ b/lang/en/plan.php @@ -0,0 +1,73 @@ + ":attribute must be filled", + "NOT_MATCH" => "Wrong :attribute Code (:code)", + "LIMIT_PLAN" => "Limit Plan must be filled 999999999", + "MODE_UNAVAILABLE" => "Record mode for member is not available", + "RECORD_TYPE_REQUIRED" => "Record Type must be filled for member (Member ID)", + "MEMBER_UNIQUE" => "Member (:member_id) is already exist, change Member ID or use another mode", + "MEMBER_EXISTS" => "Member (:member_id) for policy (:policy_id) already exist in database", + "MEMBER_NOT_FOUND" => "Member (Member ID) for policy (Policy No) not found", + "MEMBER_NOT_EXISTS" => "Member (Member ID) for policy (Policy No) not found", + "MEMBER_INACTIVE" => "Member (Member ID) for policy (Policy No) is inactive", + "MEMBER_NO_CHANGE" => "No changes in plan/ personal info found", + "MEMBER_EXPIRY_DATE_NO_CHANGE" => "No changes in member effective/ expiry date found", + "MEMBER_EXPIRY_DATE_INVALID" => "Member Effective Date must be before or equal to Member Expiry Date", + "MEMBER_RENEWAL_STILL_ACTIVE" => "Policy period is still active, please use mode 11/12/13", + "OPTION_MODE_INVALID_FORMAT" => "Option Mode must follow delimited format", + "UNIQUE_CHANGE_PRINCIPAL_INVALID" => "No changes in the following info found: + > Corporate Code (Field 7) + > Policy No (Field 15) + > Member ID (Field 4) + > Record Type (Field 2)", + "UNIQUE_CHANGE_DEPENDANT_INVALID" => "No changes in the following info found: + > Corporate Code (Field 7) + > Policy No (Field 15) + > Record Type (Field 2) + > Payor ID (Field 3)", + "MEMBER_EXPIRY_MUST_BE_AFTER_TODAY" => "Valid if Activation Date is later than member effective date, not empty and in YYYYMMDD format", + "PLAN_NOT_FOUND" => "Plan ID inactive / not found in the system", + + "PAYOR_ID_REQUIRED" => "Payor ID must be filled for member (Member ID)", + "MEMBER_ID_REQUIRED" => "Member ID must be filled", + "PRINCIPAL_ID_NOT_REQUIRED" => "Mapping ID should only be filled for dependents", + "CORPORATE_ID_REQUIRED" => "Corporate ID must be filled", + "PRINCIPAL_ID_REQUIRED" => "Mapping ID must be filled", + "PRINCIPAL_ID_NOT_SAME_MEMBER_ID" => "Mapping ID cannot be filled with the same Member ID.", + "BRANCH_CODE_NOT_REQUIRED" => "Dependents don't need to fill in Branch Code ", + "INVALID_LANGUAGE" => "Language (field 12) is invalid", + "INVALID_DATE" => "Format Date (:title) is invalid", + "INVALID_TYPE_OF_WORK" => "Type of work (field 13) is invalid", + "INVALID_RACE" => "Race (field 14) is invalid", + + "POLICY_NUMBER_REQUIRED" => "Policy Number must be filled for member (Member ID)", + "MORE_THAN" => ":date_param (:date) must be greater than :date_param2 date (:start)", + "LESS_THAN" => ":date_param (:date) must be less than :date_param2 date (:end)", + "MEMBER_EFFECTIVE_REQUIRED" => "Member's Effective Date must be filled for member (Member ID)", + "MEMBER_EXPIRY_REQUIRED" => "Member's Expiry Date must be filled for member (Member ID)", + + "MEMBER_EXPIRY_REQUIRED" => "Member's Expiry Date must be filled for member (Member ID)", + "ACTIVATION_DATE_REQUIRED" => "Activation's Date must be filled for member (Member ID)", + "INVALID_MARITAL_STATUS" => "Marital Status (field 16) is invalid", + "NAME_REQUIRED" => "Member Name must be filled", + "PHONE_INVALID" => "Telephone - Mobile must follow +628 format", + "EMAIL_INVALID" => "Email must folllow email format e.g. xx@gmail.com", + "DATE_OF_BIRTH_REQUIRED" => "Date of Birth must be filled", + "DATE_OF_TERMINATED" => "Date of Terminated must be filled", + "SEX_REQUIRED" => "Sex must be filled", + "SEX_CODE_NOT_VALID" => "Sex must be filled F or M", + + "RELATIONSHIP_WITH_PRICIPAL_REQUIRED" => "Relationship must be filled", + "RELATIONSHIP_WITH_PRICIPAL_NOT_VALID" => "Relationship must be filled W, S, D or H", + +]; diff --git a/public/files/Corporate Plan & Benefit Import.xlsx b/public/files/Corporate Plan & Benefit Import.xlsx old mode 100755 new mode 100644 index 1951497bf9e860dae564d9a6981c41d7f2b7e1df..0bc3a1fa02134c34028df76a5cf6eb48f9f4028d GIT binary patch delta 8976 zcmZ{KbyOV9vo;Xi-QC?Cf;++8-QAsmpo;_+cZUGM2`<5c2A2f);2H=Hm*oBK@BQvQ z=k6bSdY-DMtEy{zrlxCug+b2x)t$ov{A_p1?Qb9;9N{4#&>$cnd>z?*T-+VZU0fVk zeVrUjv>jZQd9j~FOkc#QF16C=#~N64SszCat4ZQ$ogyhh#1%geNKr;WhMWIf%-K;RFtZC}m6PGh*Y(VzCB_c?PqBIvqof>*D@Cc8Sz#s(!ny!Qe zHu?p8v-v<4aYWz}!i6OS1RGQeedj<-t^jD^oO@d2kPNgGHv!^)Jh$yhBB^ZzG0bq$B#N2- zHR51!#IxW}i6kS$1}0&4Mg#zZ^wENdRoMrV*@z^yUNuJIIQaz*2bg&?Di zBqTx%)lhyv*{Gg^5#UhBgtgri4Q3YGEM7VpSx-=O+o=d4^cUtLYxBN;sUt&Z@<+nv ztI9fCuY_}-Ib&{Cn+Z8P+7*KTMIs+po87xKvyyM8^LkJK@WF{DZqf@=}GRK>K}&w#3d)rNB+ep?2L#IT-x7{Pi{7Sde(ikoNF!Vx>_>HCc$@jgn&3fZNQ?P>A&JQnBMXsB)27buF zAE(Ppdo$DDpgenR7unk*5-Qm6;;Oh5yb_@8uU9vkYWWyKw`yz-(WxZw@1fg1)M8|?;*{(uPFM^2RWyWK4^ z4CLj_+j^daXBt6dx1SvuhA!!)NIyxVgabL1dSI_-rU%f2-+n$TRT-_X58w$qY zTRbeu(yy#2ef{!d#W~Ib$5)p*06U z+V}wX$bHu$x(F8>b6>u3$*9usTSFH;v+tzYUE+bXF&$- z8%eW!Hi+a4R_w-2L~|%at8;>~h}Zp$$d>#8mjK}SyOGlkTxQv^ht|QjsNnVVf%G!G zYDswR(1ABwoEscUtMmGp=>x0M(PtC&*;sH&65g53_g~8H@-6c76K2PB5|naR#%grh zjj*zQQiGjJTPnMZl50(B*l?*2lop-G^jqAO@+?)1jk*He?g~0Og4s&tdkRm!Te^G$ z%u=m_n$ndPKi-oYv^LBdX%ODFbd29i(v4MjR8(-K?MW}BRMOBzY2j@Z`Uq)_w6qKI zHt^6TD=(CWK0b5_UhOYvQg|yZu9BePr8=XU)~hvfs!XI%D>eB8%ZD{9bL?lbjH8Tx z#~bOrWJBzyPc~peEwA?PLdowvyhrbVyQ}m?PNq-O2X~KQj^)FGezlH}T{uE)G=fB3 z8GPF|SvbX+Mm5e}n#(+Qsc52j?CK9m4|tuwvki@$aWsESFdpnUD;dwu9}#IM9v{wN zcoy$SicW(V`0}k-n5ZZaX+YCaXzn&^!|le&XXlYL-o@9sUBBK2(ngVYb@amm3{1tR zy9cwPKOvq}@NlW6z6~a7#BbJ;Y?F0ZGWqP*^SXFGDLIXk&Y)LhxQ$vv*9Og?ot3n& z68T`P`9M@RtGHO1Ku#xWkJ|8BmpZ^h)XEnhFF;d{$?}Qhe2ev@{n4QNt=Ebwz@xf~ zLB7($#WRcmS(^@vzLG1{jr{@vfYldc$c2dugR!~*MfbuC_F92)b68f?pDdu*weUz} z;zSgGeRZes9pJ_QER9)lk2waB}4Lkx{Y7@yDVi3XkD9x%h<;Xiq%`I*%t zy$hFE7u|$`QWA??6PdBQSwv7tOE`{dC(oPvC2#i`2~**1kxfb@Ws&wRuqEXp5HqaL zQR7IcM@pThoEXtBh#MF)r_bSBaL!3pJNE`jrf^qU`2c!u#pPj&G_ssC;gE9;24t0| zt1p!n5&z`5q-v23A!%BD9=_3w(at=~lzq-Q<#?k5ngh8lCJ%k7J55(hTF|+-~o?CWy z3Ljh(>kr5J7oraDZ~L(3?u0;8o!Ylb=t?BAzSTWnb7eJ#FpQaCiR73+OARyMd>d4! zMAu`AME+Sn)F5VDjjv=LP%36x-Ln*eY={!tqaWH5m2YYu==db648XYC!<6-I-^7cl zSNHtJ@5UegcpiAkmGxOntQx;z!|%Lb{%808BP0aG%ggH%_~j)fb6FW%99tTQ_y)&+ z1p~>In38g1Ptw%s*@Z!Ufq){Z`m$zU8Se30q-@s3vfg3eYcP3H!`XYCjm_opZv5`x z=lxJ^*HN-ol_dN?spdk5IP;qPRYKUAOjsq^a|Zz z$?9jE+E78wKAB6Iwwt^{KHQY-tCp`96S{r4gGX^Zj%M8x`cn9HT-x;!2tpPFLiqJu z3-w_HLKYN4_zhgz4PgvI77Rl8ja&;2{Q^X>i<>#|ZzmRi zOpxw50#!B%9=yLBhXja_mbP=^QBK?@24jA|>d8Jt3Do|wS$u-i@7RCiq>x{=G=IOo zrvthAmS1uMBOL1ffr^S26G~@N_|b@OBe|76n)4W!K-tbpH-ug4k3u-bU$LBIASND+ zTI3UDKSMP#5_%-O@O#w|_5mr0jY9&!E?Q-)h-&ER4Jg&ncLQ68{S=t?pu)MJ63DU1b2z~0t^P8C+sUmgVESnHiFE?p zz|f4D(Kd+9xE?Ba70?>_17rz!0X<8_+ z)?IRMmq2H^w_6~WyxYT()_^V8dBPTzmyTfjf5=`pQ1|&9JoKaC3OhoIEvlZ3Um8~m z@TEalLZ1ldI+=OO(^!k6eJKku85HrkKjkM2_fd z)j$p?xfIKxN1idA0Aed|uHb&?y2*58##=jonx8n%-0+Tr`kX#^H)Z?spludooq}X# zfbg_5%%-)fqSfLe+Qs8_ZZ4>^=uH$ukML$T&0D8QW%+!09gXjZ-8E?XG-j#Uny8xy zFSz~TI(=DZ`E5rSM-T*R^>SoXx2W^hk5o8d7Mry}cD66K>m;ivs%2H<_(Lv(cYk`8 zV48f=S0%Nk%|)|WmW#TFAg!#)W?`PPlS$g#idfPupQywA;cABTA3V}Gfr4u(%>wVg zT4?D!J(v>0Dz)9+&n?yXR#BYs6~=P<9&M=feJL73&If$eHBxiEyw_zni1RI;GlEHh zJvTLFWwKu;mQNMy1pj^N9$k&QVG zkBD#lt*he5$+tGt{pQRx;LFm6fonV+u-sNAD~wG1vIry8$foQCxEukMMnFi`G*~$` z(N6B>xuMqN-L>a_RQCBD#EA9H^I|JzdBhLO)GaPWgZ?)ggxol3WU4xyDBDMi!m;Ws zzZ|=u(q*^rqY#z)3xwO&c(HqJy?8?-h~AkJD+Puiv6!~OBH_y-LFSs});5^~&_%L% z_#-rXAK!q`>U;Rx=`pMnYN7~CGE{l9dgKbJ9h2v6p{O#MO>k_BB?;M$IZE&Lp{Ux* zLERA^6cEo`R^)-qD-1YTRpe#zM(--f->Jo!m`M92nUS!Jhx6lbsp=ei;XpGYj!ONK z#|dYQnWoz-lPW<>sQhUoRUShCd}0cQK`O$98AsM-H6rWN@-?QYE)9y~PtBW+6Ua>> zm*!BDIq|n6*O1LE9<9ccuPZuNie6s>X$ur<)noK>3b|mBYJ-jImeK3n7Yw+ZRg$2Y zW0(|FG3)3%(E_UB4Fw!Nuc${hj<&}72bXS4#8JLidq=>+N-2F@R8VUIxR$HVf=y*= zceab7jj{1u%v^m5KYGKu^c|zb3`=j`h2R8KPsgE^ZLciOSGuNHOPs7WR1(`j~wxzWZ?H}k0QR$vDiDUKC2U=a$O%Jfg zOhezKM+jxpda9`++m*BePwH4*^uk?_skHvrDp#C3^fbO|hV`>$;cPKX4GJI=?C!mK z8v&YNwM3N(meG`3Y4Ksh^CQ;W;0(WDvunJhbj((IVL!ujbtwD@wxZIv!lc2#%j+Bd zf7cjUtM1#H=;0wyvXJQFirWww64nUjp(X}$QmZJoHjXV(2;giO9N-1`4Hm^ld-cX(%~2KotSXu&G67yeqvd99ee)~=e>%LZDIw4ke19RCL)_(p(2)7 z$o3Ud`~#)^fy(|sc1Qv~6M4;v9(%`jZC`CZHJ0z<0!gPiN-QntUVBycZC%z~VE6NS z3Qau}Gc~f<${&w9@Y;0`@T967RMGsHug~1!@RFkgV`V8=>9`}Kv?FOJ!`h8Qe_ipQ zct}}mXpCBn|JM1bEH!h|)#*eVxm<;h+XOO$IUJY$8b`h*hYxxu*PdtWr#ir&R67pD z^>viT7vs>&mS`%28b&z? zencH{{rrFMl+uc&ortT&1SI~qJ^RN0F`)!GCnk`Y==pYa3^ZI2?PlcM==fzg{!D5v znF8b5wxA+YuHGfQraL;vnEtYUGh?2$_Ynr&pWC%a-si8jn@Gr670 zOpsI-W`}PfI|gQl=bJE@1q0&;h6+>aqAoSaq6#^Ut#~3dii<%MS*jzJ+U=A%Ld@y4 z@_ArNvxMPdkS8+HcYCP_e4VCasBnk|vUQm=vSpk}@!h_ckn3~{ogVfd`@~Me1Csj8 zXV1ZnW2eyR2Bx51YaO+2I>F8-GIaK6@ zbd7n-saK}MTb$GnQgaV7S+8qZ!Oocl58`uvOQ`4KSN*YQ1|0nx7#tD_Jl!V##lI&! zA)eq-^9z6z(lS2s120cfr=`Npe3LS#Jmez4kB_63xYWJ`p}sEv!|6}2;+RT#%0qhO8t|XSJ9V0 zsR2IzlbZz4t7jtgf1-6z#JNuV6RphOXfHxBUehKk^Zz+5Qyo=Csq`n3@ByM0()g;D z&IJv%139UH;sr?!aM>SFVk_PtL1u6n)nJn7&H=QWz4y4cd$)R4n;-n(MR6(o`{jqk z^MNI-$CG3{0GaGeg%3bLVzy+O*?g29Yj{B$pkAZ)-chuXnO6vk>Nd+S8Io`HR6r~~ zMUybk@A%^Jh~gt-hf(`R;hImzWX|{2IpQ|bk81BmJK!hlig%;``hnM{)1qx{x~GMr zrQ;U=>V>WD@24H2#0@s!GWQ*Bk|L-JP7eJQvh=}z=)imA85_V59DRB{Y&UmGOqoeW zyw)T)Gyg%dS;E3Ksy5`kjS`=|(-oD};ZX40kR<;-MbfG4M2SEKtG9im^)md&nbSa{F*e))203i{%zFpu=iA8&pU=!usgGw7+I zgl_JRHK?G6QJcI&hSZZB=4NQ>Ai)f=lqTfH6)eES)TT(d-Qbv4SGbXa0#TksJ3k7rSJpFFreQ>_KfL0!^OYvgw~;* zS@>-j4iDF$T;3u{Na<07nT(iBVYeQQV#|};GB0;6X3*eJ+_mQr$e+)AW|J61Uv=-X zVJ*`P?KA{Fb5+o_TTFW~#L5%mdM;$P@z_d|USQW|8CuY^no!fS+}A0iF(B@dV_XqP zNmORSnIXHG$B5PUiF~_unw`XuyY!#^GV4F;@m#kRb4hYNYtb!et1L1ZHEv^?vu(+Q zaQwb92%}` z4HoFB-6fctvC6oHn`7edqIN~9mdmwZvti`$#XBzKDHRHLAKBGZaQ?7-nH<)M<>0hg zcYAiP(#HL6M{7KI5>U;Ym|*9$Hhyg&Y$f7rg0kfab^0+`osYhDJRY$H&%R&3_ zu<>^Er%*N-YT@Jh!8D89TR zV^7T=!LKb3g4dTFlz&eCFGnC#7t|3K!(IXgsKV2ujC5}XCyIx6n^{2dZ^Tjij zvMN-d^x|r4GsDEMo+rIV>i6Dbr0_Nd<5klPE7>q%z6QlEK|aV0mJT{7x4qFWo zdl$@}($L#O6Bbv9zlnEW0GORgD))fTCJ{Rsx>=z?eT1iCx$y^3S{%Yis239=)zON8+cb~x zf?0unn@a`r+l-IWYdoQuWKm{ne1X+z@J@EZTYbt|K27ZCpv<(RA=O=J=fN*1}=F`bm46NxaIN&J}*J4;`jI-}bS9#HKg zTfbWT@^|ARLOphw-n{PF5bR_$Hez7ed6^$Q$i(!;jNBB@pa3*uZh&2}O$p9+4sGQr z`utUdbLIynBbZgb>0;f-v)(*bQ*1GiOIDb8V)t7d-5F^Nad6R$VNC4C*8@EWddy7s z`gZv46{Gx41Ti97^)$s$yk1zZbLaa#GOTKpDZN6r_un$E{qPT|``;gEw8;SCNu`=F zTvr;^5?$KE>bVqIlxQY-xm~D8gVGQn=7_?8Nn;pQ#OLAx+m2r@?76lgxfynGhjc2g zm{|wZRn1u^(i2hu8)Fj~hS3$_)7#eNDwdKT>{h0O$nOmW6T0yZk}nMmi`1FVjv7~^ zbkjzICFt@}V+h>EUmkgwe7ga+%DI@WI0kpzKw3IhkGnA|n$}GizMv75<-|gfiIoR1 zHiJ)vr&bvgx3W-kkz83CNN5_u-mnsU)0ezU>fA@k4m2NF)g_GIMeE&h0h5$ ztBMrJsp&!X!x+{uJ7~J?{OD%+l|{QIO1-+a;LEkgTufeP(P$z> z&+uSy!Omvsn3-OaZpySugep1@Tb9TJeiWVqXYVg1G78OvqfYLESUS;JwQ?IHI8H==Ua(aMzLFkgy5 z$wv|R&2&8V48Re-4`~yyJfsgPGwf+TA)Ry!3Rxw-X3}*M`c3@1qecOTE#&2v@zb(a zt2L<5|4XAVD6d>;2H!`P*sK!P%Tk-QoWvuiTJ4b=zjbvPb{t*k4QDwVG{B)?`LZCC(3pH2*37rfHodnfXMJJc5 zGmf7-z;EyU+m!fsdqcgB!KO|Jk=?ht5FIN4>Py>>UaG9eXr>S7-EYaB)aH~;xoQ^Q zPPW+{R`K;rylaNr9D=jrqS0q9Kw%5vPyW)*u}`IxYJoIHDpubohZz4^2`nl`Blkf5Yh z%56{lj+0G+gu%J3c7A?pALq0{t4A&j9`-GDQk+enwk^qfEBt_Z*zq7-BHGBY2|H3? zYr48_cPqXYLPMfVS8^i>?t@Ry+y^O7F$E6FlMV;C5Nv$?Dbx2uerema&JZ7;^6?^f zN-DH|Eb-5Z-=wg76(L?GsvR_6ztJ;6CY%->Qi)xDFq_lNT&;mF@Ndaad#H>4WXPDP zv)t|{|MPLa0`p};fdN*CmiQck6LeND*tN>x$6Vu*B~Zyw$W4RCkjop+$!X?yVYo$h zbA(Zj2K9m!oAORwpS#5Lv+3O~!UcRe+}Rmm3_$(q9w&Q?qc)len86_Y=U*YoVZ`8dJ$jDnF=zLT=VcH??HMdU;CPAC2L%EJ!h=9)AP~sIhSlBP$@+`Ey)}!6txch( zp8XOxwl8VzYc7Uo67@)Y7JM=iV7K~vtaQc<9~nPVLjE(A3N`&FovGI!^1i%o9U+xm zm?Kn0z0M~eZbu4uG?EG77^t>9{T(KxV8_Hs>I6|ILmrDfBaq8vNaBFRT~3h+^?aT! zQUL#5i-*_t(=f>YGc27-`5Ci(Fv3{q(RtubZNn}FC1No}vk5s}n2A`~i0WwFaX=DA zasg~NUQPG<;|HYu%n(y4=UIRFbWE5l(;mddJkt&9_4gFnBR$BTnxH;P`82O;(YUy; zFAU=?WHIzZ)wSm8kS`dpXEC<;nI}{Wt^5qedF%0~39oQCz$DZRpI{wkki7{PuMvuV zSMBqP1%9Q5cYnybFJ-#>=1%Up#f0iZU0tP#rnK1Q;PkvRSjo|Fq)%6Z~y3G1*=0W@*(Jjs)JVyCPl`)sv$ z^TVRMHOSZGiq3#Iw?yi?>mrmC%H#_X|N7;hD{XtBS{Z7?ydPVlMV!{1%DA*$_yX1X zRC!&T71l%`T z+J>_l7B&QS=NxfImtL~k4&R}f+7G)hkA+dRVvEPyT`}esWz^E;Ka2$pFn8wI(eNyE zrm@&%=JC{zkHaeIUqDtmFeCd;IjjqndO}DF03~G%|-FY0jo>jjs+|0 zJHpu7@57q3v%gdonBQQ`xy*1iQk}{8b*~s|Lf->ARqp``m(V`*%iGGoDit@X+7}VV ztRvb6!0efiZzayfjObJ;NPlA{2;HXJ@kZ6=YrK3PlW6$W&!P9ro=cHGWOlod z+ALed<*tC+tH1E`1Fd(CJ)6G9t&Qr-z^`+BXuXNB`?3h0M!t}j)n`zsb@cUPjVA0i zIgo{2@p#Ynf|sz4gWWKX_yrR2o@=542>}GMVNZC$ApqF_Dd`kF`wTYh;8WUTVX`&6 zGwGp_cukE8t0XUWg-_o;K`I6!^7a;5avgV`;`54VSk_x6ZSqii9y^b31-1R~qIWvg z(d1YA6Ra#umCb~eWcJ5T+|Q@8O&eWl-Z5>Uh2c+dyPQHbi!h*@qj6n`raDK$o9HEu z>gxL$fC*4Utq*OgiLM6=2x#CqqS#mX=EfvN&g{rblGL(A22za6P4ibW5TP|KnTEA% z441{4uB5BKkFnP76f%*HvXlH`tkpL=v+ogCx(ScF#58d*Kal7lS>L*rQXc+|ukTq* zGSh<nA%1a+{Kb1`av2Su8(v((vf0CzKrH%I0ZuYYYj^50mVTio6 z0co&QKhdw$BDoaZ=h>c{E>v40lstV4E^>5qNey4&4d5AiLdW1&pNq#0Oqzv%9or6p zMJ@v4mcl@+&83!;yRzL%IU3{4#ay5%g&c~ z;kYPP!C}{(``2CKvrbM!htH>WEu<;$0PUDlX>TK@C%S|8*E#THb7oHXju&Z4z0~eQ zkm}#g{V_h!6dJ9zbS<>}^c~k3Dx+^UWy#CnmJh&4>Cx-eaU)?v-C)9<%52RQ&71k= z6Cgqwn;bAnqSP>>E2P7lzcvSlQ3O?xsCXtSx9`6Xeo)^26`Chj{TNNrEOj*uT(3lc z_ogx0e&OJU?-5R&Qaq|sHoD~EM%o}nexJsu*{Hp>6(HCgf&H9v!Xm>=R9Y10t*5=F zJ($&WYTnFF-eB`fm-dJ}c#`luAldLi`|-Pnc$ITPP>IVfM?SZceKK+jS3Y3HD-4BU zz-`s~>)pHU)Q*h>PkCqPMR=xU;4*m!z8+)mJ%mX#8Bu^Ou|?wt!YlJ2jBbuwIcKVc z(0y4^zk4FT5Uey?^&wW$b0U6HPu@*y=pDBcWD;q=s687)z2-WyW}hxMNLt7;u6*Ga zUUN;dx4Cgw`>K&ON|7;>F{@Fa>r$Q_-k@<#k(vtkl#6Ia;iD3ccW9CU6;g&VjY=>S z46qXSU`6Iw70OnPv&oB0OwQN4r?*Y`_4REBetk_$|75=;g$;fU&m%>Tz%#(4gXR9c zs#UdQ$GXhZ%N1MF7>e@k`Bu*>Ws{F%@Jm|B`WCS&$27TgpnD7{DM|Lz%FN2x$z=|Z z0hMVts%Wc*<$S%YIxzbVG}<4b>$rq5V7 zW7ScvEcY$*o? z0ZfE~Q22->uPbw_B@Vg&VkSejvi3$2z{ix~A;6TGCy-wdYaiF{#l3KyqY&#F*Y3x~ zbQ^f@hF-@pR~HnSRTujXd=!~=B!}G0$Jp zIEgcNbHiXJ5OsaTZf-2>{YIO7qj5J5W=7#0zmcRL`F1a#lm&zqbv^2{e6pi9pVpT$ z-{qL&q0fg<5Re8;@Z8a5M2~GLK;1lr-7805v+n*_{_!+}79y%(zj3Tc8`J9LwO>7m zwin{6~QzaO%4X!Dse@c+nGjx9% z=Ha{==27*cev07Qh}ryl7EuUBbD#Z3BjWgvV6Z`S(pd(k(6SCJm*W1L6Ue14;0gt$ z$iDAN?&01$;(_1!qF6Y5@M@yulnKT~x>kA}0}T1FHRK--?wU=zZ$0s^>07}J3oQL~ zJWDuQpsm9qqAm4T25hQM1zkNZGkPbt%p6A-TA$fj^788LiOo0)13wBc7^v)D8~N7= zfhB=KSQ|Aaj7suab)8^1ko4zG8Ja|t?#+^<*!n?aW8{B)(2b6{MeX7>z1ItKQ0T)# zkbtEK3(XiPboY{Ekt^(oUc22sWh()E>DN&EvnuE%yd*beu|kn0FyoGJSWi(S^Cf;C zmYc19EV}eash04{dN?gSFZ{=f%uRU8gg$~~SmV3~Ao)FwfAz?fAq8tuYwT$CKYsqN zL`Op!!|ajkfm4GP)ept76R5ZV8H)Ih%|8uVVk#8Jt{P+3#gH7{S?M!JIAJwv(~MTI z(^M3TjQT>})Y#P1`dUfl!MYmMP6lOKaWv=zp?`TeB~S%)aX00^e*v2{>*^(h2Wk?6 zaUv#U@u4O)zf%7RzM@{#)2uvpKjOssUD|q8R5A zV$}H(aWsFKlz*95Xa?mx%$~N=O$Q1|p}y3cVPHA1)>}mPCG_p>0&L-!mNjnzUPY_F zRP8A?fj4%cmY`C8*-?@=);~dc&E#txC@?n{e!x(oQm5$H^u$y!ty#|akLQdx&-PYj zJpXu}X3VCYQokAL2vbRv@z&_DoMOB#PWHn3|5v2{znZw8rn5t7F&X0Y&jrJZ>$Of4 z-d3^y@cxMw<`p8r4ks8F0Y!5tlNXP9``GTV>Y#&1u`x|`86XI{IIqOq^;SgElfzc zGCPoKuzBC>)RZCrHYtOI^Fvsv0M=mziZj!jYv%SP5;<+7p9~gbj(9IL+?}uF^F}`3 zju9SI(|7HPp;As?xs&KK19T+tdA(m|h*!MTH10UT{zE5KzJ1cd-NMvt^7F!hK*RP| z#+;vLr)*e;uYfT7p5=~5`h(pe*H_22hL;u;)SXlVhTB!m*CaUiKnIt?rb$_vnb_6m zQ6YfyPwy~_z4%x3y0MMxpnXI`qRj~G;!g{RX8!ZJERHdd>G$%<D#CiN*YFdI7hq zE+;=EM%n0CvKqJ~+4xaNV)afTfUP}tG>1F{^+ulVk!Z_s87k|3c!?Miw)nyHER^jP zILIxFe2GL;;}$%#geV#|RVsuf6Rz|w8JbZ%7=GIv*hsB;=MP?8G9*^Pt3A5#yfCl> zB6r%~sd2E%$%^w?g4NNB=mrM0rjBi!F^T6KchQD_is;p)XrhA!fV2{GvLSO;4{w*VtDXySq*VGlYk6tu>@b zad6G?)i3)}hG}E}AgId_#9%bA;L>UsA)PS0C?wvqort-NHjaoFK zXQ?(NeEn<2@Da2z54|LQ0f65d7ijQKlDHssTDLs|`#d6$WY>W8mkU=a1k>UW9VC9g z60vzWywt`m77zz-#3inMHbW6O8@Uc%YrrOt?8%v4=FWpR!v4X(oRu49h;2f74{c3> z-|r&gRFl+Km+i>3n4;FB{p!$fnuF-o`e&SX$GHH(7~9Xeo_!9?4j>+I#cuR)C}RDf zql@HJm7|ecH>&#;ayBdMyfG`mim1fu9i`fX*MDtpCwG;9<{ckqFL#%J78RqnnFx{+ z6|#QG{)k|RErI;lpwI8Cc=^;b&DuvzZKdLI^xc+$+Dqk5p|RF-;Mx5A^q(&1AE^AS z=e)#?{=`TEJo~2>Qp=AlWRp`D=hV;8*#7?E`FUcS+L6|6=4LI0N(9lp4K!|iLvHJP zSYTfVI?;4tArW3(6F#=jv8!SEA^7Bc@yAJpMUmvS_4#SxdH!&=^)Y8u@^*J+Ek+3~ zXI0SW-sO?gP{{4Ie6D63kM=crbg69~c=^@|w70zi%f2lhuFcFoEAS_}Hsfy`B>c|ceLGq=<+QXYLldoY8Ns0ZS zjI9Fu#KbyFuAo7yjxY&hhJLvfAq!uzhEzFP<&~igvCNymX|tEb?LSe1&R=*=6Txmf zg_o!U9!bcp`%hT^(vse2q;IrGq5wKKfEK;~g!GMEHEj2p(aXA?bUu77-DaqX;yaCi zQvrVUaPl%;xOF`(Pxw~4%}5kQ3r(9-fp+z9^D48X)#=sr-l$!r$r^8-34>62Bn_=CgvbD}&A3^tLJlP*5!^<-BRhG9>TCy( zp>7C$gffuyTb0K+U!TYPBab%nUa&}`9p?4iHNN11RF?|RutNjoQ;;3HxJv>o0_BYPQw~rvvLTTqs@}2a+A59B zGPZZbdiKU?x(T;`g8;#8KsvC~gIudl-_#8ml6KAdt{~}nK7zE7;r&G#K|Nlgpg?47 zk@w3-@JnQ%KJXxz7ov3-xa^1Ab2foqC;JRyp@GTuMT9D*PL=!9LcrbuO1^^b`XT~? z&WAytLxMy%$pyu4m`N|dLXgog_^+0~ztbGX>RQwrj-CdI!Q8$6}e z6}k_@R@rIATZgUf2RSvGQ`#&PO2z{Gbw6MG6dJ|?e6wKHe*uJ~&0YoI4gB!19y_Ps z`9sXSk0e~Mlls``*r#jwj37}1Lf)2TGdOmnDL^&WSi30M7BS#?}fC z>ktj91Y!mg899@ZhTq`}bL|Us{=6`g)+7E~&QVbzqr+u_Gv4Kq!ou~%c9WxE+KLP3 zblffD$D4qGE%wiRLUe^t;w3P@yp+w3GF4HIp{z+|Wphb`rywy+g93~9RKzZbl*RWw zcHOR#%I6@}B}62o2ois(*mrg|KGS7|mEtprRC)+=nPJntzWK4t#+;mFqoo7NB zC?1qhgfsip1Gf*Wd`L?9N$*3xVy-^wZV=(R3)@0Qp-rN=g={|Yd%t2b6vY@tR9I=} zLMp*FVCzl4nhC|PXi#EXBvT4s%NMp~I(#EJaJ?R0L7uxVKJcuZEj2mcV#SHrB=HK5 zU@d+s+8pX7)sg+DkzO+F>9jG$7sF~w7u0|J;uH+dBVgN$pup0U5yrq8iOVGv3c)LC zZ^g2+6P%U?n=hpPAr{(+rJCmjpJej40`5YhUWrZqZ__n$gOn`MQN_qcffbn9&3jR} z_4+v^%NA`SsF)VphzXnGtW<8iHN^3Avfh1MUoaXyLJz{3!g zmTogN*@2HhqzZ^sr*dJ)YdILexA=^5!$41DUouJ6KftwBi#V;lWp%DS97AxbvE!g4 zA2fErj={$kggu}OReBwR;nY>9=~3lV$@RVJZ?gAd-;#Y(P8K!XZCD$fn7Wf{g?i~C z6Yo7Xn&$NxRVZM2#;dZ)A9$O%l0L1nPbD?=#*+S?S|G7ccIZBJexbX zm;$P^M{ZI#)OBhoaVQ+3an%GF&kqu7dKm*;EV>&}CVKdOLkAJbDYm&0I?s95E2ZJZ zE{hP+VE=qANv;qmeyZUtl)S|f0p%Q#>V^|yrrhMfD{X;*d=$De0Djic6N~ejVehRY z`{FP+zwhDBsg0}*8D3$83f1@?KbK^SLCf29H%JWSPL7RTgsapv?W|~>UCpJE8Yho1 zR2uOV1}Q`>jrh7x_RP#-027C^eyhhY>_pbpgm^f2`_mt1{F0<@-nZBzLmd%w<{psi z83Tw0Oh+P{)XMjP@To0$dIVRKT1CmlGs|Oa6qiI#1a%q-Z*Ub%WD|6s%N6oOQ+luS zyZCLEl1X9kR_H<*+uTEm%)7E8OL}Q5J%aOv z3c+5NsvS1H5Gp=CupPxvH_RWo!@4G@P<-DF%__P4bzcjHXtV)cfdDVQ%6+2# zLaKJtS{uQ4J@w}<@C7!N3IlDcN$4>p|EW%>DrAzrc2!gd9WaT- zH^glo;5RZZT^Zpl*+<1^h^%#R8M$Sgn^moLE;P1QFEOr#X|2fH^9j3Y*V8s26!h7` z;+-~4suRDfyN^;`oAwk)z0POqdn#hnIeW*MGnJRB9eZZ*pV% z;V^cJY$_VULd$$MUs$x9sy}*#Vh6%_!rt9ar>QiluI1S;(C#~mk!6V){dyLaIdZ;r zkM8Uqr(@o96)Afe*oz=US*=1}W3%6TTD4MIX<4$<#LIfLo6T}xKKMSLu9eX-=Uc&L zu>8&Y1TEx9r?8BeUm>Jaq&+eUH)3nrBGz9iNAw|*5p$}8gg@$cmN?aA&=a5+L8W)h zYr@D0n*zXK3tG3TSQn6zs|w!~2oZKop~blfy9|uIn5?#n6V=q`P_r3ao%~*T)Sq=- ziYi~SP%KZ_Y1hkQDZbRH;mf{ijUpYlh&5%yi3{Uf46_JZK2JeHG%f5~0!@@`P=WrPKbwt}$IO3^^5mDE3^U)^Y+|UEk1PQ-bVe#yA zfCjLZ%2?igs@Ro}Zfq|1k%NK7|T}7U2=_lrr85DiY z3G{Np77ryMQWhYYco}#;r*)%&yTBpupUyKnZ5lq9;qNeJRRuqUwMN2TX#kr1&$LqY zd6#5h(y7GkGE2Exvjw5GQuU8#H181%u9B$jzpg;RHMopBrRaZ~+2hv3BUrR1cAUNK zpG0U>e7N=+xCVEjG$Em{mG6|0SPNjxt62q+lUEHx3Gi4D-&5EehK@JXXz`3Grtk8G!IRfv`gscxA4>&W$vmvhwwFTF=P`wQnmq9Pu)Xf#q#G1MC;b#$b*i4G1LjXQ*JSa zb~BMC1R7rVbi;D75|s`t>kk*bmenTA^1g82vzg@66O3D(?SYdG9}&pyrP#os%U&&S z`(IHqSW0ntR@>s1pXKtbX;TF9u&^OiumbyO$%P|+wnKhx)3N*vIO?-O$@{l+j#DR$ zsARYX*8luQYK)tj;PxBJ%%!T7UH7X1M+v&U@m1t$vM6EASS86C=^0lcES>R(Y%mLZ ziOrf9a*Uyp$_rp1;wMb;P5P0JDkW0~$0|19y_*bp(gHP@GdO%oA`BT;@%E{`Mg#+* ze&t$tX z;l8gE?3+-xR^$IN$Wgt9gAjOQb5IFD*R>9EYaVy?IYiEVi7~S8bxp6o46X=2R*+_I zI$D_eB*hb$Fb9o1J{5dVqZMrt^o;p5O*2Q}Zizfrc70+~lyBglW@$@96w9~5IX1=% z=LM}8H~}DPO%&E0Db%K42(FzW8z^sbt|57MzUnYRO%4NGHE04qXc!s>&(J&d+YM?G zEm?wcGF%Q_TSZ$`z}4f8qZn2*kDV*C8m2&JgPk7u&ate0xl-RRz(ehk%-f|HqpB)}yD@+Q1z9Ieq56yU^X)J}Tcx6G^ULn4-s_hIrnWq)NV9WdZKEh~afFN5)C zxmcC#e67<`9)OAuk3Xzf?=?t)pyzv35nE6mXJrZ65UJY`LBom_)IW?)8)?dz|!*mi7cjKx$a0%$O1Mfw_?4^bvo{|I++$jCaYWpiaw zsuv*qd^Xmt_4$KcW=f63Fr{r0F6A@cA0aQl9gXubBU7MNOj3b@=L5E&F-u(as154x zvcY7W@Sm#Z!LtGBiB70arXxxO~A}5K)^nfH1a%U^A zh(GOaGP4wLMK5>9N=q-59t=f+kl)?TD7nqkcTg4S4ve?#G^fW9^(r;xFhwU)OFGi7h{aPw{~K8T|*bvz@1U)Ul1iwb3vazBZB}>#jK2uvaN@<|DG-0osO2Hhq zh=DX`HojO}vsQ@i=LI_QA(aBZ5G&Yv{p=^_0cnk?pFVsB!)D-xSSTQ(mYi_?qDSA3 zE;ZaZPowaOz|YG9^O{D;&G1ItfiC_|N3A|^1jp0L*2y3Fc>K=LS_oc6-BpA>M9Xs} ze*}77n>aHEucu&0R5cqiO+~hjwP&R5-p7=eQcvq#tTY33K{_Tc!1Pq9Gdos2c_nTk zzt7L|<9)}18XBzF>^N{-F-&#T4qjtUfA91$Iy@uZ87$p2yAKbp1CyHDzI-!$swdw0 zj#K6^QqFQ5=t1rSbGM4Hfrl4(D2WHg>*2}0pz|;O9P5hK2}E;1G#me_F>LBsL0Gii zU{GlXy%=3et~|!GD{yh6eabP4B{^TUbfzbke=KSY+-Q^5N z*MD2v|I7j8t-gfcD<7s8l+s|5Jbb9fAUG&4HUUE z8*6wsM)lEr<4TCnJ%QE6$p=e;xT0WqZ%&j%3DesZnLwW4n?6=?!%WPx-4eS4Y4qNZi^XQ>-%b^7a^ z4UHreQaatdYOS85RK~T9=wYpG3vqa)DY7YZM-kNWG6ZAii9EwzclaNkNdM_g>RFJX z5Y`5xj>I59AnArdb}|S69H*z$OZIk0MBxby<(9e8)tTHjrF1b#KC)uULwen&7e@|s zd~<5LqPZ)*N$qJslI=`a{ApH#)G*7&HEbH33(sl)^;ZSvhuH>?K#JWo+)7KXL<=}n zg^JOLK%$XPNNCMmh8@s&F!64Q8JJZaJlMvA^SP<=V&WkVi@N=Q5ASar?nwIuLO(o{#%!jU?`oSJX(CoHeY8)g?Z_SOmhD=|M&pcFde}ZC%}9b^EeAqmyUT2 zwe(lCa*~whduM9ihn0KK(FyooBm7Nkf~Fv9gD9sF48s53uuG`mQ-qjFc;I6u`uAQA z2!#K(ZT$P=N)Y2`B>wm4>%aMKxCvqW5|DDV2^0L(#Q)t={%ePbF#%nGl=#2*r+)=* zSrX(0L?F9361rHZ6Y%)a6B=33k^klQa3-t@@Dcy-g8>NwVf@Q|8~x-?;1K)(Dan`M UBq#_8A(&7r_zsp==&#KG043^M&j0`b diff --git a/public/files/CorporateMembershipList.xlsx b/public/files/CorporateMembershipList.xlsx index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..176d84bfcf718836a8c3694466fb2ebc4953936f 100644 GIT binary patch literal 4212 zcmZ`+2{=@J7az+Q#x`Y$>|RUAmOWmwZ($6wg_MyQ2AQ!h5mF7!WUF zl@l6KE*5XyGo%SWZ<-KnGc|Sq+CQqkAi*EPb2j=dlb1#6Z{F7VdMDL$=h*&whYV$2`J?gK^ z`9IF`TC+PyYG~Ux#Fl+(vy+*gQr$e78r>1Xg%ej)rAOlGUqmcipo`(3+7&6)7VUqo zI#p6v`R|MHp|&G;gxOej|SR z*3Ia*WWv?Rswz#RJ>12^>` z``xf=!#QPB5E(DWb4rPRrNTt*!-!G(>uDL!YK8r+q}fW-QI|%;;Ka!nu0s=clGu|P zh8`026Hrcup)s?x>{jR4y>(zNq;{#MLfrdp^@=K2#7pS^W?XucuOd zfZQ2SMh$h|>*#^^63YbsG%(3e?lCQQsh)Jmg0Yg5=zZ5)qr%}&haWV(=DISx&KaYu zNbA1NniR#(X{(!0Tt0ltr~dfm=b<7OrL1w=sg_TqB*YyHkv)25Czfj!1LqSHW{Je;k?%l9EkWhD?UA;nrq7vYGNa@_>Vw+w0us{8V>iNN`-Cx;W zIR74+G|UX=1X&5*@c{swzcwYt9f81NWd2^{j-ymUbi{m8g5F-;msG&!zi1Hnkn#u# zzv9tYVMe`9-R-qwRt_vI7r_fBuB}QY^}QVD6TY_1!t{<1irs89@ZUM`Amm<`U}vi* zZM>`J$WdqKnq78U4p&7UjcFURWfCs?jCp)5L^Z4)^@p97t!3B8|B_I{BZM znCQP%C~pDx3b$jhgPl^_SC# zAdnoqZesr1DeDEm2}ryrTTKOs3v35AQixe%^$+Hl0>C_D^;d}2F|7AV{=NbX=F0B$ zr#jRjnfg}t>w2>{-^8L@Z$?vPE%hPY#!8B2P)zjmodvt)_lRV=0&282z z!~1EueGjV_C+;=Y(K(uwOD!`WOrM!x*2BDL{22y9ThgFLVZbGOSr*jzmC&)pB>R#Ze&G9SyEa?- zP1f_t>5&L|A6ru^#Y%6upZof!p+ujrn>J6cw_^RCMXYgO-?F&E{E)dZw(Dl_*9HbuUi? zgIUm``lyP@-HdeYg3jgvDskq_OY{DHd9)$fAjQr&d*MomGY`ALVKS2^cIC3&jV8%_ za9X*TZwiju({{z;M;v3**ATRiOAfyC`NcWIVaGuYWdtY~odMl%if~%crD46s4-HW} z9rfw*wVLTB@dN#I*|TQ5fj3&?+n@3w31Xo*^_lsN=to_av+5$di>9)j@d!HQ6t0gj zx3vHQS17J`n(kZ_cMp@7w0uo%@ANg-dF~SW85@D@FzJ5b6?!a=^LG4a5p`{+tkDEK z1K>})IQVy$r+-SKvoFFE^INr+ zK7LY?`0lu5cdUlsx^_l*LDBt#j-q*vF6tMO>uy#m-Cbe&Fg|;WwuJUhTj*cc_xHnb z6%!5dQ9*(!8gz`0a%gp0I_p?VVisoG_E`K!Q2T~aJ#|8kk6$mELKq$UmiR0}4RVu& zM8W5gLU?J99x2fU^HPy|@g9e{T9B1wZk4Q3>=-rwmx53(!)6}d>SU=d1LwkO)I;4P zqXg5TkTHXseByKbfVCm^HJST;a^ft@9=$>H8zbc$MB4*u{bc1S-RA`JbI73sg*v4X zn`YhUxG7iz&F^%qvhRPvk!h$VU(la)VBB4N5w4b4U!>RdziYT(ycW3ixM9o`>YdE5 zgAha==`$~|Lek2ag_D%zPc$^x)&8~0_qdb0BLMd$CPqh;Cbkq5qk!OdS6Zu?+P)4u zn@}G|>~98f>A&Jm)l+=%p;@THsd66KGFQ_h2@lDv6&7Rec@`wKs4jCSF-K$jz)0*A z{cy76-AIlS=t~@l|A@$ol^myNJnk+`s|b)A4}EedPmurJ)%zOE*V_jpbIscqaa`7( zBx;#Q$wE6Cijj!I)hSe9xpun4#(7B4>l50h7=z^>ZVrA}@bgHD}06M3O1uZI6N}ECm zaT0J$tw6jZWmW4OcZl|P9}-u0x{PU*;_TyRROu&uV?|Uh$#<>^+}pgWn^Z9$2fs=5 zhYs`TFrG|)p>mh)N00H0+3C{B)HeCCNW!*+x+r5%<<;!HM*P0#T<8(QVPJSLuR(nD z=}a7rL{$Id&<#tk2-QLz?`+M9x7{JzYqn?$VxmG^mxS?Z_Pfg!O&vhU8GV{D%6Eil?c-Ufl=ot2$`S-1WG_ztUAk#Qcz99dm)5XWI}Hre374gtRVabhc^+W(#5shSoMa1XB+C}3mV|<6M|zEMVyjEaf6`Q2jtS{6cXdZ2^w+{inHB|Y2(oLYr;=h@$A=}U<+brBOHzSEm|K^>NFZ-y`y`6E zy)B);uF+wEYm=Yx4!%lKje6zIr+$0GbmAdxlHitYWxCkb<|P|Bt0Lg@p47GHX8tYR z*QgkQ$u4VYCw1UAQZ-is_tNlxd3-WxV$3-TJ(tc%7w139bZ4^twBM%b*eRF^6}2YK z{~r*^ocw*{MIJBzV_c*(Kso6AgaZJ1kwN5Kq!@cB!IZPYFEEB2ATs#Z}7vJ zS;!skKi~bY&X&>&rTqW0BFON!mH$%=DD6<{<}W+4;Gd3AswkxeO7;3>VTEkrzqE`J tPMNL0;A%|&g8!4dlxWJd_=Sd$N4S3_3CsjYcl?rpd}@+I#Lsek_a7z?94r6; literal 0 HcmV?d00001 diff --git a/public/files/CorporatePlan&BenefitImportData.xlsx b/public/files/CorporatePlan&BenefitImportData.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..93d838337c4b3f98d67ecd44cc929ef7602f0b8b GIT binary patch literal 6630 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 O>K=@8w91|9SN{V1p3&C; literal 0 HcmV?d00001