diff --git a/app/Contracts/HasVulnerabilityData.php b/app/Contracts/HasVulnerabilityData.php index 5cac147e..c4715d1f 100644 --- a/app/Contracts/HasVulnerabilityData.php +++ b/app/Contracts/HasVulnerabilityData.php @@ -6,20 +6,17 @@ use App\DataTransferObjects\VulnerabilityData; use App\DataTransferObjects\VulnerabilityListItem; +use Illuminate\Database\Eloquent\Model; interface HasVulnerabilityData { /** * Detailed vulnerability data, used in vulnerability chips. - * - * @return VulnerabilityData */ - public function vulnerabilityData(): VulnerabilityData; + public function vulnerabilityData(?Model $record = null): VulnerabilityData; /** * Key-value pair of vulnerability data, used in vulnerability lists. - * - * @return VulnerabilityListItem */ - public function vulnerabilityListItem(): VulnerabilityListItem; + public function vulnerabilityListItem(?Model $record = null): VulnerabilityListItem; } diff --git a/app/Filament/Infolists/Components/VulnerabilityChips.php b/app/Filament/Infolists/Components/VulnerabilityChips.php index cbdf2314..13c19074 100644 --- a/app/Filament/Infolists/Components/VulnerabilityChips.php +++ b/app/Filament/Infolists/Components/VulnerabilityChips.php @@ -31,8 +31,8 @@ protected function setUp(): void return collect($record?->{$this->getName()}) ->map(fn (mixed $vulnerability) => match (true) { - $vulnerability instanceof HasVulnerabilityData => $vulnerability->vulnerabilityData(), - default => $vulnerabilities->get($vulnerability)?->vulnerabilityData(), + $vulnerability instanceof HasVulnerabilityData => $vulnerability->vulnerabilityData($record), + default => $vulnerabilities->get($vulnerability)?->vulnerabilityData($record), }) ->filter(); }); diff --git a/app/Filament/Resources/Beneficiaries/Resources/Catagraphies/Schemas/CatagraphyForm.php b/app/Filament/Resources/Beneficiaries/Resources/Catagraphies/Schemas/CatagraphyForm.php index 7e2fd19d..7c09bc4d 100644 --- a/app/Filament/Resources/Beneficiaries/Resources/Catagraphies/Schemas/CatagraphyForm.php +++ b/app/Filament/Resources/Beneficiaries/Resources/Catagraphies/Schemas/CatagraphyForm.php @@ -300,21 +300,19 @@ public static function configure(Schema $schema): Schema ->live() ->searchable(), - Section::make() - ->heading(__('field.section_details', ['section' => $categories->get('PREG')])) - ->columns() - ->columnSpanFull() - // ->pointer() - ->visible(fn (Get $get) => Vulnerability::isPregnancy($get('cat_rep'))) - ->components([ - Select::make('cat_preg') - ->label($categories->get('PREG')) - ->placeholder(__('placeholder.select_many')) - ->options($vulnerabilities->get('PREG')) - ->rule(new MultipleIn($vulnerabilities->get('PREG')->keys())) - ->multiple() - ->searchable(), - ]), + Select::make('cat_preg') + ->label(__('field.section_details', ['section' => $categories->get('PREG')])) + ->placeholder(__('placeholder.select_many')) + ->options($vulnerabilities->get('PREG')) + ->rule(new MultipleIn($vulnerabilities->get('PREG')->keys())) + ->multiple() + ->searchable() + ->visible(fn (Get $get) => Vulnerability::isPregnancy($get('cat_rep'))), + + TextInput::make('cat_rep_notes') + ->label(__('field.cat_rep_notes')) + ->visible(fn (Get $get) => Vulnerability::isOtherRep($get('cat_rep'))) + ->maxLength(100), ]), Subsection::make() diff --git a/app/Models/Catagraphy.php b/app/Models/Catagraphy.php index 5ebf336c..e289d7cf 100644 --- a/app/Models/Catagraphy.php +++ b/app/Models/Catagraphy.php @@ -42,6 +42,7 @@ class Catagraphy extends Model 'cat_pov', 'cat_preg', 'cat_rep', + 'cat_rep_notes', 'has_health_issues', 'cat_ssa', 'cat_vif', @@ -218,7 +219,7 @@ public function allVulnerabilitiesItems(): Attribute { return Attribute::make( get: fn () => $this->all_vulnerabilities - ->map(fn (HasVulnerabilityData $vulnerability) => $vulnerability->vulnerabilityListItem()) + ->map(fn (HasVulnerabilityData $vulnerability) => $vulnerability->vulnerabilityListItem($this)) )->shouldCache(); } diff --git a/app/Models/Disability.php b/app/Models/Disability.php index a78da7b8..b3f97be9 100644 --- a/app/Models/Disability.php +++ b/app/Models/Disability.php @@ -48,7 +48,7 @@ public function getCertificateVulnerabilityAttribute(): string return $this->has_certificate ? 'VDH_01' : 'VDH_02'; } - public function vulnerabilityData(): VulnerabilityData + public function vulnerabilityData(?Model $record = null): VulnerabilityData { $categories = VulnerabilityCategory::cachedList(); $vulnerabilities = Vulnerability::cachedList(); @@ -86,7 +86,7 @@ public function vulnerabilityData(): VulnerabilityData ); } - public function vulnerabilityListItem(): VulnerabilityListItem + public function vulnerabilityListItem(?Model $record = null): VulnerabilityListItem { $vulnerabilities = Vulnerability::cachedList(); diff --git a/app/Models/Disease.php b/app/Models/Disease.php index eaebc1cb..a1c89536 100644 --- a/app/Models/Disease.php +++ b/app/Models/Disease.php @@ -49,7 +49,7 @@ public function orphaDiagnostic(): BelongsTo return $this->belongsTo(OrphaDiagnostic::class); } - public function vulnerabilityData(): VulnerabilityData + public function vulnerabilityData(?Model $record = null): VulnerabilityData { $categories = VulnerabilityCategory::cachedList(); $vulnerabilities = Vulnerability::cachedList(); @@ -100,7 +100,7 @@ public function vulnerabilityData(): VulnerabilityData ); } - public function vulnerabilityListItem(): VulnerabilityListItem + public function vulnerabilityListItem(?Model $record = null): VulnerabilityListItem { $vulnerabilities = Vulnerability::cachedList(); diff --git a/app/Models/Suspicion.php b/app/Models/Suspicion.php index 3e601e7a..5680fa5e 100644 --- a/app/Models/Suspicion.php +++ b/app/Models/Suspicion.php @@ -33,7 +33,7 @@ class Suspicion extends Model implements HasVulnerabilityData 'notes' => 'string', ]; - public function vulnerabilityData(): VulnerabilityData + public function vulnerabilityData(?Model $record = null): VulnerabilityData { $categories = VulnerabilityCategory::cachedList(); $vulnerabilities = Vulnerability::cachedList(); @@ -69,7 +69,7 @@ public function vulnerabilityData(): VulnerabilityData ); } - public function vulnerabilityListItem(): VulnerabilityListItem + public function vulnerabilityListItem(?Model $record = null): VulnerabilityListItem { $vulnerabilities = Vulnerability::cachedList(); $category = $vulnerabilities->get($this->category); diff --git a/app/Models/Vulnerability/Vulnerability.php b/app/Models/Vulnerability/Vulnerability.php index 4d133d05..46c4caf5 100644 --- a/app/Models/Vulnerability/Vulnerability.php +++ b/app/Models/Vulnerability/Vulnerability.php @@ -8,6 +8,7 @@ use App\Concerns\ModelAsOptions; use App\Contracts\HasVulnerabilityData; use App\DataTransferObjects\VulnerabilityData; +use App\DataTransferObjects\VulnerabilityEntry; use App\DataTransferObjects\VulnerabilityListItem; use App\Models\Appointment; use App\Models\Beneficiary; @@ -158,17 +159,32 @@ public static function isPregnancy(?string $code = null): bool return \in_array($code, ['VGR_01', 'VGR_04']); } - public function vulnerabilityData(): VulnerabilityData + public static function isOtherRep(?string $code = null): bool { + return $code === 'VGR_17'; + } + + public function vulnerabilityData(?Model $record = null): VulnerabilityData + { + $entries = []; + + if (static::isOtherRep($this->id)) { + $entries[] = new VulnerabilityEntry( + label: $this->name, + value: $record->cat_rep_notes ?? '—', + ); + } + return new VulnerabilityData( name: $this->name, category: $this->category->name, color: $this->color, valid: $this->is_valid, + entries: $entries, ); } - public function vulnerabilityListItem(): VulnerabilityListItem + public function vulnerabilityListItem(?Model $record = null): VulnerabilityListItem { return new VulnerabilityListItem( label: $this->name, diff --git a/database/data/260418-vulnerabilities.xlsx b/database/data/260418-vulnerabilities.xlsx new file mode 100644 index 00000000..81aaf7a8 Binary files /dev/null and b/database/data/260418-vulnerabilities.xlsx differ diff --git a/database/migrations/2026_03_18_154852_update_vulnerabilities.php b/database/migrations/2026_03_18_154852_update_vulnerabilities.php new file mode 100644 index 00000000..efa7f16a --- /dev/null +++ b/database/migrations/2026_03_18_154852_update_vulnerabilities.php @@ -0,0 +1,18 @@ +string('cat_rep_notes') + ->nullable() + ->after('cat_rep'); + }); + } +}; diff --git a/lang/ro/field.php b/lang/ro/field.php index c323a331..84176e45 100644 --- a/lang/ro/field.php +++ b/lang/ro/field.php @@ -31,6 +31,7 @@ 'cat_diz_dx' => 'Diagnostic ICD-10', 'cat_diz_iph' => 'Beneficiază de indemnizație/ pensie handicap', 'cat_diz_cert' => 'Deține certificat pentru dizabilitate', + 'cat_rep_notes' => 'Observații vulnerabilitate reproductivă', 'cat_ss_yes' => 'Prezintă boli sau probleme de sănătate', 'cat_ss_no' => 'Fără boli sau probleme de sănătate', 'cat_ss_orph' => 'Diagnostic ORPHA',