null, 'dob' => null, 'si' => null, 'pre_existing_disease' => null ]; public function run() { // Initialize state if not exists if (!$this->bot->userStorage()->get('claim_form_state')) { $this->bot->userStorage()->save([ 'claim_form_state' => [ 'dependency_count' => 0, 'current_member' => 'primary', 'dependencies' => [], 'primary_insurer' => null ] ]); } $state = $this->bot->userStorage()->get('claim_form_state'); $memberType = ($state['current_member'] === 'primary') ? 'primary insured person' : 'dependency'; $this->askName($memberType); } private function askName($memberType) { $this->ask("Enter the Name of the $memberType?", function($answer) { $name = $answer->getText(); if (empty($name)) { $this->say('Name Cannot be Empty'); return $this->run(); } // Get existing state and update only the name $state = $this->bot->userStorage()->get('claim_form_state'); if ($state['current_member'] === 'primary') { if (!isset($state['primary_insurer'])) { $state['primary_insurer'] = []; } $state['primary_insurer']['name'] = $name; } else { if (!isset($state['temp_dependency'])) { $state['temp_dependency'] = []; } $state['temp_dependency']['name'] = $name; } $this->bot->userStorage()->save(['claim_form_state' => $state]); $this->askDOB(); }); } private function askDOB() { $this->ask('Enter Date of Birth (DD/MM/YYYY)?', function($answer) { $dob = $answer->getText(); if (empty($dob)) { $this->say('Date of Birth Cannot be Empty'); return $this->askDOB(); } // Get existing state and update only the DOB $state = $this->bot->userStorage()->get('claim_form_state'); if ($state['current_member'] === 'primary') { $state['primary_insurer']['dob'] = $dob; } else { $state['temp_dependency']['dob'] = $dob; } $this->bot->userStorage()->save(['claim_form_state' => $state]); $this->askSumInsured(); }); } private function askSumInsured() { $this->ask('Enter Sum Insured Amount?', function($answer) { $sum_insured = $answer->getText(); if (empty($sum_insured)) { $this->say('Sum Insured Cannot be Empty'); return $this->askSumInsured(); } // Get existing state and update only the sum insured $state = $this->bot->userStorage()->get('claim_form_state'); if ($state['current_member'] === 'primary') { $state['primary_insurer']['si'] = $sum_insured; } else { $state['temp_dependency']['si'] = $sum_insured; } $this->bot->userStorage()->save(['claim_form_state' => $state]); $this->askPreExistingDisease(); }); } private function askPreExistingDisease() { $this->ask('Enter Pre-Existing Disease if any (type "none" if none)?', function($answer) { $pre_existing_disease = $answer->getText(); if (empty($pre_existing_disease)) { $this->say('Please enter none if no pre-existing conditions'); return $this->askPreExistingDisease(); } // Get existing state and update the disease info $state = $this->bot->userStorage()->get('claim_form_state'); if ($state['current_member'] === 'primary') { $state['primary_insurer']['pre_existing_disease'] = $pre_existing_disease; $state['primary_insurer']['type'] = 'primary'; } else { $state['temp_dependency']['pre_existing_disease'] = $pre_existing_disease; $state['temp_dependency']['type'] = 'dependency'; // Move completed dependency to dependencies array if (!isset($state['dependencies'])) { $state['dependencies'] = []; } $state['dependencies'][] = $state['temp_dependency']; $state['temp_dependency'] = null; // Clear temporary dependency } $this->bot->userStorage()->save(['claim_form_state' => $state]); // For debugging log_message('debug', 'Final state after all data collection: ' . json_encode($state)); $this->saveMemberAndContinue(); }); } private function saveMemberAndContinue() { $state = $this->bot->userStorage()->get('claim_form_state'); $memberData = $state['current_member'] === 'primary' ? $state['primary_insurer'] : end($state['dependencies']); // Show current member info $memberInfo = "👤 **" . ucfirst($memberData['type']) . " Member Details:**\n"; $memberInfo .= "🔹 Name: " . $memberData['name'] . "\n"; $memberInfo .= "🔹 Date of Birth: " . $memberData['dob'] . "\n"; $memberInfo .= "🔹 Sum Insured: " . $memberData['si'] . "\n"; $memberInfo .= "🔹 Pre Existing Disease: " . $memberData['pre_existing_disease'] . "\n"; $this->say($memberInfo); $path = $this->bot->userStorage()->get('path'); if (in_array('floater', $path)) { $this->askAboutDependencies(); } else { $this->showSummary(); } } private function askAboutDependencies() { $question = Question::create("Do you want to add a dependency? ") ->addButtons([ Button::create("✅ Yes")->value("yes"), Button::create("❌ No")->value("no"), Button::create("◀️ Go Back")->value("go_back"), ]); $this->ask($question, function($answer) { $state = $this->bot->userStorage()->get('claim_form_state'); switch ($answer->getValue()) { case "yes": $state['dependency_count']++; $state['current_member'] = 'dependency'; $this->bot->userStorage()->save(['claim_form_state' => $state]); // Reset currentMemberData for new dependency $this->currentMemberData = [ 'name' => null, 'dob' => null, 'si' => null, 'pre_existing_disease' => null ]; $this->run(); break; case "no": $this->showSummary(); break; case "go_back": $this->bot->startConversation(new hospitalPolicyConversation()); break; default: $this->say("Invalid selection. Please choose an option."); $this->askAboutDependencies(); break; } }); } private function showSummary() { $state = $this->bot->userStorage()->get('claim_form_state'); $finalSummary = '