From b13587c938f7f3ef09a23c055a6916cb49497a86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20Ioni=C8=9B=C4=83?= Date: Thu, 19 Mar 2026 19:29:10 +0000 Subject: [PATCH 1/2] feat: update vulnerabilities --- app/Models/Vulnerability/Vulnerability.php | 5 +++++ database/data/260418-vulnerabilities.xlsx | Bin 0 -> 10134 bytes ...26_03_18_154852_update_vulnerabilities.php | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 database/data/260418-vulnerabilities.xlsx create mode 100644 database/migrations/2026_03_18_154852_update_vulnerabilities.php diff --git a/app/Models/Vulnerability/Vulnerability.php b/app/Models/Vulnerability/Vulnerability.php index 4d133d05..a8c987db 100644 --- a/app/Models/Vulnerability/Vulnerability.php +++ b/app/Models/Vulnerability/Vulnerability.php @@ -158,6 +158,11 @@ public static function isPregnancy(?string $code = null): bool return \in_array($code, ['VGR_01', 'VGR_04']); } + public static function isOtherRep(?string $code = null): bool + { + return $code === 'VGR_17'; + } + public function vulnerabilityData(): VulnerabilityData { return new VulnerabilityData( diff --git a/database/data/260418-vulnerabilities.xlsx b/database/data/260418-vulnerabilities.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..81aaf7a8581405f73c5595af568d59be94428a7d GIT binary patch literal 10134 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 Bn)Cnw literal 0 HcmV?d00001 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 @@ + Date: Thu, 19 Mar 2026 19:52:28 +0000 Subject: [PATCH 2/2] add optional cat_rep_notes field --- app/Contracts/HasVulnerabilityData.php | 9 ++---- .../Components/VulnerabilityChips.php | 4 +-- .../Catagraphies/Schemas/CatagraphyForm.php | 28 +++++++++---------- app/Models/Catagraphy.php | 3 +- app/Models/Disability.php | 4 +-- app/Models/Disease.php | 4 +-- app/Models/Suspicion.php | 4 +-- app/Models/Vulnerability/Vulnerability.php | 15 ++++++++-- ...rep_notes_column_to_catagraphies_table.php | 22 +++++++++++++++ lang/ro/field.php | 1 + 10 files changed, 62 insertions(+), 32 deletions(-) create mode 100644 database/migrations/2026_03_19_191742_add_cat_rep_notes_column_to_catagraphies_table.php 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 a8c987db..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; @@ -163,17 +164,27 @@ public static function isOtherRep(?string $code = null): bool return $code === 'VGR_17'; } - public function vulnerabilityData(): VulnerabilityData + 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/migrations/2026_03_19_191742_add_cat_rep_notes_column_to_catagraphies_table.php b/database/migrations/2026_03_19_191742_add_cat_rep_notes_column_to_catagraphies_table.php new file mode 100644 index 00000000..69492f5b --- /dev/null +++ b/database/migrations/2026_03_19_191742_add_cat_rep_notes_column_to_catagraphies_table.php @@ -0,0 +1,22 @@ +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',