diff --git a/models/case.go b/models/case.go index 0c81f966c..d68e40b5f 100644 --- a/models/case.go +++ b/models/case.go @@ -29,6 +29,10 @@ func (c Case) GetMetadata() CaseMetadata { } } +func (c CaseStatus) IsFinalized() bool { + return c == CaseDiscarded || c == CaseResolved +} + type CaseMetadata struct { Id string CreatedAt time.Time diff --git a/models/sanction_check.go b/models/sanction_check.go index 8b93c145c..f43c63115 100644 --- a/models/sanction_check.go +++ b/models/sanction_check.go @@ -9,6 +9,7 @@ type SanctionCheckStatus int const ( SanctionStatusConfirmedHit SanctionCheckStatus = iota + SanctionStatusNoHit SanctionStatusInReview SanctionStatusError SanctionStatusUnknown @@ -18,6 +19,8 @@ func SanctionCheckStatusFrom(s string) SanctionCheckStatus { switch s { case "confirmed_hit": return SanctionStatusConfirmedHit + case "no_hit": + return SanctionStatusNoHit case "in_review": return SanctionStatusInReview case "error": @@ -31,6 +34,8 @@ func (scs SanctionCheckStatus) String() string { switch scs { case SanctionStatusConfirmedHit: return "confirmed_hit" + case SanctionStatusNoHit: + return "no_hit" case SanctionStatusInReview: return "in_review" case SanctionStatusError: @@ -40,6 +45,10 @@ func (scs SanctionCheckStatus) String() string { return "unknown" } +func (scs SanctionCheckStatus) IsFinalized() bool { + return scs == SanctionStatusConfirmedHit || scs == SanctionStatusNoHit +} + type SanctionCheck struct { Id string DecisionId string diff --git a/repositories/migrations/20250120101100_sanction_check.sql b/repositories/migrations/20250120101100_sanction_check.sql index 6546afcea..3f227b286 100644 --- a/repositories/migrations/20250120101100_sanction_check.sql +++ b/repositories/migrations/20250120101100_sanction_check.sql @@ -5,7 +5,7 @@ create table sanction_checks ( id uuid default uuid_generate_v4(), decision_id uuid not null, - status text check (status in ('confirmed_hit', 'in_review', 'error')) default 'in_review', + status text check (status in ('confirmed_hit', 'no_hit', 'in_review', 'error')) default 'in_review', search_input jsonb, search_datasets text[], search_threshold integer, diff --git a/usecases/sanction_check_usecase.go b/usecases/sanction_check_usecase.go index 7d82f68e2..545c5285b 100644 --- a/usecases/sanction_check_usecase.go +++ b/usecases/sanction_check_usecase.go @@ -222,9 +222,7 @@ func (uc SanctionCheckUsecase) enforceCanRefineSanctionCheck(ctx context.Context return models.Decision{}, models.SanctionCheck{}, errors.Wrap(models.NotFoundError, "this sanction check is not linked to a case") } - if (decision[0].Case.Status != models.CaseOpen && decision[0].Case.Status != - models.CaseInvestigating) || (sanctionCheck.Status != models.SanctionStatusInReview && - sanctionCheck.Status != models.SanctionStatusError) { + if decision[0].Case.Status.IsFinalized() || sanctionCheck.Status.IsFinalized() { return models.Decision{}, models.SanctionCheck{}, errors.Wrap(models.NotFoundError, "this sanction is not pending review") } diff --git a/usecases/sanction_check_usecase_test.go b/usecases/sanction_check_usecase_test.go index 14b09435a..6d4922479 100644 --- a/usecases/sanction_check_usecase_test.go +++ b/usecases/sanction_check_usecase_test.go @@ -4,6 +4,7 @@ import ( "context" "testing" + "github.com/checkmarble/marble-backend/models" "github.com/checkmarble/marble-backend/repositories" "github.com/checkmarble/marble-backend/repositories/dbmodels" "github.com/checkmarble/marble-backend/usecases/executor_factory" @@ -65,7 +66,7 @@ func TestGetSanctionCheckOnDecision(t *testing.T) { assert.NoError(t, exec.Mock.ExpectationsWereMet()) assert.NoError(t, err) - assert.Equal(t, mockSc.Status, sc.Status) + assert.Equal(t, models.SanctionCheckStatusFrom(mockSc.Status), sc.Status) assert.Len(t, sc.Matches, 3) assert.Equal(t, mockScMatch.Status, sc.Matches[0].Status) assert.Equal(t, mockScMatch.CommentCount, sc.Matches[0].CommentCount)