414 lines
15 KiB
PHP
414 lines
15 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
/**
|
|
* Seeds question groups and questions for the Audit category.
|
|
* Assumes the Audit category already exists (created by CategorySeeder).
|
|
*/
|
|
final class AuditQuestionSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Seed all Audit question groups and their questions.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$categoryId = DB::table('categories')->where('name', 'Audit')->value('id');
|
|
|
|
if ($categoryId === null) {
|
|
$categoryId = DB::table('categories')->insertGetId([
|
|
'name' => 'Audit',
|
|
'sort_order' => 1,
|
|
'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->seedReportngRequirements($categoryId);
|
|
}
|
|
|
|
/**
|
|
* Seed Group 1: Opportunity Details (not scored, no answer options).
|
|
*/
|
|
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 audit 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' => 'optional',
|
|
'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' => 'Who is the competition?',
|
|
'has_yes' => false,
|
|
'has_no' => false,
|
|
'has_na' => false,
|
|
'details' => 'required',
|
|
'sort_order' => 5,
|
|
'is_scored' => false,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Seed Group 2: Client Background and History (scored, Yes/No 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' => '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' => 'There have been no significant changes in the client\'s business operations or structure recently?',
|
|
'has_yes' => true,
|
|
'has_no' => true,
|
|
'has_na' => false,
|
|
'details' => 'req_on_no',
|
|
'sort_order' => 2,
|
|
'is_scored' => true,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
],
|
|
[
|
|
'question_group_id' => $groupId,
|
|
'text' => 'Does the sector and/or client come with a reputation which we are comfortable that Baker Tilly is associated with?',
|
|
'has_yes' => true,
|
|
'has_no' => true,
|
|
'has_na' => false,
|
|
'details' => null,
|
|
'sort_order' => 3,
|
|
'is_scored' => true,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
],
|
|
[
|
|
'question_group_id' => $groupId,
|
|
'text' => 'Are there any previous audit reports or findings that need to be considered?',
|
|
'has_yes' => true,
|
|
'has_no' => true,
|
|
'has_na' => false,
|
|
'details' => 'req_on_yes',
|
|
'sort_order' => 4,
|
|
'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' => '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' => 'Has the client provided financial statements or balance sheet?',
|
|
'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 the client\'s financial statements complete and accurate?',
|
|
'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' => '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 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' => 'The client has no pending legal or regulatory issues that you know of that could impact the audit?',
|
|
'has_yes' => true,
|
|
'has_no' => true,
|
|
'has_na' => false,
|
|
'details' => 'req_on_no',
|
|
'sort_order' => 2,
|
|
'is_scored' => true,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
],
|
|
[
|
|
'question_group_id' => $groupId,
|
|
'text' => 'The client has been subject to no regulatory investigations or penalties?',
|
|
'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(),
|
|
],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 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' => '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' => 'There are no key risks associated with the audit?',
|
|
'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' => 'Have you completed a conflict check?',
|
|
'has_yes' => true,
|
|
'has_no' => true,
|
|
'has_na' => false,
|
|
'details' => 'required',
|
|
'sort_order' => 2,
|
|
'is_scored' => true,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
],
|
|
[
|
|
'question_group_id' => $groupId,
|
|
'text' => 'Are you and other BTI member firms independent withi the meaning of local and IESBA rules?',
|
|
'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(),
|
|
],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Seed Group 6: Resource Allocation (scored, mixed — Q1 has no answer options and is not scored).
|
|
*/
|
|
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' => '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' => 'What resources are required for the audit (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' => 'Does your firm have the scale, seniority and degree of expertise available at the riht time to report in accordance with the client\'s schedule?',
|
|
'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 7: Reportng Requirements (scored, Yes/No options — group name preserves Excel typo).
|
|
*/
|
|
private function seedReportngRequirements(int $categoryId): void
|
|
{
|
|
$groupId = DB::table('question_groups')->insertGetId([
|
|
'category_id' => $categoryId,
|
|
'name' => 'Reportng Requirements',
|
|
'sort_order' => 7,
|
|
'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 we understand reporting rules, regulatory environment and stakeholder expectations?',
|
|
'has_yes' => true,
|
|
'has_no' => true,
|
|
'has_na' => false,
|
|
'details' => 'optional',
|
|
'sort_order' => 1,
|
|
'is_scored' => true,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
],
|
|
]);
|
|
}
|
|
}
|