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 1951497b..0bc3a1fa Binary files a/public/files/Corporate Plan & Benefit Import.xlsx and b/public/files/Corporate Plan & Benefit Import.xlsx differ diff --git a/public/files/CorporatePlan&BenefitImportData.xlsx b/public/files/CorporatePlan&BenefitImportData.xlsx new file mode 100644 index 00000000..93d83833 Binary files /dev/null and b/public/files/CorporatePlan&BenefitImportData.xlsx differ