RequirementCoverage.java

package com.taxonomy.relations.model;

import jakarta.persistence.*;
import java.time.Instant;

/**
 * Persists the mapping between a requirement identifier and a taxonomy node that
 * the requirement covers (score ≥ configured threshold).
 */
@Entity
@Table(name = "requirement_coverage", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"requirement_id", "node_code"})
})
public class RequirementCoverage {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "requirement_id", nullable = false)
    private String requirementId;

    @Column(name = "requirement_text", length = 2000)
    private String requirementText;

    @Column(name = "node_code", nullable = false)
    private String nodeCode;

    @Column(name = "score")
    private int score;

    @Column(name = "analyzed_at")
    private Instant analyzedAt;

    protected RequirementCoverage() {
    }

    public RequirementCoverage(String requirementId, String requirementText,
                               String nodeCode, int score, Instant analyzedAt) {
        this.requirementId = requirementId;
        this.requirementText = requirementText;
        this.nodeCode = nodeCode;
        this.score = score;
        this.analyzedAt = analyzedAt;
    }

    public Long getId() { return id; }

    public String getRequirementId() { return requirementId; }

    public String getRequirementText() { return requirementText; }

    public String getNodeCode() { return nodeCode; }

    public int getScore() { return score; }

    public Instant getAnalyzedAt() { return analyzedAt; }
}