- Added support for custom shapes and colors in ProcessFlowNodes component, allowing for more visually distinct node representations. - Implemented computed properties for dynamic styling based on node type, including shape classes and color variables for background, border, and text. - Updated the process builder to initialize new nodes with default shapes and colors, improving user experience and consistency. - Enhanced the UI to include shape selection and color customization options for nodes, providing users with greater flexibility in designing their workflows. - Improved overall code clarity and maintainability through refactoring and added comments.
743 lines
32 KiB
JSON
743 lines
32 KiB
JSON
{
|
|
"edges": [
|
|
{
|
|
"id": "start-1751870920411-form-1751870928350-1751954902366",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "start-1751870920411",
|
|
"target": "form-1751870928350",
|
|
"animated": true,
|
|
"sourceHandle": "start-1751870920411-right",
|
|
"targetHandle": "form-1751870928350-left"
|
|
},
|
|
{
|
|
"id": "form-1751870928350-api-1751871528249-1751954924255",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "form-1751870928350",
|
|
"target": "api-1751871528249",
|
|
"animated": true,
|
|
"sourceHandle": "form-1751870928350-bottom",
|
|
"targetHandle": "api-1751871528249-top"
|
|
},
|
|
{
|
|
"id": "api-1751871528249-script-1751871635000-1751954926618",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "api-1751871528249",
|
|
"target": "script-1751871635000",
|
|
"animated": true,
|
|
"sourceHandle": "api-1751871528249-right",
|
|
"targetHandle": "script-1751871635000-left"
|
|
},
|
|
{
|
|
"id": "form-1751871700000-script-1751871635000-1751954928000",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "form-1751871700000",
|
|
"target": "script-1751871635000",
|
|
"animated": true,
|
|
"sourceHandle": "form-1751871700000-bottom",
|
|
"targetHandle": "script-1751871635000-top"
|
|
},
|
|
{
|
|
"id": "api-1751871750000-form-1751871700000-1751954936240",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "api-1751871750000",
|
|
"target": "form-1751871700000",
|
|
"animated": true,
|
|
"sourceHandle": "api-1751871750000-bottom",
|
|
"targetHandle": "form-1751871700000-top"
|
|
},
|
|
{
|
|
"id": "api-1751871750000-script-1751871770000-1751954938889",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "api-1751871750000",
|
|
"target": "script-1751871770000",
|
|
"animated": true,
|
|
"sourceHandle": "api-1751871750000-right",
|
|
"targetHandle": "script-1751871770000-left"
|
|
},
|
|
{
|
|
"id": "script-1751871770000-gateway-1751871800000-1751954943222",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "script-1751871770000",
|
|
"target": "gateway-1751871800000",
|
|
"animated": true,
|
|
"sourceHandle": "script-1751871770000-bottom",
|
|
"targetHandle": "gateway-1751871800000-left"
|
|
},
|
|
{
|
|
"id": "gateway-1751871800000-business-rule-1751871900000-1751954958263",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "Ya",
|
|
"source": "gateway-1751871800000",
|
|
"target": "business-rule-1751871900000",
|
|
"animated": true,
|
|
"sourceHandle": "gateway-1751871800000-right",
|
|
"targetHandle": "business-rule-1751871900000-left"
|
|
},
|
|
{
|
|
"id": "gateway-1751871800000-notification-1751872000000-1751954960514",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "Tidak",
|
|
"source": "gateway-1751871800000",
|
|
"target": "notification-1751872000000",
|
|
"animated": true,
|
|
"sourceHandle": "gateway-1751871800000-right",
|
|
"targetHandle": "notification-1751872000000-left"
|
|
},
|
|
{
|
|
"id": "business-rule-1751871900000-notification-1751871950000-1751954963756",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "business-rule-1751871900000",
|
|
"target": "notification-1751871950000",
|
|
"animated": true,
|
|
"sourceHandle": "business-rule-1751871900000-right",
|
|
"targetHandle": "notification-1751871950000-left"
|
|
},
|
|
{
|
|
"id": "notification-1751871950000-end-1751872100000-1751954966017",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "notification-1751871950000",
|
|
"target": "end-1751872100000",
|
|
"animated": true,
|
|
"sourceHandle": "notification-1751871950000-bottom",
|
|
"targetHandle": "end-1751872100000-top"
|
|
},
|
|
{
|
|
"id": "notification-1751872000000-end-1751872100000-1751954967691",
|
|
"data": {},
|
|
"type": "smoothstep",
|
|
"label": "",
|
|
"source": "notification-1751872000000",
|
|
"target": "end-1751872100000",
|
|
"animated": true,
|
|
"sourceHandle": "notification-1751872000000-right",
|
|
"targetHandle": "end-1751872100000-left"
|
|
}
|
|
],
|
|
"nodes": [
|
|
{
|
|
"id": "start-1751870920411",
|
|
"data": { "label": "Start", "description": "Process start point" },
|
|
"type": "start",
|
|
"label": "Start",
|
|
"position": { "x": 210, "y": 180 }
|
|
},
|
|
{
|
|
"id": "form-1751870928350",
|
|
"data": {
|
|
"label": "Borang Maklumat Peribadi",
|
|
"formId": 1,
|
|
"formName": "Borang Maklumat Peribadi",
|
|
"formUuid": "9f08fc8f-b170-478a-85fd-fa3364401533",
|
|
"description": "Form: Borang Maklumat Peribadi",
|
|
"assignedRoles": [],
|
|
"assignedUsers": [],
|
|
"inputMappings": [],
|
|
"assignmentType": "public",
|
|
"outputMappings": [
|
|
{ "formField": "text_3", "processVariable": "text3" },
|
|
{ "formField": "select_1", "processVariable": "select1" },
|
|
{ "formField": "form_jeniskp_1", "processVariable": "formJeniskp1" },
|
|
{ "formField": "form_jeniskp_2", "processVariable": "formJeniskp2" },
|
|
{ "formField": "form_jeniskp_3", "processVariable": "formJeniskp3" },
|
|
{
|
|
"formField": "text_warganegara",
|
|
"processVariable": "textWarganegara"
|
|
},
|
|
{ "formField": "radio_jantina", "processVariable": "radioJantina" },
|
|
{ "formField": "radio_bangsa", "processVariable": "radioBangsa" },
|
|
{ "formField": "nyatakan_lain2", "processVariable": "nyatakanLain2" },
|
|
{ "formField": "radio_9_copy", "processVariable": "radio9Copy" },
|
|
{
|
|
"formField": "radio_pendidikan",
|
|
"processVariable": "radioPendidikan"
|
|
},
|
|
{ "formField": "text_14", "processVariable": "text14" },
|
|
{
|
|
"formField": "date_masukislam",
|
|
"processVariable": "dateMasukislam"
|
|
},
|
|
{
|
|
"formField": "date_masukislam_copy",
|
|
"processVariable": "dateMasukislamCopy"
|
|
},
|
|
{
|
|
"formField": "select_statusperkahwinan",
|
|
"processVariable": "selectStatusperkahwinan"
|
|
},
|
|
{
|
|
"formField": "hubungan_keluarga",
|
|
"processVariable": "hubunganKeluarga"
|
|
},
|
|
{
|
|
"formField": "hubungan_lain_nyatakan",
|
|
"processVariable": "hubunganLainNyatakan"
|
|
},
|
|
{
|
|
"formField": "nama_tanggungan",
|
|
"processVariable": "namaTanggungan"
|
|
},
|
|
{
|
|
"formField": "jenis_kad_tanggungan",
|
|
"processVariable": "jenisKadTanggungan"
|
|
},
|
|
{
|
|
"formField": "no_pengenalan_tanggungan",
|
|
"processVariable": "noPengenalanTanggungan"
|
|
},
|
|
{
|
|
"formField": "jantina_tanggungan",
|
|
"processVariable": "jantinaTanggungan"
|
|
},
|
|
{
|
|
"formField": "tarikh_lahir_tanggungan",
|
|
"processVariable": "tarikhLahirTanggungan"
|
|
},
|
|
{
|
|
"formField": "tempat_lahir_tanggungan",
|
|
"processVariable": "tempatLahirTanggungan"
|
|
},
|
|
{
|
|
"formField": "bangsa_tanggungan",
|
|
"processVariable": "bangsaTanggungan"
|
|
},
|
|
{
|
|
"formField": "bangsa_lain_tanggungan",
|
|
"processVariable": "bangsaLainTanggungan"
|
|
},
|
|
{
|
|
"formField": "status_kahwin_tanggungan",
|
|
"processVariable": "statusKahwinTanggungan"
|
|
},
|
|
{
|
|
"formField": "tarikh_masuk_islam_tanggungan",
|
|
"processVariable": "tarikhMasukIslamTanggungan"
|
|
},
|
|
{
|
|
"formField": "tarikh_mula_kfam_tanggungan",
|
|
"processVariable": "tarikhMulaKfamTanggungan"
|
|
},
|
|
{
|
|
"formField": "warganegara_tanggungan",
|
|
"processVariable": "warganegaraTanggungan"
|
|
},
|
|
{
|
|
"formField": "tempat_menetap_tanggungan",
|
|
"processVariable": "tempatMenetapTanggungan"
|
|
},
|
|
{
|
|
"formField": "no_telefon_tanggungan",
|
|
"processVariable": "noTelefonTanggungan"
|
|
},
|
|
{
|
|
"formField": "nama_pemegang_akaun",
|
|
"processVariable": "namaPemegangAkaun"
|
|
},
|
|
{ "formField": "nama_bank", "processVariable": "namaBank" },
|
|
{ "formField": "no_akaun_bank", "processVariable": "noAkaunBank" },
|
|
{
|
|
"formField": "cara_pembayaran",
|
|
"processVariable": "caraPembayaran"
|
|
},
|
|
{ "formField": "sebab_tunai", "processVariable": "sebabTunai" },
|
|
{
|
|
"formField": "bersekolah_tanggungan",
|
|
"processVariable": "bersekolahTanggungan"
|
|
},
|
|
{
|
|
"formField": "pendidikan_tertinggi_tanggungan",
|
|
"processVariable": "pendidikanTertinggiTanggungan"
|
|
},
|
|
{
|
|
"formField": "pendidikan_lain_tanggungan",
|
|
"processVariable": "pendidikanLainTanggungan"
|
|
},
|
|
{ "formField": "nama_sekolah", "processVariable": "namaSekolah" },
|
|
{ "formField": "alamat_sekolah", "processVariable": "alamatSekolah" },
|
|
{ "formField": "daerah_sekolah", "processVariable": "daerahSekolah" },
|
|
{ "formField": "negeri_sekolah", "processVariable": "negeriSekolah" },
|
|
{ "formField": "poskod_sekolah", "processVariable": "poskodSekolah" },
|
|
{
|
|
"formField": "tinggal_bersama_keluarga",
|
|
"processVariable": "tinggalBersamaKeluarga"
|
|
}
|
|
],
|
|
"fieldConditions": [],
|
|
"assignmentVariable": "",
|
|
"assignmentVariableType": "user_id"
|
|
},
|
|
"type": "form",
|
|
"label": "Borang Maklumat Peribadi",
|
|
"position": { "x": 375, "y": 120 }
|
|
},
|
|
{
|
|
"id": "api-1751871528249",
|
|
"data": {
|
|
"label": "Submit Profile API",
|
|
"apiUrl": "https://jsonplaceholder.typicode.com/posts",
|
|
"headers": "{ \"Content-Type\": \"application/json\" }",
|
|
"apiMethod": "POST",
|
|
"description": "Submit user profile to external system",
|
|
"requestBody": "{\n \"applicantName\": \"{text3}\",\n \"idType\": \"{select1}\",\n \"mykadNumber\": \"{formJeniskp1}\",\n \"passportNumber\": \"{formJeniskp2}\",\n \"birthCertNumber\": \"{formJeniskp3}\",\n \"nationality\": \"{textWarganegara}\",\n \"gender\": \"{radioJantina}\",\n \"race\": \"{radioBangsa}\",\n \"otherRace\": \"{nyatakanLain2}\",\n \"isStudying\": \"{radio9Copy}\",\n \"education\": \"{radioPendidikan}\",\n \"otherEducation\": \"{text14}\",\n \"islamConversionDate\": \"{dateMasukislam}\",\n \"kfamStartDate\": \"{dateMasukislamCopy}\",\n \"maritalStatus\": \"{selectStatusperkahwinan}\",\n \"dependentInfo\": {\n \"relationship\": \"{hubunganKeluarga}\",\n \"otherRelationship\": \"{hubunganLainNyatakan}\",\n \"name\": \"{namaTanggungan}\",\n \"idType\": \"{jenisKadTanggungan}\",\n \"idNumber\": \"{noPengenalanTanggungan}\",\n \"gender\": \"{jantinaTanggungan}\",\n \"birthDate\": \"{tarikhLahirTanggungan}\",\n \"birthPlace\": \"{tempatLahirTanggungan}\",\n \"race\": \"{bangsaTanggungan}\",\n \"otherRace\": \"{bangsaLainTanggungan}\",\n \"maritalStatus\": \"{statusKahwinTanggungan}\",\n \"islamConversionDate\": \"{tarikhMasukIslamTanggungan}\",\n \"kfamStartDate\": \"{tarikhMulaKfamTanggungan}\",\n \"nationality\": \"{warganegaraTanggungan}\",\n \"residenceDuration\": \"{tempatMenetapTanggungan}\",\n \"phoneNumber\": \"{noTelefonTanggungan}\",\n \"isStudying\": \"{bersekolahTanggungan}\",\n \"education\": \"{pendidikanTertinggiTanggungan}\",\n \"otherEducation\": \"{pendidikanLainTanggungan}\",\n \"schoolName\": \"{namaSekolah}\",\n \"schoolAddress\": \"{alamatSekolah}\",\n \"schoolDistrict\": \"{daerahSekolah}\",\n \"schoolState\": \"{negeriSekolah}\",\n \"schoolPostcode\": \"{poskodSekolah}\",\n \"liveWithFamily\": \"{tinggalBersamaKeluarga}\"\n },\n \"bankingInfo\": {\n \"accountHolderName\": \"{namaPemegangAkaun}\",\n \"bankName\": \"{namaBank}\",\n \"accountNumber\": \"{noAkaunBank}\",\n \"paymentMethod\": \"{caraPembayaran}\",\n \"cashReason\": \"{sebabTunai}\"\n }\n}",
|
|
"errorVariable": "apiError",
|
|
"outputVariable": "apiResponse",
|
|
"continueOnError": false
|
|
},
|
|
"type": "api",
|
|
"label": "Submit Profile API",
|
|
"position": { "x": 375, "y": 360 }
|
|
},
|
|
{
|
|
"id": "script-1751871635000",
|
|
"data": {
|
|
"label": "Process API Response",
|
|
"scriptCode": "// Extract important data from API response\nconst apiData = processVariables.apiResponse;\n\nif (apiData && apiData.data) {\n // Extract application ID\n processVariables.applicationId = apiData.data.id || 'APP-' + Date.now();\n \n // Determine if documents are required based on profile\n processVariables.documentsRequired = true;\n \n // Set verification level based on education and other factors\n if (processVariables.radioPendidikan === 'ijazah' || processVariables.radioPendidikan === 'diploma') {\n processVariables.verificationLevel = 'enhanced';\n processVariables.documentsRequired = true;\n } else {\n processVariables.verificationLevel = 'standard';\n }\n \n // Extract applicant name for verification form\n processVariables.applicantName = processVariables.text3;\n \n // Process dependent information if available\n if (processVariables.namaTanggungan) {\n processVariables.hasDependents = true;\n processVariables.dependentCount = 1;\n processVariables.dependentName = processVariables.namaTanggungan;\n } else {\n processVariables.hasDependents = false;\n processVariables.dependentCount = 0;\n }\n \n // Process banking information\n if (processVariables.namaBank && processVariables.noAkaunBank) {\n processVariables.hasBankingInfo = true;\n processVariables.paymentReady = true;\n } else {\n processVariables.hasBankingInfo = false;\n processVariables.paymentReady = false;\n }\n \n // Set status for next step\n processVariables.profileSubmissionStatus = 'success';\n processVariables.nextStepReady = true;\n \n console.log('Profile processed successfully:', {\n applicationId: processVariables.applicationId,\n verificationLevel: processVariables.verificationLevel,\n documentsRequired: processVariables.documentsRequired,\n hasDependents: processVariables.hasDependents,\n hasBankingInfo: processVariables.hasBankingInfo\n });\n} else {\n // Handle API error case\n processVariables.profileSubmissionStatus = 'failed';\n processVariables.nextStepReady = false;\n processVariables.errorMessage = 'Failed to submit profile';\n}",
|
|
"description": "Transform API response for document verification step",
|
|
"errorVariable": "scriptError",
|
|
"inputVariables": [
|
|
"apiResponse",
|
|
"text3",
|
|
"radioPendidikan",
|
|
"namaTanggungan",
|
|
"namaBank",
|
|
"noAkaunBank"
|
|
],
|
|
"scriptLanguage": "javascript",
|
|
"continueOnError": false,
|
|
"outputVariables": [
|
|
{
|
|
"name": "applicationId",
|
|
"type": "string",
|
|
"description": "Generated application ID"
|
|
},
|
|
{
|
|
"name": "documentsRequired",
|
|
"type": "boolean",
|
|
"description": "Whether documents verification is required"
|
|
},
|
|
{
|
|
"name": "verificationLevel",
|
|
"type": "string",
|
|
"description": "Level of verification required"
|
|
},
|
|
{
|
|
"name": "applicantName",
|
|
"type": "string",
|
|
"description": "Applicant name for verification"
|
|
},
|
|
{
|
|
"name": "hasDependents",
|
|
"type": "boolean",
|
|
"description": "Whether applicant has dependents"
|
|
},
|
|
{
|
|
"name": "dependentCount",
|
|
"type": "number",
|
|
"description": "Number of dependents"
|
|
},
|
|
{
|
|
"name": "dependentName",
|
|
"type": "string",
|
|
"description": "Name of dependent"
|
|
},
|
|
{
|
|
"name": "hasBankingInfo",
|
|
"type": "boolean",
|
|
"description": "Whether banking information is provided"
|
|
},
|
|
{
|
|
"name": "paymentReady",
|
|
"type": "boolean",
|
|
"description": "Whether payment processing is ready"
|
|
},
|
|
{
|
|
"name": "profileSubmissionStatus",
|
|
"type": "string",
|
|
"description": "Status of profile submission"
|
|
},
|
|
{
|
|
"name": "nextStepReady",
|
|
"type": "boolean",
|
|
"description": "Whether ready for next step"
|
|
}
|
|
]
|
|
},
|
|
"type": "script",
|
|
"label": "Process API Response",
|
|
"position": { "x": 720, "y": 360 }
|
|
},
|
|
{
|
|
"id": "form-1751871700000",
|
|
"data": {
|
|
"label": "Borang Semak Dokumen",
|
|
"formId": 2,
|
|
"formName": "Borang Semak Dokumen",
|
|
"formUuid": "2a15fc8f-c270-478a-95fd-fa4364401644",
|
|
"description": "Document verification form",
|
|
"assignedRoles": ["verifier"],
|
|
"assignedUsers": [],
|
|
"inputMappings": [
|
|
{
|
|
"formField": "reference_number",
|
|
"processVariable": "applicationId"
|
|
},
|
|
{ "formField": "applicant_name", "processVariable": "applicantName" },
|
|
{ "formField": "dependent_name", "processVariable": "dependentName" },
|
|
{ "formField": "has_dependents", "processVariable": "hasDependents" },
|
|
{
|
|
"formField": "verification_level",
|
|
"processVariable": "verificationLevel"
|
|
}
|
|
],
|
|
"assignmentType": "role",
|
|
"outputMappings": [
|
|
{
|
|
"formField": "verification_result",
|
|
"processVariable": "documentVerificationResult"
|
|
},
|
|
{
|
|
"formField": "verification_notes",
|
|
"processVariable": "verificationNotes"
|
|
}
|
|
],
|
|
"fieldConditions": [],
|
|
"assignmentVariable": "",
|
|
"assignmentVariableType": "user_id"
|
|
},
|
|
"type": "form",
|
|
"label": "Borang Semak Dokumen",
|
|
"position": { "x": 720, "y": 120 }
|
|
},
|
|
{
|
|
"id": "api-1751871750000",
|
|
"data": {
|
|
"label": "Submit Document Verification API",
|
|
"apiUrl": "https://api.example.com/documents/verify",
|
|
"headers": "{ \"Content-Type\": \"application/json\", \"Authorization\": \"Bearer {apiToken}\" }",
|
|
"apiMethod": "POST",
|
|
"description": "Submit document verification results to external system",
|
|
"requestBody": "{\n \"applicationId\": \"{applicationId}\",\n \"applicantName\": \"{applicantName}\",\n \"verificationResult\": \"{documentVerificationResult}\",\n \"verificationNotes\": \"{verificationNotes}\",\n \"verificationLevel\": \"{verificationLevel}\",\n \"verifiedBy\": \"{verifiedBy}\",\n \"verificationDate\": \"{verificationDate}\",\n \"documentStatus\": {\n \"applicantId\": \"{formJeniskp1}\",\n \"dependentInfo\": {\n \"hasDependents\": {hasDependents},\n \"dependentName\": \"{dependentName}\",\n \"dependentId\": \"{noPengenalanTanggungan}\"\n },\n \"bankingVerified\": {hasBankingInfo},\n \"profileScore\": {profileScore}\n }\n}",
|
|
"errorVariable": "verificationApiError",
|
|
"outputVariable": "verificationApiResponse",
|
|
"continueOnError": false
|
|
},
|
|
"type": "api",
|
|
"label": "Submit Document Verification API",
|
|
"position": { "x": 720, "y": -105 }
|
|
},
|
|
{
|
|
"id": "script-1751871770000",
|
|
"data": {
|
|
"label": "Process Verification Response",
|
|
"scriptCode": "// Process document verification API response\nconst verificationData = processVariables.verificationApiResponse;\n\nif (verificationData && verificationData.data) {\n // Extract verification status\n processVariables.verificationStatus = verificationData.data.status || 'pending';\n \n // Set document completeness based on verification result\n if (processVariables.documentVerificationResult === 'lengkap') {\n processVariables.documentsComplete = true;\n processVariables.canProceedToKifayah = true;\n \n // Extract additional data from verification response\n if (verificationData.data.eligibilityScore) {\n processVariables.eligibilityScore = verificationData.data.eligibilityScore;\n }\n \n if (verificationData.data.riskAssessment) {\n processVariables.riskAssessment = verificationData.data.riskAssessment;\n }\n \n // Set verification completion timestamp\n processVariables.verificationCompletedAt = new Date().toISOString();\n \n } else {\n processVariables.documentsComplete = false;\n processVariables.canProceedToKifayah = false;\n processVariables.rejectionReason = processVariables.verificationNotes || 'Dokumen tidak lengkap';\n }\n \n // Process dependent verification if applicable\n if (processVariables.hasDependents && verificationData.data.dependentVerification) {\n processVariables.dependentVerificationStatus = verificationData.data.dependentVerification.status;\n processVariables.dependentDocumentsComplete = verificationData.data.dependentVerification.documentsComplete;\n }\n \n // Set next step readiness\n processVariables.verificationProcessed = true;\n processVariables.readyForDecision = true;\n \n console.log('Verification processed successfully:', {\n verificationStatus: processVariables.verificationStatus,\n documentsComplete: processVariables.documentsComplete,\n canProceedToKifayah: processVariables.canProceedToKifayah,\n eligibilityScore: processVariables.eligibilityScore\n });\n \n} else {\n // Handle verification API error\n processVariables.verificationStatus = 'failed';\n processVariables.documentsComplete = false;\n processVariables.canProceedToKifayah = false;\n processVariables.verificationError = 'Failed to process verification';\n processVariables.readyForDecision = false;\n}",
|
|
"description": "Process document verification API response and set decision variables",
|
|
"errorVariable": "verificationScriptError",
|
|
"inputVariables": [
|
|
"verificationApiResponse",
|
|
"documentVerificationResult",
|
|
"verificationNotes",
|
|
"hasDependents",
|
|
"dependentName"
|
|
],
|
|
"scriptLanguage": "javascript",
|
|
"continueOnError": false,
|
|
"outputVariables": [
|
|
{
|
|
"name": "verificationStatus",
|
|
"type": "string",
|
|
"description": "Status of document verification process"
|
|
},
|
|
{
|
|
"name": "documentsComplete",
|
|
"type": "boolean",
|
|
"description": "Whether all documents are complete"
|
|
},
|
|
{
|
|
"name": "canProceedToKifayah",
|
|
"type": "boolean",
|
|
"description": "Whether process can proceed to kifayah analysis"
|
|
},
|
|
{
|
|
"name": "eligibilityScore",
|
|
"type": "number",
|
|
"description": "Eligibility score from verification"
|
|
},
|
|
{
|
|
"name": "riskAssessment",
|
|
"type": "string",
|
|
"description": "Risk assessment result"
|
|
},
|
|
{
|
|
"name": "verificationCompletedAt",
|
|
"type": "string",
|
|
"description": "Timestamp when verification was completed"
|
|
},
|
|
{
|
|
"name": "rejectionReason",
|
|
"type": "string",
|
|
"description": "Reason for rejection if documents incomplete"
|
|
},
|
|
{
|
|
"name": "dependentVerificationStatus",
|
|
"type": "string",
|
|
"description": "Dependent verification status"
|
|
},
|
|
{
|
|
"name": "dependentDocumentsComplete",
|
|
"type": "boolean",
|
|
"description": "Whether dependent documents are complete"
|
|
},
|
|
{
|
|
"name": "verificationProcessed",
|
|
"type": "boolean",
|
|
"description": "Whether verification processing is complete"
|
|
},
|
|
{
|
|
"name": "readyForDecision",
|
|
"type": "boolean",
|
|
"description": "Whether ready for decision gateway"
|
|
}
|
|
]
|
|
},
|
|
"type": "script",
|
|
"label": "Process Verification Response",
|
|
"position": { "x": 1020, "y": -105 }
|
|
},
|
|
{
|
|
"id": "gateway-1751871800000",
|
|
"data": {
|
|
"label": "Lengkap?",
|
|
"conditions": [
|
|
{
|
|
"id": "condition-group-ya-path",
|
|
"output": "Ya",
|
|
"conditions": [
|
|
{
|
|
"id": "condition-1",
|
|
"value": "lengkap",
|
|
"operator": "eq",
|
|
"variable": "documentVerificationResult",
|
|
"valueType": "string",
|
|
"logicalOperator": "and"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "condition-group-tidak-path",
|
|
"output": "Tidak",
|
|
"conditions": [
|
|
{
|
|
"id": "condition-2",
|
|
"value": "tidak_lengkap",
|
|
"operator": "eq",
|
|
"variable": "documentVerificationResult",
|
|
"valueType": "string",
|
|
"logicalOperator": "and"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"defaultPath": "notification-1751872000000",
|
|
"description": "Check if documents are complete",
|
|
"gatewayType": "exclusive"
|
|
},
|
|
"type": "gateway",
|
|
"label": "Lengkap?",
|
|
"position": { "x": 1125, "y": 195 }
|
|
},
|
|
{
|
|
"id": "business-rule-1751871900000",
|
|
"data": {
|
|
"label": "Analisis Had Kifayah",
|
|
"ruleGroups": [
|
|
{
|
|
"id": "group-1",
|
|
"name": "Married with Dependents",
|
|
"actions": [
|
|
{
|
|
"id": "action-1-1",
|
|
"type": "set_variable",
|
|
"value": "married_with_dependents",
|
|
"variable": "householdType"
|
|
},
|
|
{
|
|
"id": "action-1-2",
|
|
"type": "set_variable",
|
|
"value": 1215,
|
|
"variable": "baseKifayahAmount"
|
|
},
|
|
{
|
|
"id": "action-1-3",
|
|
"type": "set_variable",
|
|
"value": 780,
|
|
"variable": "spouseKifayahAmount"
|
|
}
|
|
],
|
|
"operator": "AND",
|
|
"conditions": [
|
|
{
|
|
"id": "condition-1-1",
|
|
"value": "berkahwin",
|
|
"operator": "eq",
|
|
"variable": "selectStatusperkahwinan"
|
|
},
|
|
{
|
|
"id": "condition-1-2",
|
|
"value": true,
|
|
"operator": "eq",
|
|
"variable": "hasDependents"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "group-2",
|
|
"name": "Single with Dependents",
|
|
"actions": [
|
|
{
|
|
"id": "action-2-1",
|
|
"type": "set_variable",
|
|
"value": "single_with_dependents",
|
|
"variable": "householdType"
|
|
},
|
|
{
|
|
"id": "action-2-2",
|
|
"type": "set_variable",
|
|
"value": 1215,
|
|
"variable": "baseKifayahAmount"
|
|
},
|
|
{
|
|
"id": "action-2-3",
|
|
"type": "set_variable",
|
|
"value": 0,
|
|
"variable": "spouseKifayahAmount"
|
|
}
|
|
],
|
|
"operator": "AND",
|
|
"conditions": [
|
|
{
|
|
"id": "condition-2-1",
|
|
"value": "berkahwin",
|
|
"operator": "neq",
|
|
"variable": "selectStatusperkahwinan"
|
|
},
|
|
{
|
|
"id": "condition-2-2",
|
|
"value": true,
|
|
"operator": "eq",
|
|
"variable": "hasDependents"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "group-3",
|
|
"name": "Calculate Dependent Allowance",
|
|
"actions": [
|
|
{
|
|
"id": "action-3-1",
|
|
"type": "set_variable",
|
|
"value": 408,
|
|
"variable": "dependentAllowance"
|
|
},
|
|
{
|
|
"id": "action-3-2",
|
|
"type": "set_variable",
|
|
"value": "school_age_7_17",
|
|
"variable": "dependentType"
|
|
}
|
|
],
|
|
"operator": "AND",
|
|
"conditions": [
|
|
{
|
|
"id": "condition-3-1",
|
|
"value": true,
|
|
"operator": "eq",
|
|
"variable": "hasDependents"
|
|
},
|
|
{
|
|
"id": "condition-3-2",
|
|
"value": "ya",
|
|
"operator": "eq",
|
|
"variable": "bersekolahTanggungan"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"description": "Calculate Had Kifayah based on household composition and income",
|
|
"errorVariable": "kifayahCalculationError",
|
|
"outputVariable": "kifayahCalculationResult"
|
|
},
|
|
"type": "business-rule",
|
|
"label": "Analisis Had Kifayah",
|
|
"position": { "x": 1485, "y": 45 }
|
|
},
|
|
{
|
|
"id": "notification-1751871950000",
|
|
"data": {
|
|
"label": "Hantar Keputusan Had Kifayah",
|
|
"message": "Assalamualaikum {applicantName},\n\nAnalisis Had Kifayah untuk permohonan anda dengan rujukan {applicationId} telah selesai.\n\n=== BUTIRAN ANALISIS HAD KIFAYAH ===\n\nJenis Isi Rumah: {householdType}\nJumlah Had Kifayah: RM {totalHadKifayah}\n\nPecahan:\n- Ketua Keluarga: RM {baseKifayahAmount}\n- Pasangan: RM {spouseKifayahAmount}\n- Tanggungan ({dependentCount} orang): RM {dependentAllowance}\n\nTarikh Analisis: {kifayahCalculationDate}\nStatus: {kifayahStatus}\n\nSila tunggu maklumat lanjut mengenai keputusan permohonan anda.\n\nTerima kasih.",
|
|
"subject": "Keputusan Analisis Had Kifayah - Permohonan {applicationId}",
|
|
"template": "kifayah-calculation-template",
|
|
"description": "Send Had Kifayah calculation results to applicant",
|
|
"errorVariable": "kifayahNotificationError",
|
|
"recipientType": "variable",
|
|
"recipientValue": "applicantEmail",
|
|
"notificationType": "email"
|
|
},
|
|
"type": "notification",
|
|
"label": "Hantar Keputusan Had Kifayah",
|
|
"position": { "x": 1890, "y": 30 }
|
|
},
|
|
{
|
|
"id": "notification-1751872000000",
|
|
"data": {
|
|
"label": "Terima Notifikasi",
|
|
"message": "Assalamualaikum {applicantName},\n\nPermohonan anda dengan rujukan {applicationId} tidak dapat diproses kerana dokumen yang dikemukakan tidak lengkap.\n\nSila lengkapkan dokumen yang diperlukan dan kemukakan semula permohonan anda.\n\nCatatan daripada pegawai pengesah:\n{verificationNotes}\n\nTerima kasih.",
|
|
"subject": "Dokumen Tidak Lengkap - Permohonan {applicationId}",
|
|
"template": "incomplete-documents-template",
|
|
"description": "Send notification for incomplete documents",
|
|
"errorVariable": "notificationError",
|
|
"recipientType": "variable",
|
|
"recipientValue": "applicantEmail",
|
|
"notificationType": "email"
|
|
},
|
|
"type": "notification",
|
|
"label": "Terima Notifikasi",
|
|
"position": { "x": 1485, "y": 360 }
|
|
},
|
|
{
|
|
"id": "end-1751872100000",
|
|
"data": {
|
|
"label": "End",
|
|
"description": "Process completion - documents incomplete"
|
|
},
|
|
"type": "end",
|
|
"label": "End",
|
|
"position": { "x": 1950, "y": 420 }
|
|
}
|
|
],
|
|
"viewport": {
|
|
"x": -117.3519061583577,
|
|
"y": 343.2355816226784,
|
|
"zoom": 0.7722385141739979
|
|
}
|
|
}
|