From 3cddb1c6091001a25e13f85a0649298e1ba7f73d Mon Sep 17 00:00:00 2001 From: Jonathan van Rij Date: Tue, 24 Feb 2026 12:23:18 +0100 Subject: [PATCH] changes the seeder --- database/seeders/DatabaseSeeder.php | 4 + .../DigitalSolutionsQuestionSeeder.php | 345 ++++++++++++ database/seeders/LegalQuestionSeeder.php | 506 ++++++++++++++++++ database/seeders/OutsourceQuestionSeeder.php | 349 ++++++++++++ database/seeders/TaxQuestionSeeder.php | 449 ++++++++++++++++ ...~$BTI Go no go checklist - audit v2-1.xlsx | Bin 165 -> 0 bytes 6 files changed, 1653 insertions(+) create mode 100644 database/seeders/DigitalSolutionsQuestionSeeder.php create mode 100644 database/seeders/LegalQuestionSeeder.php create mode 100644 database/seeders/OutsourceQuestionSeeder.php create mode 100644 database/seeders/TaxQuestionSeeder.php delete mode 100644 resources/excel/~$BTI Go no go checklist - audit v2-1.xlsx diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index cb6c494..f93f073 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -19,6 +19,10 @@ public function run(): void $this->call([ JonathanSeeder::class, AuditQuestionSeeder::class, + DigitalSolutionsQuestionSeeder::class, + LegalQuestionSeeder::class, + OutsourceQuestionSeeder::class, + TaxQuestionSeeder::class, ]); } } diff --git a/database/seeders/DigitalSolutionsQuestionSeeder.php b/database/seeders/DigitalSolutionsQuestionSeeder.php new file mode 100644 index 0000000..7a56fb3 --- /dev/null +++ b/database/seeders/DigitalSolutionsQuestionSeeder.php @@ -0,0 +1,345 @@ +where('name', 'Digital Solutions')->value('id'); + + if ($categoryId === null) { + $categoryId = DB::table('categories')->insertGetId([ + 'name' => 'Digital Solutions', + 'sort_order' => 4, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + + $this->seedOpportunityDetails($categoryId); + $this->seedClientBackgroundAndHistory($categoryId); + $this->seedRegulatoryCompliance($categoryId); + $this->seedRiskAssessment($categoryId); + $this->seedResourceAllocation($categoryId); + $this->seedTechnologyAndInnovationFit($categoryId); + } + + /** + * Seed Group 1: Opportunity Details (not scored, no answer options, all details required). + */ + private function seedOpportunityDetails(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Opportunity Details', + 'sort_order' => 1, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'What sort of digital consulting opportunity is it?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'How many locations involved in this opportunity and are there any locations where we do not have digital capabilites in the local Baker Tilly firm.', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 2, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Where is the client HQ? please share more about the clients industry and digital maturity level.', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 3, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Who are the competitors in this space?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 4, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 2: Client Background and History (scored, Yes/No/NA options). + */ + private function seedClientBackgroundAndHistory(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Client Background and History', + 'sort_order' => 2, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Have we previously worked with this client, and was the experience positive?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Have we conducted a reputational risk check on the client (negative press, ethical concerns, etc.)?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 3: Regulatory Compliance (scored, Yes/No/NA options). + */ + private function seedRegulatoryCompliance(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Regulatory Compliance', + 'sort_order' => 3, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Does the project involve cross-border data transfers, and if so, are necessary safeguards in place?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Does the client have no pending legal, tax or regulatory issues that [you know of] which could impact this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 4: Risk Assessment (scored, Yes/No/NA options). + */ + private function seedRiskAssessment(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Risk Assessment', + 'sort_order' => 4, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Is there a clear understanding of the project scope, responsibilities, and deliverables?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do we have the necessary delivery tools (platforms, technology, security measures etc.) to support this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Have we completed a conflict check?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Can we meet the service-level agreements (SLAs) without overcommitting our resources?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 4, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there no special expectations or requirements from the client that may pose a challenge?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 5, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 5: Resource Allocation (scored, Yes/No/NA options). + */ + private function seedResourceAllocation(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Resource Allocation', + 'sort_order' => 5, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Do you have the resources required for the opportunity (personnel, time, budget)?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do you have the right expertise and capacity across our network to deliver high-quality service?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 6: Technology & Innovation Fit (scored, Yes/No/NA options, semicolons in scoring instructions). + */ + private function seedTechnologyAndInnovationFit(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Technology & Innovation Fit', + 'sort_order' => 6, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point; if you answer no, you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Are the technologies involved within our area of expertise, or do we have partnerships to support the implementation?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } +} diff --git a/database/seeders/LegalQuestionSeeder.php b/database/seeders/LegalQuestionSeeder.php new file mode 100644 index 0000000..4c20e1e --- /dev/null +++ b/database/seeders/LegalQuestionSeeder.php @@ -0,0 +1,506 @@ +where('name', 'Legal')->value('id'); + + if ($categoryId === null) { + $categoryId = DB::table('categories')->insertGetId([ + 'name' => 'Legal', + 'sort_order' => 5, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + + $this->seedOpportunityDetails($categoryId); + $this->seedClientBackgroundAndHistory($categoryId); + $this->seedFinancialInformation($categoryId); + $this->seedRegulatoryCompliance($categoryId); + $this->seedRiskAssessmentForLegalOpportunities($categoryId); + $this->seedResourceAllocation($categoryId); + $this->seedStakeholderEngagement($categoryId); + $this->seedFeeQuote($categoryId); + } + + /** + * Seed Group 1: Opportunity Details (mixed — some text-only, some Yes/No). + */ + private function seedOpportunityDetails(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Opportunity Details', + 'sort_order' => 1, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'What type of legal opportunity is it (e.g., litigation, corporate, M&A, regulatory)?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'How many locations involved in this opportunity?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 2, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do we have a presence or a reliable partner in all locations listed in this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_no', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Is the client budget realistic?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 4, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client requested any additional information from our firms?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 5, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'What is the deadline to respond to the client on this opportunity?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 6, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Where is the client HQ?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 7, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Who is the competition?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 8, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 2: Client Background and History (scored, mixed Yes/No and text-only). + */ + private function seedClientBackgroundAndHistory(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Client Background and History', + 'sort_order' => 2, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'What is the client\'s business and industry?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Have there been any significant changes in the client\'s business operations or structure recently?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'What is our competitive edge in this opportunity (e.g., prior experience with the client, unique expertise, pricing advantage)?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 3: Financial Information (scored, Yes/No options). + */ + private function seedFinancialInformation(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Financial Information', + 'sort_order' => 3, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client provided enough financial information about their company?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any significant financial risks or uncertainties that you are aware of?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 4: Regulatory Compliance (scored, Yes/No options). + */ + private function seedRegulatoryCompliance(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Regulatory Compliance', + 'sort_order' => 4, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any pending legal or regulatory issues that you know of that could impact the opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client been subject to any regulatory investigations or penalties?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 5: Risk Assessment for Legal opportunities (scored, Yes/No options). + * Group name preserves Excel casing exactly — lowercase 'o' in "opportunities". + */ + private function seedRiskAssessmentForLegalOpportunities(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Risk Assessment for Legal opportunities', + 'sort_order' => 5, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any potential risks or challenges associated with the opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Has a conflict check been completed?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any potential conflicts of interest?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 6: Resource Allocation (mixed — Q2 and Q5 are text-only, others Yes/No). + */ + private function seedResourceAllocation(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Resource Allocation', + 'sort_order' => 6, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Do we have the required skills and capacity within our firm to deliver this work, or would we need support from another firm?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'What resources are required for the opportunity (personnel, time, budget)?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any constraints on the availability of your resources?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do you know of the any constraints on the availability of other firms included in this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 4, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Is the deadline to respond to the client is more than two weeks away. Our experience shows that anything shorter is often unrealistic to pursue.', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 5, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 7: Stakeholder Engagement (mixed — Q1 is text-only, Q2 is Yes/No). + */ + private function seedStakeholderEngagement(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Stakeholder Engagement', + 'sort_order' => 7, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Who are the key stakeholders involved in this opportunity?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any special expectations and requirements?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 8: Fee Quote (scored, Yes/No options). + */ + private function seedFeeQuote(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Fee Quote', + 'sort_order' => 8, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client provided sufficient information to enable a fee quote?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } +} diff --git a/database/seeders/OutsourceQuestionSeeder.php b/database/seeders/OutsourceQuestionSeeder.php new file mode 100644 index 0000000..ee9553a --- /dev/null +++ b/database/seeders/OutsourceQuestionSeeder.php @@ -0,0 +1,349 @@ +where('name', 'Outsource')->value('id'); + + if ($categoryId === null) { + $categoryId = DB::table('categories')->insertGetId([ + 'name' => 'Outsource', + 'sort_order' => 2, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + + $this->seedOpportunityDetails($categoryId); + $this->seedClientBackgroundAndHistory($categoryId); + $this->seedRegulatoryCompliance($categoryId); + $this->seedRiskAssessment($categoryId); + $this->seedResourceAllocation($categoryId); + } + + /** + * Seed Group 1: Opportunity Details (not scored, no answer options, details required). + */ + private function seedOpportunityDetails(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Opportunity Details', + 'sort_order' => 1, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'What sort of outsourcing opportunity is it?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'How many locations involved in this opportunity?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 2, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'List any locations included in this opportunity where we do not have a Baker Tilly firm.', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 3, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Where is the client HQ?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 4, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'What is the client\'s business and industry?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 5, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Who are the competitors in this space?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 6, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 2: Client Background and History (scored, Yes/No/NA options). + */ + private function seedClientBackgroundAndHistory(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Client Background and History', + 'sort_order' => 2, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Have we previously worked with this client, and was the experience positive?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Have we conducted a reputational risk check on the client (negative press, ethical concerns, etc.)?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 3: Regulatory Compliance (scored, Yes/No/NA options). + */ + private function seedRegulatoryCompliance(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Regulatory Compliance', + 'sort_order' => 3, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Does the client comply with all relevant regulatory requirements?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client provided complete and accurate financial records for review?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Does the client have no pending legal, tax or regulatory issues that [you know of] which could impact this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 4: Risk Assessment (scored, Yes/No/NA options). + */ + private function seedRiskAssessment(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Risk Assessment', + 'sort_order' => 4, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Is there a clear understanding on the scope, responsibilities and deliverables?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do we have the necessary delivery tools (platforms, technology, security measures etc.) to support this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Have you completed a conflict check?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Can we meet the service-level agreements (SLAs) without overcommitting our resources?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 4, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there no special expectations or requirements from the client that may pose a challenge?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 5, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 5: Resource Allocation (scored, Yes/No/NA options). + */ + private function seedResourceAllocation(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Resource Allocation', + 'sort_order' => 5, + 'description' => null, + 'scoring_instructions' => 'If you answer yes, you will score 1 point, if you answer no you will score 0 points', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Do you have the resources required for the opportunity (personnel, time, budget)?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do you have the right expertise and capacity across our network to deliver high-quality service?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => true, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } +} diff --git a/database/seeders/TaxQuestionSeeder.php b/database/seeders/TaxQuestionSeeder.php new file mode 100644 index 0000000..9fb7446 --- /dev/null +++ b/database/seeders/TaxQuestionSeeder.php @@ -0,0 +1,449 @@ +where('name', 'Tax')->value('id'); + + if ($categoryId === null) { + $categoryId = DB::table('categories')->insertGetId([ + 'name' => 'Tax', + 'sort_order' => 6, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + + $this->seedOpportunityDetails($categoryId); + $this->seedClientBackgroundAndHistory($categoryId); + $this->seedFinancialInformation($categoryId); + $this->seedRegulatoryCompliance($categoryId); + $this->seedRiskAssessment($categoryId); + $this->seedResourceAllocation($categoryId); + $this->seedStakeholderEngagement($categoryId); + } + + /** + * Seed Group 1: Opportunity Details (mixed — some scored with Yes/No, some text-only). + */ + private function seedOpportunityDetails(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Opportunity Details', + 'sort_order' => 1, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'What sort of opportunity is it?/Describe the Scope of Work', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'How many locations involved in this opportunity?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 2, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do we have a Baker Tilly firm in all locations within this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_no', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client requested any additional information from our firms?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 4, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'What is the deadline to respond to the client on this opportunity?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 5, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Where is the client HQ?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 6, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Who is the competition?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 7, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 2: Client Background and History (mixed — Q1 text-only, Q2/Q3 scored Yes/No). + */ + private function seedClientBackgroundAndHistory(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Client Background and History', + 'sort_order' => 2, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'What is the client\'s business and industry?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Have there been any significant changes in the client\'s business operations or structure recently?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Is the client an existing client?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 3: Financial Information (scored, Yes/No options). + */ + private function seedFinancialInformation(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Financial Information', + 'sort_order' => 3, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client provided enough financial information about their company?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any significant financial risks or uncertainties that you are aware of?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 4: Regulatory Compliance (scored, Yes/No options). + */ + private function seedRegulatoryCompliance(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Regulatory Compliance', + 'sort_order' => 4, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Does the client comply with all relevant regulatory requirements and standards?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_no', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any pending legal or regulatory issues that you know of that could impact the opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Has the client been subject to any regulatory investigations or penalties?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 5: Risk Assessment (scored, Yes/No options). + */ + private function seedRiskAssessment(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Risk Assessment', + 'sort_order' => 5, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any potential risks or challenges associated with the opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 1, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any potential conflicts of interest?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'req_on_yes', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 6: Resource Allocation (mixed — Q1/Q4 text-only, Q2/Q3 scored Yes/No). + */ + private function seedResourceAllocation(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Resource Allocation', + 'sort_order' => 6, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'What resources are required for the opportunity (personnel, time, budget)?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any constraints on the availability of your resources?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Do you know of the any constraints on the availability of other firms included in this opportunity?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 3, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'What is the expected timeline for the opportunity, including any critical deadlines that must be met?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 4, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } + + /** + * Seed Group 7: Stakeholder Engagement (mixed — Q1 text-only, Q2 scored Yes/No). + */ + private function seedStakeholderEngagement(int $categoryId): void + { + $groupId = DB::table('question_groups')->insertGetId([ + 'category_id' => $categoryId, + 'name' => 'Stakeholder Engagement', + 'sort_order' => 7, + 'description' => null, + 'scoring_instructions' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + DB::table('questions')->insert([ + [ + 'question_group_id' => $groupId, + 'text' => 'Who are the key stakeholders involved in this opportunity?', + 'has_yes' => false, + 'has_no' => false, + 'has_na' => false, + 'details' => 'required', + 'sort_order' => 1, + 'is_scored' => false, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'question_group_id' => $groupId, + 'text' => 'Are there any special expectations and requirements?', + 'has_yes' => true, + 'has_no' => true, + 'has_na' => false, + 'details' => 'optional', + 'sort_order' => 2, + 'is_scored' => true, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } +} diff --git a/resources/excel/~$BTI Go no go checklist - audit v2-1.xlsx b/resources/excel/~$BTI Go no go checklist - audit v2-1.xlsx deleted file mode 100644 index 8de2021bc2ad5555ff66c888c022d586c5b640f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmWge%FjzI$wfB=IRLq07Lk5t{V^ClygVI3^nG9J#KJ_2~ D?E4j4