FOSSredder 0.5.0
Loading...
Searching...
No Matches
AnnualPolicy.h
Go to the documentation of this file.
1
5
6#pragma once
7
8#include <charconv>
9#include <algorithm>
10#include <cctype>
11#include <memory>
12#include <optional>
13#include <regex>
14#include <string>
15#include <vector>
16#include <utility>
17
20
22
24public:
26 AnnualValidationIssue(std::string transactionId, std::string reason);
27 [[nodiscard]] const std::string& transactionId() const noexcept;
28 [[nodiscard]] const std::string& reason() const noexcept;
29 void setTransactionId(std::string value);
30 void setReason(std::string value);
31private:
32 std::string transactionId_;
33 std::string reason_;
34};
35
37public:
38 [[nodiscard]] const std::vector<AnnualValidationIssue>& issues() const noexcept;
39 void setIssues(std::vector<AnnualValidationIssue> value);
40 void addIssue(std::string transactionId, std::string reason);
41 [[nodiscard]] bool isValid() const noexcept;
42 [[nodiscard]] bool hasIssues() const noexcept;
43private:
44 std::vector<AnnualValidationIssue> issues_;
45};
46
52bool isValidYear(int year);
53
60bool isValidAnnual(int year, const std::vector<std::string>& analysisIds);
61
62inline std::string normalizeId(std::string value);
63
70bool containsAnalysisId(const std::vector<std::string>& analysisIds, const std::string& analysisId);
71
77bool hasUniqueAnalysisIds(const std::vector<std::string>& analysisIds);
78
85bool containsAllAnalysisIds(const std::vector<std::string>& analysisIds,
86 const std::vector<std::string>& requiredIds);
87
93std::string normalizeId(std::string value);
94
99void normalizeIds(std::vector<std::string>& values);
100
106std::optional<int> extractBookingYear(const std::string& bookingDate);
107
115 const std::vector<std::shared_ptr<core::domain::Transaction>>& transactions);
116
117} // namespace core::domain::policies::annual
Domain model for transactions.
Value object for annual year validation.
const std::string & reason() const noexcept
const std::string & transactionId() const noexcept
const std::vector< AnnualValidationIssue > & issues() const noexcept
void setIssues(std::vector< AnnualValidationIssue > value)
void addIssue(std::string transactionId, std::string reason)
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.