This commit is contained in:
Linksehat Staging Server
2023-05-24 10:06:46 +07:00
11 changed files with 484 additions and 9 deletions

View File

@@ -19,6 +19,7 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory; use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use App\Models\File; use App\Models\File;
use Illuminate\Support\Facades\File as FacadesFile; use Illuminate\Support\Facades\File as FacadesFile;
use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Response;
@@ -455,7 +456,6 @@ class CorporateController extends Controller
} else if ($sheet->getName() == 'Benefit') { } else if ($sheet->getName() == 'Benefit') {
$corporateService->handleBenefitRow($corporate, $row_data); $corporateService->handleBenefitRow($corporate, $row_data);
} }
// Write Success Result to File // Write Success Result to File
$import->addArrayToRow(array_merge($row_data, [ $import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 200, 'Ingest Code' => 200,
@@ -519,5 +519,170 @@ class CorporateController extends Controller
break; 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')
]);
}
} }

View File

@@ -66,6 +66,7 @@ Route::prefix('internal')->group(function () {
Route::get('corporates/import-document-example/{document_type}', [CorporateController::class, 'importDocumentExample']); Route::get('corporates/import-document-example/{document_type}', [CorporateController::class, 'importDocumentExample']);
Route::put('corporates/{corporate_id}/activation', [CorporateController::class, 'activation']); Route::put('corporates/{corporate_id}/activation', [CorporateController::class, 'activation']);
Route::post('corporates/{corporate_id}/import-plan-benefit', [CorporateController::class, 'importPlanBenefit']); 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::get('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'index']);
Route::post('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'store']); Route::post('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'store']);

View File

@@ -6,6 +6,7 @@ use App\Exceptions\ImportRowException;
use App\Models\Benefit; use App\Models\Benefit;
use App\Models\Corporate; use App\Models\Corporate;
use App\Models\CorporateBenefit; use App\Models\CorporateBenefit;
use App\Models\CorporatePolicy;
use App\Models\Plan; use App\Models\Plan;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
@@ -13,16 +14,105 @@ class CorporateService
{ {
protected function validatePlanRow($row) 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'])) { 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'])) { 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'])) { // if (!empty($row['start'])) {
throw new ImportRowException(__('plan.TYPE_REQUIRED'), 0, null, $row); // 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'])) { if (empty($row['limit_rules'])) {
@@ -38,8 +128,8 @@ class CorporateService
{ {
try { try {
$plan_data = $row; $plan_data = $row;
$plan_data["corporate_id"] = $corporate->id;
$this->validatePlanRow($plan_data); $this->validatePlanRow($plan_data);
$plan_data["corporate_id"] = $corporate->id;
$plan = $corporate->plans()->updateOrCreate([ $plan = $corporate->plans()->updateOrCreate([
'corporate_plan_id' => $plan_data['corporate_plan_id'], 'corporate_plan_id' => $plan_data['corporate_plan_id'],
// 'active' => 0, // 'active' => 0,
@@ -53,6 +143,8 @@ class CorporateService
protected function validateBenefitRow($row) protected function validateBenefitRow($row)
{ {
$max_frequence = 7;
$budget_aso = [1,2];
if (empty($row['service_code'])) { if (empty($row['service_code'])) {
throw new ImportRowException(__('benefit.SERVICE_CODE_REQUIRED'), 0, null, $row); throw new ImportRowException(__('benefit.SERVICE_CODE_REQUIRED'), 0, null, $row);
} }
@@ -77,6 +169,13 @@ class CorporateService
if (empty($row['genders'])) { if (empty($row['genders'])) {
throw new ImportRowException(__('benefit.GENDER_REQUIRED'), 0, null, $row); 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) public function handleBenefitRow(Corporate $corporate, $row)

View File

@@ -13,9 +13,9 @@ class ExclusionService
{ {
protected function validateDiagnosisExclusionRow($row) protected function validateDiagnosisExclusionRow($row)
{ {
// if (empty($row['service_code'])) { if (empty($row['service_code'])) {
// throw new ImportRowException(__('plan.RECORD_TYPE_REQUIRED'), 0, null, $row); throw new ImportRowException(__('plan.REQUIRED'), 0, null, $row);
// } }
} }
public function handleDiagnosisExclusionRow(Corporate $corporate, $row) public function handleDiagnosisExclusionRow(Corporate $corporate, $row)

View File

@@ -131,6 +131,66 @@ class CorporateBenefit extends Model
"Show Benefit Value" => 'show_benefit_value', "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 = [ public static $max_frequency_periods = [
0 => 'Policy Period', 0 => 'Policy Period',
1 => 'Daily Visit', 1 => 'Daily Visit',

View File

@@ -126,6 +126,57 @@ class Plan extends Model
"Max Periode of Surgery Non Surgery" => "max_surgery_periode_days", "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) public function setAreaLimitAttribute($value)
{ {
$this->attributes['area_limit'] = empty($value) ? null : $value; $this->attributes['area_limit'] = empty($value) ? null : $value;

View File

@@ -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 ( return (
<div> <div>
<input <input
@@ -219,6 +231,7 @@ export default function PlanList() {
> >
<MenuItem onClick={handleImportButton}>Import</MenuItem> <MenuItem onClick={handleImportButton}>Import</MenuItem>
<MenuItem onClick={() => {handleGetTemplate('plan-benefit')}}>Download Template</MenuItem> <MenuItem onClick={() => {handleGetTemplate('plan-benefit')}}>Download Template</MenuItem>
<MenuItem onClick={() => {handleGetData('data-plan-benefit')}}>Download Data Plan & Benefit</MenuItem>
</Menu> </Menu>
</Stack> </Stack>
)} )}

View File

@@ -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 ( return (
<div> <div>
<input <input
@@ -202,6 +214,7 @@ export default function CorporatePlanList() {
> >
<MenuItem onClick={handleImportButton}>Import</MenuItem> <MenuItem onClick={handleImportButton}>Import</MenuItem>
<MenuItem onClick={() => {handleGetTemplate('plan-benefit')}}>Download Template</MenuItem> <MenuItem onClick={() => {handleGetTemplate('plan-benefit')}}>Download Template</MenuItem>
<MenuItem onClick={() => {handleGetData('data-plan-benefit')}}>Download Plans & Benefit</MenuItem>
</Menu> </Menu>
</Stack> </Stack>
)} )}

73
lang/en/plan.php Normal file
View File

@@ -0,0 +1,73 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Enrollment Import Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during import enrollment for various
|
*/
"REQUIRED" => ":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",
];

BIN
public/files/Corporate Plan & Benefit Import.xlsx Executable file → Normal file

Binary file not shown.

Binary file not shown.