27 [[nodiscard]]
const std::string&
transactionId() const noexcept;
28 [[nodiscard]] const std::
string&
reason() const noexcept;
32 std::
string transactionId_;
38 [[nodiscard]]
const std::vector<AnnualValidationIssue>&
issues()
const noexcept;
39 void setIssues(std::vector<AnnualValidationIssue> value);
41 [[nodiscard]]
bool isValid()
const noexcept;
42 [[nodiscard]]
bool hasIssues()
const noexcept;
44 std::vector<AnnualValidationIssue> issues_;
60bool isValidAnnual(
int year,
const std::vector<std::string>& analysisIds);
70bool containsAnalysisId(
const std::vector<std::string>& analysisIds,
const std::string& analysisId);
86 const std::vector<std::string>& requiredIds);
115 const std::vector<std::shared_ptr<core::domain::Transaction>>& transactions);
Domain model for transactions.
Value object for annual year validation.
const std::string & reason() const noexcept
void setReason(std::string value)
void setTransactionId(std::string value)
const std::string & transactionId() const noexcept
bool isValid() const noexcept
const std::vector< AnnualValidationIssue > & issues() const noexcept
void setIssues(std::vector< AnnualValidationIssue > value)
void addIssue(std::string transactionId, std::string reason)
bool hasIssues() const noexcept
std::optional< int > extractBookingYear(const std::string &bookingDate)
Extracts the year component from a booking date.
AnnualValidationResult validateTransactionsForYear(int year, const std::vector< std::shared_ptr< core::domain::Transaction > > &transactions)
Validates that transaction booking years match the annual year.
bool containsAllAnalysisIds(const std::vector< std::string > &analysisIds, const std::vector< std::string > &requiredIds)
Checks whether a list contains all required analysis ids.
void normalizeIds(std::vector< std::string > &values)
Normalizes and deduplicates analysis ids.
bool isValidAnnual(int year, const std::vector< std::string > &analysisIds)
Checks whether an annual aggregate is structurally valid.
bool containsAnalysisId(const std::vector< std::string > &analysisIds, const std::string &analysisId)
Checks whether an analysis id exists in a list.
bool hasUniqueAnalysisIds(const std::vector< std::string > &analysisIds)
Checks whether all analysis ids are unique.
bool isValidYear(int year)
Checks whether a year is valid for annual aggregates.
std::string normalizeId(std::string value)
Trims leading and trailing whitespace from an id.