77 lines
2.8 KiB
Go
77 lines
2.8 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// ClaimVerification represents verification data for a claim
|
|
type ClaimVerification struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
ClaimID uint `gorm:"not null;uniqueIndex" json:"claim_id"`
|
|
Claim Claim `gorm:"foreignKey:ClaimID" json:"claim,omitempty"`
|
|
SimilarityScore float64 `gorm:"type:decimal(5,2);default:0" json:"similarity_score"` // Percentage match (0-100)
|
|
MatchedKeywords string `gorm:"type:text" json:"matched_keywords"` // Keywords that matched
|
|
VerificationNotes string `gorm:"type:text" json:"verification_notes"` // Manager's notes
|
|
IsAutoMatched bool `gorm:"default:false" json:"is_auto_matched"` // Was it auto-matched?
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
}
|
|
|
|
// TableName specifies the table name for ClaimVerification model
|
|
func (ClaimVerification) TableName() string {
|
|
return "claim_verifications"
|
|
}
|
|
|
|
// IsHighMatch checks if similarity score is high (>= 70%)
|
|
func (cv *ClaimVerification) IsHighMatch() bool {
|
|
return cv.SimilarityScore >= 70.0
|
|
}
|
|
|
|
// IsMediumMatch checks if similarity score is medium (50-69%)
|
|
func (cv *ClaimVerification) IsMediumMatch() bool {
|
|
return cv.SimilarityScore >= 50.0 && cv.SimilarityScore < 70.0
|
|
}
|
|
|
|
// IsLowMatch checks if similarity score is low (< 50%)
|
|
func (cv *ClaimVerification) IsLowMatch() bool {
|
|
return cv.SimilarityScore < 50.0
|
|
}
|
|
|
|
// GetMatchLevel returns the match level as string
|
|
func (cv *ClaimVerification) GetMatchLevel() string {
|
|
if cv.IsHighMatch() {
|
|
return "high"
|
|
} else if cv.IsMediumMatch() {
|
|
return "medium"
|
|
}
|
|
return "low"
|
|
}
|
|
|
|
// ClaimVerificationResponse represents verification data for API responses
|
|
type ClaimVerificationResponse struct {
|
|
ID uint `json:"id"`
|
|
ClaimID uint `json:"claim_id"`
|
|
SimilarityScore float64 `json:"similarity_score"`
|
|
MatchLevel string `json:"match_level"`
|
|
MatchedKeywords string `json:"matched_keywords"`
|
|
VerificationNotes string `json:"verification_notes"`
|
|
IsAutoMatched bool `json:"is_auto_matched"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// ToResponse converts ClaimVerification to ClaimVerificationResponse
|
|
func (cv *ClaimVerification) ToResponse() ClaimVerificationResponse {
|
|
return ClaimVerificationResponse{
|
|
ID: cv.ID,
|
|
ClaimID: cv.ClaimID,
|
|
SimilarityScore: cv.SimilarityScore,
|
|
MatchLevel: cv.GetMatchLevel(),
|
|
MatchedKeywords: cv.MatchedKeywords,
|
|
VerificationNotes: cv.VerificationNotes,
|
|
IsAutoMatched: cv.IsAutoMatched,
|
|
CreatedAt: cv.CreatedAt,
|
|
}
|
|
} |