*/ class DocumentFactory extends Factory { public function definition(): array { return [ 'code' => fake()->unique()->numberBetween(100000, 999999), 'modality' => fake()->randomElement(['CT', 'MRI', 'X-Ray', 'Ultrasound', 'PET']), 'status' => fake()->randomElement(DocumentStatusEnum::cases()), 'priority' => fake()->randomElement(DocumentPriorityEnum::cases()), 'note' => fake()->optional()->sentence(), 'submitted_at' => fake()->optional()->dateTimeBetween('-30 days', 'now'), 'scan_date' => fake()->optional()->dateTimeBetween('-30 days', 'now'), 'processing_deadline' => fake()->optional()->dateTimeBetween('now', '+30 days'), 'finalized_at' => fake()->optional()->dateTimeBetween('-30 days', 'now'), 'finalized_by' => fake()->optional()->randomElement(User::pluck('id')->toArray()), 'rejection_reason' => fake()->optional()->sentence(), 'pet_id' => Pet::factory(), 'requester_id' => User::factory(), ]; } public function registered(): static { return $this->state(fn (array $attributes) => [ 'status' => DocumentStatusEnum::Registered, 'submitted_at' => now(), ]); } public function inProgress(): static { return $this->state(fn (array $attributes) => [ 'status' => DocumentStatusEnum::InProgress, 'submitted_at' => fake()->dateTimeBetween('-7 days', 'now'), 'scan_date' => fake()->dateTimeBetween('-7 days', 'now'), ]); } public function completed(): static { return $this->state(fn (array $attributes) => [ 'status' => DocumentStatusEnum::Completed, 'submitted_at' => fake()->dateTimeBetween('-30 days', '-7 days'), 'scan_date' => fake()->dateTimeBetween('-30 days', '-7 days'), 'finalized_at' => fake()->dateTimeBetween('-7 days', 'now'), 'finalized_by' => User::factory(), ]); } public function rejected(): static { return $this->state(fn (array $attributes) => [ 'status' => DocumentStatusEnum::Rejected, 'submitted_at' => fake()->dateTimeBetween('-30 days', '-7 days'), 'rejection_reason' => fake()->sentence(), ]); } public function high(): static { return $this->state(fn (array $attributes) => [ 'priority' => DocumentPriorityEnum::High, ]); } public function medium(): static { return $this->state(fn (array $attributes) => [ 'priority' => DocumentPriorityEnum::Medium, 'processing_deadline' => fake()->dateTimeBetween('now', '+3 days'), ]); } }