ContractModel
The ContractModel
class is the abstract base for all ACTUS contract types in the Awesome Actus Library. It defines the structure, validation, and lifecycle behavior of ACTUS-conformant financial contracts such as PAM
, ANN
, LAM
, etc.
All contract types like
PAM
inherit fromContractModel
, which centralizes term management, validation, and internal representation.
🌍 Purpose
- Standardizes how contract terms are structured, stored, and validated
- Handles the lifecycle of contract input validation
- Enforces ACTUS time consistency rules
- Enables extension with user-defined terms
✏️ Structure
Each ContractModel
holds contract terms in a dictionary:
self.terms = {
"contractID": ContractID("PAM-001"),
"notionalPrincipal": NotionalPrincipal(10000.0),
# ...
}
- Keys are the term identifiers (e.g.
contractID
,notionalPrincipal
) - Values are instances of subclasses of
ContractTerm
🛠️ TermBuilder Utility
Inside the model, a helper class TermBuilder
is used to dynamically construct the correct term class based on the name:
builder = self.TermBuilder(self.terms)
builder.add("notionalPrincipal", 10000.0)
This maps a field like notionalPrincipal
to the correct term class (e.g., NotionalPrincipal
).
🔢 Term Access
Get a Term
model.get_term("maturityDate")
Serialize to Dictionary
model.to_dict()
Useful for exporting to JSON or saving contract data.
⚠️ Time Consistency Rules
The ContractModel
enforces ACTUS time ordering constraints via check_time_consistency_rules()
. This includes checks like:
contractDealDate <= initialExchangeDate <= maturityDate
cycleAnchorDateOfInterestPayment < maturityDate
optionExerciseEndDate <= maturityDate
Warnings are printed if rules are violated.
🌐 User-Defined Terms
If you add a custom term not in the ACTUS standard, the model can still accept it:
pam = PAM(..., myCustomField="customValue")
These are wrapped using a fallback UserDefinedTerm
and stored normally in self.terms
.
✅ Required Method
validate_terms()
(abstract)
Each subclass (e.g. PAM
, ANN
) must implement validate_terms()
to:
- Check ACTUS group dependencies
- Raise errors for missing fields
🔗 See Also
PAM
for a concrete example- Contract Terms
- ACTUS Standard Overview