{
    "bmm_version": "2.4",
    "rm_publisher": "openehr",
    "schema_name": "base",
    "rm_release": "1.2.0",
    "schema_revision": "1.2.0.2",
    "schema_lifecycle_state": "stable",
    "schema_description": "openEHR base types.",
    "schema_author": "Thomas Beale <thomas.beale@openehr.org>, code-generator",
    "packages": {
        "org.openehr.base.base_types": {
            "name": "org.openehr.base.base_types",
            "packages": {
                "identification": {
                    "name": "identification",
                    "classes": [
                        "ARCHETYPE_ID",
                        "GENERIC_ID",
                        "HIER_OBJECT_ID",
                        "LOCATABLE_REF",
                        "OBJECT_ID",
                        "OBJECT_REF",
                        "OBJECT_VERSION_ID",
                        "PARTY_REF",
                        "TERMINOLOGY_ID",
                        "VERSION_TREE_ID",
                        "UID_BASED_ID",
                        "UUID",
                        "INTERNET_ID",
                        "UID",
                        "ISO_OID",
                        "TEMPLATE_ID",
                        "ACCESS_GROUP_REF"
                    ]
                },
                "definitions": {
                    "name": "definitions",
                    "classes": [
                        "OPENEHR_DEFINITIONS",
                        "BASIC_DEFINITIONS",
                        "VALIDITY_KIND",
                        "VERSION_STATUS"
                    ]
                },
                "builtins": {
                    "name": "builtins",
                    "classes": [
                        "Env",
                        "Statistical_evaluator",
                        "Locale",
                        "Math",
                        "Quantity_converter"
                    ]
                }
            }
        },
        "org.openehr.base.foundation_types": {
            "name": "org.openehr.base.foundation_types",
            "packages": {
                "structure": {
                    "name": "structure",
                    "classes": [
                        "Hash",
                        "Container",
                        "List",
                        "Set",
                        "Array"
                    ]
                },
                "primitive_types": {
                    "name": "primitive_types",
                    "classes": [
                        "Uri",
                        "Comparable",
                        "Ordered_Numeric",
                        "Integer",
                        "Double",
                        "Numeric",
                        "Octet",
                        "Character",
                        "Boolean",
                        "String",
                        "Real",
                        "Integer64",
                        "Ordered"
                    ]
                },
                "functional": {
                    "name": "functional",
                    "classes": [
                        "TUPLE",
                        "FUNCTION",
                        "TUPLE1",
                        "TUPLE2",
                        "ROUTINE",
                        "PROCEDURE"
                    ]
                },
                "time": {
                    "name": "time",
                    "classes": [
                        "Iso8601_date_time",
                        "Iso8601_duration",
                        "Iso8601_time",
                        "Iso8601_timezone",
                        "Iso8601_type",
                        "Iso8601_date",
                        "Time_Definitions",
                        "Temporal"
                    ]
                },
                "interval": {
                    "name": "interval",
                    "classes": [
                        "Multiplicity_interval",
                        "Proper_interval",
                        "Interval",
                        "Point_interval",
                        "Cardinality"
                    ]
                },
                "terminology": {
                    "name": "terminology",
                    "classes": [
                        "Terminology_code",
                        "Terminology_term"
                    ]
                }
            },
            "classes": [
                "Any"
            ]
        },
        "org.openehr.base.resource": {
            "name": "org.openehr.base.resource",
            "classes": [
                "AUTHORED_RESOURCE",
                "RESOURCE_DESCRIPTION",
                "TRANSLATION_DETAILS",
                "RESOURCE_DESCRIPTION_ITEM",
                "RESOURCE_ANNOTATIONS"
            ]
        }
    },
    "primitive_types": {
        "Any": {
            "name": "Any",
            "documentation": "Abstract ancestor class for all other classes. Usually maps to a type like `Any` or `Object` in an object-oriented technology. Defined here to provide value and reference equality semantics.",
            "is_abstract": true,
            "functions": {
                "is_equal": {
                    "name": "is_equal",
                    "documentation": "Value equality: return True if `this` and `_other_` are attached to objects considered to be equal in value.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Any"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "equal": {
                    "name": "equal",
                    "aliases": [
                        "=",
                        "=="
                    ],
                    "documentation": "Reference equality for reference types, value equality for value types.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Any"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "instance_of": {
                    "name": "instance_of",
                    "documentation": "Create new instance of a type.",
                    "parameters": {
                        "a_type": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_type",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Any"
                    }
                },
                "type_of": {
                    "name": "type_of",
                    "documentation": "Type name of an object as a string. May include generic parameters, as in `\"Interval<Time>\"`.",
                    "parameters": {
                        "an_object": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "an_object",
                            "type": "Any"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "not_equal": {
                    "name": "not_equal",
                    "aliases": [
                        "!=",
                        "\u2260"
                    ],
                    "documentation": "True if current object not equal to `_other_`. Returns not `_equal_()`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Ordered"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Hash": {
            "name": "Hash",
            "documentation": "Type representing a keyed table of values. V is the value type, and K the type of the keys. ",
            "ancestors": [
                "Container"
            ],
            "generic_parameter_defs": {
                "K": {
                    "name": "K",
                    "conforms_to_type": "Ordered"
                },
                "V": {
                    "name": "V"
                }
            },
            "functions": {
                "has_key": {
                    "name": "has_key",
                    "documentation": "Test for presence of `_a_key_`.",
                    "parameters": {
                        "a_key": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER_OPEN",
                            "name": "a_key",
                            "type": "K"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "item": {
                    "name": "item",
                    "aliases": [
                        "[]"
                    ],
                    "documentation": "Return item for key `_a_key_`.",
                    "parameters": {
                        "a_key": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER_OPEN",
                            "name": "a_key",
                            "type": "K"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "V"
                    }
                }
            }
        },
        "Container": {
            "name": "Container",
            "documentation": "Abstract ancestor of container types whose items are addressable in some way.",
            "is_abstract": true,
            "ancestors": [
                "Any"
            ],
            "generic_parameter_defs": {
                "T": {
                    "name": "T",
                    "conforms_to_type": "Any"
                }
            },
            "functions": {
                "has": {
                    "name": "has",
                    "documentation": "Test for membership of a value.",
                    "is_abstract": true,
                    "parameters": {
                        "v": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER_OPEN",
                            "name": "v",
                            "type": "T"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "count": {
                    "name": "count",
                    "documentation": "Number of items in container.",
                    "is_abstract": true,
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "is_empty": {
                    "name": "is_empty",
                    "documentation": "True if container is empty.",
                    "is_abstract": true,
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "there_exists": {
                    "name": "there_exists",
                    "aliases": [
                        "there exists",
                        "\u2203"
                    ],
                    "documentation": "Existential quantifier applied to container, taking one agent argument `_test_` whose signature is `(v:T): Boolean`.",
                    "parameters": {
                        "test": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "test",
                            "type": "Operation"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "for_all": {
                    "name": "for_all",
                    "aliases": [
                        "for all",
                        "\u2200"
                    ],
                    "documentation": "Universal quantifier applied to container, taking one agent argument `_test_` whose signature is `(v:T): Boolean`.",
                    "parameters": {
                        "test": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "test",
                            "type": "Operation"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "matching": {
                    "name": "matching",
                    "documentation": "Return a List all items matching the predicate function `_test_` which has signature `(v:T): Boolean`. If no matches, an empty List is returned.",
                    "parameters": {
                        "test": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "test",
                            "type": "Operation"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_CONTAINER_TYPE",
                        "container_type": "List",
                        "type": "T"
                    },
                    "is_nullable": true
                },
                "select": {
                    "name": "select",
                    "documentation": "Return first item matching the predicate function `_test_` which has signature `(v:T): Boolean`, or Void if no match.",
                    "parameters": {
                        "test": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "test",
                            "type": "Operation"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "T"
                    },
                    "is_nullable": true
                }
            }
        },
        "List": {
            "name": "List",
            "documentation": "Ordered container that may contain duplicates.",
            "ancestors": [
                "Container"
            ],
            "generic_parameter_defs": {
                "T": {
                    "name": "T",
                    "conforms_to_type": "Any"
                }
            },
            "functions": {
                "first": {
                    "name": "first",
                    "documentation": "Return first element.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "T"
                    }
                },
                "last": {
                    "name": "last",
                    "documentation": "Return last element.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "T"
                    }
                }
            },
            "invariants": {
                "First_validity": "not is_empty implies first \/= Void",
                "Last_validity": "not is_empty implies last \/= Void"
            }
        },
        "Set": {
            "name": "Set",
            "documentation": "Unordered container that may not contain duplicates.",
            "ancestors": [
                "Container"
            ],
            "generic_parameter_defs": {
                "T": {
                    "name": "T",
                    "conforms_to_type": "Any"
                }
            }
        },
        "Array": {
            "name": "Array",
            "documentation": "Container whose storage is assumed to be contiguous.",
            "ancestors": [
                "Container"
            ],
            "generic_parameter_defs": {
                "T": {
                    "name": "T",
                    "conforms_to_type": "Any"
                }
            },
            "functions": {
                "item": {
                    "name": "item",
                    "aliases": [
                        "[]"
                    ],
                    "documentation": "Return item for key  `_a_key_`.",
                    "parameters": {
                        "a_key": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_key",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "T"
                    }
                }
            }
        },
        "Uri": {
            "name": "Uri",
            "documentation": "A kind of String constrained to obey the syntax of RFC 3986.",
            "ancestors": [
                "String"
            ]
        },
        "Ordered_Numeric": {
            "name": "Ordered_Numeric",
            "documentation": "Abstract notional parent class of ordered, numeric types, which are types with both the `_less_than_()` and arithmetic functions defined.",
            "is_abstract": true,
            "ancestors": [
                "Ordered",
                "Numeric"
            ]
        },
        "Integer": {
            "name": "Integer",
            "documentation": "Type representing minimal interface of built-in Integer type.",
            "ancestors": [
                "Ordered_Numeric"
            ],
            "functions": {
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Integer addition.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Integer subtraction.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "multiply": {
                    "name": "multiply",
                    "aliases": [
                        "&#42;"
                    ],
                    "documentation": "Integer multiplication.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "divide": {
                    "name": "divide",
                    "aliases": [
                        "\/"
                    ],
                    "documentation": "Integer division.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "exponent": {
                    "name": "exponent",
                    "aliases": [
                        "^"
                    ],
                    "documentation": "Integer exponentiation.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "modulo": {
                    "name": "modulo",
                    "aliases": [
                        "mod",
                        "\\\\"
                    ],
                    "documentation": "Return self modulo other.",
                    "parameters": {
                        "mod": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "mod",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "less_than": {
                    "name": "less_than",
                    "aliases": [
                        "<"
                    ],
                    "documentation": "Returns True if current Integer is less than `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "negative": {
                    "name": "negative",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Generate negative of current Integer value.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "is_equal": {
                    "name": "is_equal",
                    "documentation": "Value equality: return True if `this` and `_other_` are attached to objects considered to be equal in value.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "equal": {
                    "name": "equal",
                    "aliases": [
                        "=",
                        "=="
                    ],
                    "documentation": "Reference equality for reference types, value equality for value types.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Double": {
            "name": "Double",
            "documentation": "Type used to represent double-precision decimal numbers. Corresponds to a double-precision floating point value in most languages.",
            "ancestors": [
                "Ordered_Numeric"
            ],
            "functions": {
                "floor": {
                    "name": "floor",
                    "documentation": "Return the greatest integer no greater than the value of this object.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Double-precision real number addition.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Double-precision real number subtraction.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "multiply": {
                    "name": "multiply",
                    "aliases": [
                        "&#42;"
                    ],
                    "documentation": "Double-precision real number multiplication.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "divide": {
                    "name": "divide",
                    "aliases": [
                        "\/"
                    ],
                    "documentation": "Double-precision real number division.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "exponent": {
                    "name": "exponent",
                    "aliases": [
                        "^"
                    ],
                    "documentation": "Double-precision real number exponentiation.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "less_than": {
                    "name": "less_than",
                    "aliases": [
                        "<"
                    ],
                    "documentation": "Returns True if current Double is less than `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "negative": {
                    "name": "negative",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Generate negative of current Double value.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "is_equal": {
                    "name": "is_equal",
                    "documentation": "Value equality: return True if `this` and `_other_` are attached to objects considered to be equal in value.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "equal": {
                    "name": "equal",
                    "aliases": [
                        "=",
                        "=="
                    ],
                    "documentation": "Reference equality for reference types, value equality for value types.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Numeric": {
            "name": "Numeric",
            "documentation": "Abstract parent class of numeric types, which are types which have various arithmetic and comparison operators defined.",
            "is_abstract": true,
            "ancestors": [
                "Any"
            ],
            "functions": {
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Sum with `_other_` (commutative). Actual type of result depends on arithmetic balancing rules.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Result of subtracting `_other_`. Actual type of result depends on arithmetic balancing rules.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "multiply": {
                    "name": "multiply",
                    "aliases": [
                        "&#42;"
                    ],
                    "documentation": "Product by `_other_`. Actual type of result depends on arithmetic balancing rules.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "divide": {
                    "name": "divide",
                    "aliases": [
                        "\/"
                    ],
                    "documentation": "Divide by`_other_`. Actual type of result depends on arithmetic balancing rules.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "exponent": {
                    "name": "exponent",
                    "aliases": [
                        "^"
                    ],
                    "documentation": "Expontiation of this by `_other_`.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "negative": {
                    "name": "negative",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Generate negative of current value.",
                    "is_abstract": true,
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                }
            }
        },
        "Octet": {
            "name": "Octet",
            "documentation": "Type representing minimal interface of built-in Octet type.",
            "ancestors": [
                "Ordered"
            ]
        },
        "Character": {
            "name": "Character",
            "documentation": "Type representing minimal interface of built-in Character type.",
            "ancestors": [
                "Ordered"
            ]
        },
        "Boolean": {
            "name": "Boolean",
            "documentation": "Type representing minimal interface of built-in Boolean type.",
            "ancestors": [
                "Any"
            ],
            "functions": {
                "conjunction": {
                    "name": "conjunction",
                    "aliases": [
                        "and",
                        "\u2227",
                        "&"
                    ],
                    "documentation": "Logical conjunction of this with `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Boolean"
                        }
                    },
                    "post_conditions": {
                        "Post_de_Morgan": "Result = not (not self or not other)",
                        "Post_commutative": "Result = (other and self)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "semistrict_conjunction": {
                    "name": "semistrict_conjunction",
                    "aliases": [
                        "and then",
                        "&&"
                    ],
                    "documentation": "Boolean semi-strict conjunction with `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Boolean"
                        }
                    },
                    "post_conditions": {
                        "Post_de_Morgan": "Result = not (not self or else not other)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "disjunction": {
                    "name": "disjunction",
                    "aliases": [
                        "or",
                        "\u2228",
                        "&#124;"
                    ],
                    "documentation": "Boolean disjunction with `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Boolean"
                        }
                    },
                    "post_conditions": {
                        "Post_de_Morgan": "Result = not (not self and not other)",
                        "Post_commutative": "Result = (other or Current)",
                        "Post_consistent_with_semi_strict": "Result implies (self or else other)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "semistrict_disjunction": {
                    "name": "semistrict_disjunction",
                    "aliases": [
                        "or else",
                        "&#124;&#124;"
                    ],
                    "documentation": "Boolean semi-strict disjunction with `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Boolean"
                        }
                    },
                    "post_conditions": {
                        "Post_de_Morgan": "Result = not (not self and then not other)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "exclusive_disjunction": {
                    "name": "exclusive_disjunction",
                    "aliases": [
                        "xor",
                        "\u22bb"
                    ],
                    "documentation": "Boolean exclusive or with `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Boolean"
                        }
                    },
                    "post_conditions": {
                        "Post_definition": "Result = ((self or other) and not (self and other))"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "implication": {
                    "name": "implication",
                    "aliases": [
                        "implies",
                        "\u21d2"
                    ],
                    "documentation": "Boolean implication of `_other_` (semi-strict)",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Boolean"
                        }
                    },
                    "post_conditions": {
                        "Post_definition": "Result = (not self or else other)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "negation": {
                    "name": "negation",
                    "aliases": [
                        "not",
                        "\u00ac",
                        "!"
                    ],
                    "documentation": "Boolean negation of the current value.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            },
            "invariants": {
                "Involutive_negation": "is_equal (not (not self))",
                "Non_contradiction": "not (self and (not self))",
                "Completeness": "self or else (not self)"
            }
        },
        "String": {
            "name": "String",
            "documentation": "Type representing minimal interface of built-in String type, as used to represent textual data in any natural or formal language.",
            "ancestors": [
                "Ordered"
            ],
            "functions": {
                "is_empty": {
                    "name": "is_empty",
                    "documentation": "True if string is empty, i.e. equal to \"\".",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_integer": {
                    "name": "is_integer",
                    "documentation": "True if string can be parsed as an integer.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "as_integer": {
                    "name": "as_integer",
                    "documentation": "Return the integer corresponding to the integer value represented in this string.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "append": {
                    "name": "append",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Concatenation operator - causes `_other_` to be appended to this string.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "less_than": {
                    "name": "less_than",
                    "aliases": [
                        "<"
                    ],
                    "documentation": "Lexical comparison of string content based on ordering in relevant character set.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "contains": {
                    "name": "contains",
                    "documentation": "Return True if this String contains `_other_` (case-sensitive).",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Real": {
            "name": "Real",
            "documentation": "Type used to represent decimal numbers. Corresponds to a single-precision floating point value in most languages.",
            "ancestors": [
                "Ordered_Numeric"
            ],
            "functions": {
                "floor": {
                    "name": "floor",
                    "documentation": "Return the greatest integer no greater than the value of this object.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Real number addition.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Real number subtraction.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "multiply": {
                    "name": "multiply",
                    "aliases": [
                        "&#42;"
                    ],
                    "documentation": "Real number multiplication.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "divide": {
                    "name": "divide",
                    "aliases": [
                        "\/"
                    ],
                    "documentation": "Real number division.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "exponent": {
                    "name": "exponent",
                    "aliases": [
                        "^"
                    ],
                    "documentation": "Real number exponentiation.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "less_than": {
                    "name": "less_than",
                    "aliases": [
                        "<"
                    ],
                    "documentation": "Returns True if current Real is less than `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "negative": {
                    "name": "negative",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Generate negative of current Real value.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "is_equal": {
                    "name": "is_equal",
                    "documentation": "Value equality: return True if `this` and `_other_` are attached to objects considered to be equal in value.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "equal": {
                    "name": "equal",
                    "aliases": [
                        "=",
                        "=="
                    ],
                    "documentation": "Reference equality for reference types, value equality for value types.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Integer64": {
            "name": "Integer64",
            "documentation": "Type representing minimal interface of built-in Integer64 type.",
            "ancestors": [
                "Ordered_Numeric"
            ],
            "functions": {
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Large integer addition.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer64"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Large integer subtraction.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer64"
                    }
                },
                "multiply": {
                    "name": "multiply",
                    "aliases": [
                        "&#42;"
                    ],
                    "documentation": "Large integer multiplication.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer64"
                    }
                },
                "divide": {
                    "name": "divide",
                    "aliases": [
                        "\/"
                    ],
                    "documentation": "Large integer division.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "exponent": {
                    "name": "exponent",
                    "aliases": [
                        "^"
                    ],
                    "documentation": "Large integer exponentiation.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Double"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "modulo": {
                    "name": "modulo",
                    "aliases": [
                        "mod",
                        "\\\\"
                    ],
                    "documentation": "Large integer modulus.",
                    "parameters": {
                        "mod": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "mod",
                            "type": "Integer"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer64"
                    }
                },
                "less_than": {
                    "name": "less_than",
                    "aliases": [
                        "<"
                    ],
                    "documentation": "Returns True if current Integer is less than `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Integer64"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "negative": {
                    "name": "negative",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Generate negative of current Integer value.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer64"
                    }
                },
                "is_equal": {
                    "name": "is_equal",
                    "documentation": "Value equality: return True if `this` and `_other_` are attached to objects considered to be equal in value.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Integer64"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "equal": {
                    "name": "equal",
                    "aliases": [
                        "=",
                        "=="
                    ],
                    "documentation": "Reference equality for reference types, value equality for value types.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "documentation": "Other object for comparison.",
                            "type": "Integer64"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Ordered": {
            "name": "Ordered",
            "documentation": "Abstract parent class of ordered types i.e. types on which the '<' operator is defined.",
            "is_abstract": true,
            "ancestors": [
                "Any"
            ],
            "functions": {
                "less_than": {
                    "name": "less_than",
                    "aliases": [
                        "<"
                    ],
                    "documentation": "Arithmetic value comparison. Returns True if current object is less than `_other_`. This operator is effected and\/or redefined in descendants to provide the appropriate ordering semantics for concrete types.\n\nIn conjunction with `=`, enables the definition of the related functions `_greater_than_()` etc.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Ordered"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "less_than_or_equal": {
                    "name": "less_than_or_equal",
                    "aliases": [
                        "<=",
                        "\u2264"
                    ],
                    "documentation": "True if current object less than or equal to `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Ordered"
                        }
                    },
                    "post_conditions": {
                        "Post_result": "not (other < self)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "greater_than": {
                    "name": "greater_than",
                    "aliases": [
                        ">"
                    ],
                    "documentation": "True if current object greater than `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Ordered"
                        }
                    },
                    "post_conditions": {
                        "Post_result": "Result = (other < self)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "greater_than_or_equal": {
                    "name": "greater_than_or_equal",
                    "aliases": [
                        ">=",
                        "\u2265"
                    ],
                    "documentation": "True if current object greater than or equal to `_other_`.",
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Ordered"
                        }
                    },
                    "post_conditions": {
                        "Post_result": "Result = (other <= self)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Iso8601_date_time": {
            "name": "Iso8601_date_time",
            "documentation": "Represents an ISO 8601 date\/time, including partial and extended forms. Value may be:\n\n* `YYYY-MM-DDThh:mm:ss[(,|.)sss][Z | \u00b1hh[:mm]]` (extended, preferred) or\n* `YYYYMMDDThhmmss[(,|.)sss][Z | \u00b1hh[mm]]` (compact)\n* or a partial variant.\n\nSee `_valid_iso8601_date_time()_` for validity.\n\nNote that this class includes 2 deviations from ISO 8601:2004:\n\n* for partial date\/times, any part of the date\/time up to the month may be missing, not just seconds and minutes as in the standard;\n* the time `24:00:00` is not allowed, since it would mean the date was really on the next day.",
            "ancestors": [
                "Iso8601_type"
            ],
            "functions": {
                "year": {
                    "name": "year",
                    "documentation": "Extract the year part of the date as an Integer.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "month": {
                    "name": "month",
                    "documentation": "Extract the month part of the date\/time as an Integer, or return 0 if not present.",
                    "pre_conditions": {
                        "Pre": "not month_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "day": {
                    "name": "day",
                    "documentation": "Extract the day part of the date\/time as an Integer, or return 0 if not present.",
                    "pre_conditions": {
                        "Pre": "not day_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "hour": {
                    "name": "hour",
                    "documentation": "Extract the hour part of the date\/time as an Integer, or return 0 if not present.",
                    "pre_conditions": {
                        "Pre": "not hour_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "minute": {
                    "name": "minute",
                    "documentation": "Extract the minute part of the date\/time as an Integer, or return 0 if not present.",
                    "pre_conditions": {
                        "Pre": "not minute_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "second": {
                    "name": "second",
                    "documentation": "Extract the integral seconds part of the date\/time (i.e. prior to any decimal sign) as an Integer, or return 0 if not present.",
                    "pre_conditions": {
                        "Pre": "not second_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "fractional_second": {
                    "name": "fractional_second",
                    "documentation": "Extract the fractional seconds part of the date\/time (i.e. following to any decimal sign) as a Real, or return 0.0 if not present.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "timezone": {
                    "name": "timezone",
                    "documentation": "Timezone; may be Void.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_timezone"
                    }
                },
                "month_unknown": {
                    "name": "month_unknown",
                    "documentation": "Indicates whether month in year is unknown.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "day_unknown": {
                    "name": "day_unknown",
                    "documentation": "Indicates whether day in month is unknown.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "minute_unknown": {
                    "name": "minute_unknown",
                    "documentation": "Indicates whether minute in hour is known.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "second_unknown": {
                    "name": "second_unknown",
                    "documentation": "Indicates whether minute in hour is known.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_decimal_sign_comma": {
                    "name": "is_decimal_sign_comma",
                    "documentation": "True if this time has a decimal part indicated by `','` (comma) rather than `'.'` (period).",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_partial": {
                    "name": "is_partial",
                    "documentation": "True if this date time is partial, i.e. if seconds or more is missing.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_extended": {
                    "name": "is_extended",
                    "documentation": "True if this date\/time uses `'-'`, `':'` separators.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "has_fractional_second": {
                    "name": "has_fractional_second",
                    "documentation": "True if the `_fractional_second_` part is significant (i.e. even if = 0.0).",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "as_string": {
                    "name": "as_string",
                    "documentation": "Return the string value in extended format.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Arithmetic addition of a duration to a date\/time.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date_time"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Arithmetic subtraction of a duration from a date\/time.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date_time"
                    }
                },
                "diff": {
                    "name": "diff",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Difference of two date\/times.",
                    "parameters": {
                        "a_date_time": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_date_time",
                            "type": "Iso8601_date_time"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                },
                "add_nominal": {
                    "name": "add_nominal",
                    "aliases": [
                        "++"
                    ],
                    "documentation": "Addition of nominal duration represented by `_a_diff_`. See `Iso8601_date._add_nominal_()` for semantics.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date"
                    }
                },
                "subtract_nominal": {
                    "name": "subtract_nominal",
                    "aliases": [
                        "--"
                    ],
                    "documentation": "Subtraction of nominal duration represented by `_a_diff_`. See `_add_nominal_()` for semantics.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date"
                    }
                }
            },
            "invariants": {
                "Year_valid": "valid_year (year)",
                "Month_valid": "valid_month (month)",
                "Day_valid": "valid_day(year, month, day)",
                "Hour_valid": "valid_hour (hour, minute, second)",
                "Minute_valid": "not minute_unknown implies valid_minute(minute)",
                "Second_valid": "not second_unknown implies valid_second (second)",
                "Fractional_second_valid": "has_fractional_second implies (not second_unknown and valid_fractional_second (fractional_second))",
                "Partial_validity_year": "not month_unknown",
                "Partial_validity_month": "not month_unknown",
                "Partial_validity_day": "not day_unknown",
                "Partial_validity_hour": "not hour_unknown",
                "Partial_validity_minute": "minute_unknown implies second_unknown"
            }
        },
        "Iso8601_duration": {
            "name": "Iso8601_duration",
            "documentation": "Represents an ISO 8601 duration, which may have multiple parts from years down to seconds. The `_value_` attribute is a String in the format:\n\n* `P[nnY][nnM][nnW][nnD][T[nnH][nnM][nnS]]`\n\nNOTE: two deviations from ISO 8601 are supported, the first, to allow a negative sign, and the second allowing the 'W' designator to be mixed with other designators.",
            "ancestors": [
                "Iso8601_type"
            ],
            "functions": {
                "is_extended": {
                    "name": "is_extended",
                    "documentation": "Returns True.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_partial": {
                    "name": "is_partial",
                    "documentation": "Returns False.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "years": {
                    "name": "years",
                    "documentation": "Number of years in the `_value_`, i.e. the number preceding the `'Y'` in the `'YMD'` part, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "months": {
                    "name": "months",
                    "documentation": "Number of months in the `_value_`, i.e. the value preceding the `'M'` in the `'YMD'` part, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "days": {
                    "name": "days",
                    "documentation": "Number of days in the `_value_`, i.e. the number preceding the `'D'` in the `'YMD'` part, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "hours": {
                    "name": "hours",
                    "documentation": "Number of hours in the `_value_`, i.e. the number preceding the `'H'` in the `'HMS'` part, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "minutes": {
                    "name": "minutes",
                    "documentation": "Number of minutes in the `_value_`, i.e. the number preceding the `'M'` in the `'HMS'` part, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "seconds": {
                    "name": "seconds",
                    "documentation": "Number of seconds in the `_value_`, i.e. the integer number preceding the `'S'` in the `'HMS'` part, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "fractional_seconds": {
                    "name": "fractional_seconds",
                    "documentation": "Fractional seconds in the `_value_`, i.e. the decimal part of the number preceding the `'S'` in the `'HMS'` part, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "weeks": {
                    "name": "weeks",
                    "documentation": "Number of weeks in the `_value_`, i.e. the value preceding the `W`, if one exists.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "is_decimal_sign_comma": {
                    "name": "is_decimal_sign_comma",
                    "documentation": "True if this time has a decimal part indicated by ',' (comma) rather than '.' (period).",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "to_seconds": {
                    "name": "to_seconds",
                    "documentation": "Total number of seconds equivalent (including fractional) of entire duration. Where non-definite elements such as year and month (i.e. 'Y' and 'M') are included, the corresponding 'average' durations from `Time_definitions` are used to compute the result.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "as_string": {
                    "name": "as_string",
                    "documentation": "Return the duration string value.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Arithmetic addition of a duration to a duration, via conversion to seconds, using `Time_definitions._Average_days_in_year_` and `Time_definitions._Average_days_in_month_`",
                    "parameters": {
                        "a_val": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_val",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Arithmetic subtraction of a duration from a duration, via conversion to seconds, using `Time_definitions._Average_days_in_year_` and `Time_definitions._Average_days_in_month_`",
                    "parameters": {
                        "a_val": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_val",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                },
                "multiply": {
                    "name": "multiply",
                    "aliases": [
                        "&#42;"
                    ],
                    "documentation": "Arithmetic multiplication a duration by a number.",
                    "parameters": {
                        "a_val": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_val",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                },
                "divide": {
                    "name": "divide",
                    "aliases": [
                        "\/"
                    ],
                    "documentation": "Arithmetic division of a duration by a number.",
                    "parameters": {
                        "a_val": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_val",
                            "type": "Real"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                },
                "negative": {
                    "name": "negative",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Generate negative of current duration value.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                }
            },
            "invariants": {
                "Years_valid": "years >= 0",
                "Months_valid": "months >= 0",
                "Weeks_valid": "weeks >= 0",
                "Days_valid": "days >= 0",
                "Hours_valid": "hours >= 0",
                "Minutes_valid": "minutes >= 0",
                "Seconds_valid": "seconds >= 0",
                "Fractional_second_valid": "fractional_second >= 0.0 and fractional_second < 1.0"
            }
        },
        "Iso8601_time": {
            "name": "Iso8601_time",
            "documentation": "Represents an ISO 8601 time, including partial and extended forms. Value may be:\n\n* `hh:mm:ss[(,|.)sss][Z|\u00b1hh[:mm]]` (extended, preferred) or\n* `hhmmss[(,|.)sss][Z|\u00b1hh[mm]]` (compact)\n* or a partial invariant.\n\nSee `_valid_iso8601_time()_` for validity.\n\nNOTE: A small deviation to the ISO 8601:2004 standard in this class is that the time `24:00:00` is not allowed, for consistency with `Iso8601_date_time`.",
            "ancestors": [
                "Iso8601_type"
            ],
            "functions": {
                "hour": {
                    "name": "hour",
                    "documentation": "Extract the hour part of the date\/time as an Integer.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "minute": {
                    "name": "minute",
                    "documentation": "Extract the minute part of the time as an Integer, or return 0 if not present.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "second": {
                    "name": "second",
                    "documentation": "Extract the integral seconds part of the time (i.e. prior to any decimal sign) as an Integer, or return 0 if not present.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "fractional_second": {
                    "name": "fractional_second",
                    "documentation": "Extract the fractional seconds part of the time (i.e. following to any decimal sign) as a Real, or return 0.0 if not present.",
                    "pre_conditions": {
                        "Pre": "not second_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                },
                "timezone": {
                    "name": "timezone",
                    "documentation": "Timezone; may be Void.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_timezone"
                    }
                },
                "minute_unknown": {
                    "name": "minute_unknown",
                    "documentation": "Indicates whether minute is unknown. If so, the time is of the form \u201chh\u201d.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "second_unknown": {
                    "name": "second_unknown",
                    "documentation": "Indicates whether second is unknown. If so and month is known, the time is of the form `\"hh:mm\"` or `\"hhmm\"`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_decimal_sign_comma": {
                    "name": "is_decimal_sign_comma",
                    "documentation": "True if this time has a decimal part indicated by `','` (comma) rather than `'.'` (period).",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_partial": {
                    "name": "is_partial",
                    "documentation": "True if this time is partial, i.e. if seconds or more is missing.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_extended": {
                    "name": "is_extended",
                    "documentation": "True if this time uses `'-'`, `':'` separators.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "has_fractional_second": {
                    "name": "has_fractional_second",
                    "documentation": "True if the `_fractional_second_` part is significant (i.e. even if = 0.0).",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "as_string": {
                    "name": "as_string",
                    "documentation": "Return string value in extended format.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Arithmetic addition of a duration to a time.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_time"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Arithmetic subtraction of a duration from a time.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_time"
                    }
                },
                "diff": {
                    "name": "diff",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Difference of two times.",
                    "parameters": {
                        "a_time": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_time",
                            "type": "Iso8601_time"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                }
            },
            "invariants": {
                "Hour_valid": "valid_hour(hour, minute, second)",
                "Minute_valid": "not minute_unknown implies valid_minute (minute)",
                "Second_valid": "not second_unknown implies valid_second (second)",
                "Fractional_second_valid": "has_fractional_second implies (not second_unknown and valid_fractional_second (fractional_second))",
                "Partial_validity": "minute_unknown implies second_unknown"
            }
        },
        "Iso8601_type": {
            "name": "Iso8601_type",
            "documentation": "Abstract ancestor type of ISO 8601 types, defining interface for 'extended' and 'partial' concepts from ISO 8601.",
            "is_abstract": true,
            "ancestors": [
                "Temporal",
                "Time_Definitions"
            ],
            "properties": {
                "value": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "value",
                    "documentation": "Representation of all descendants is a single String.",
                    "is_mandatory": true,
                    "type": "String"
                }
            },
            "functions": {
                "is_partial": {
                    "name": "is_partial",
                    "documentation": "True if this date time is partial, i.e. if trailing end (right hand) value(s) is\/are missing.",
                    "is_abstract": true,
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_extended": {
                    "name": "is_extended",
                    "documentation": "True if this ISO8601 string is in the 'extended' form, i.e. uses `'-'` and \/ or `':'` separators. This is the preferred format.",
                    "is_abstract": true,
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Iso8601_date": {
            "name": "Iso8601_date",
            "documentation": "Represents an ISO 8601 date, including partial and extended forms. Value may be:\n\n* `YYYY-MM-DD` (extended, preferred)\n* `YYYYMMDD` (compact)\n* a partial invariant.\n\nSee `Time_definitions._valid_iso8601_date()_` for validity.",
            "ancestors": [
                "Iso8601_type"
            ],
            "functions": {
                "year": {
                    "name": "year",
                    "documentation": "Extract the year part of the date as an Integer.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "month": {
                    "name": "month",
                    "documentation": "Extract the month part of the date as an Integer, or return 0 if not present.",
                    "pre_conditions": {
                        "Pre": "not month_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "day": {
                    "name": "day",
                    "documentation": "Extract the day part of the date as an Integer, or return 0 if not present.",
                    "pre_conditions": {
                        "Pre": "not day_unknown"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "timezone": {
                    "name": "timezone",
                    "documentation": "Timezone; may be Void.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_timezone"
                    }
                },
                "month_unknown": {
                    "name": "month_unknown",
                    "documentation": "Indicates whether month in year is unknown. If so, the date is of the form `\"YYYY\"`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "day_unknown": {
                    "name": "day_unknown",
                    "documentation": "Indicates whether day in month is unknown. If so, and month is known, the date is of the form `\"YYYY-MM\"` or `\"YYYYMM\"`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_partial": {
                    "name": "is_partial",
                    "documentation": "True if this date is partial, i.e. if days or more is missing.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_extended": {
                    "name": "is_extended",
                    "documentation": "True if this date uses `'-'` separators.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "as_string": {
                    "name": "as_string",
                    "documentation": "Return string value in extended format.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "add": {
                    "name": "add",
                    "aliases": [
                        "+"
                    ],
                    "documentation": "Arithmetic addition of a duration to a date.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date"
                    }
                },
                "subtract": {
                    "name": "subtract",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Arithmetic subtraction of a duration from a date.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date"
                    }
                },
                "diff": {
                    "name": "diff",
                    "aliases": [
                        "-"
                    ],
                    "documentation": "Difference of two dates.",
                    "parameters": {
                        "a_date": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_date",
                            "type": "Iso8601_date"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_duration"
                    }
                },
                "add_nominal": {
                    "name": "add_nominal",
                    "aliases": [
                        "++"
                    ],
                    "documentation": "Addition of nominal duration represented by `_a_diff_`. For example, a duration of `'P1Y'` means advance to the same date next year, with the exception of the date 29 February in a leap year, to which the addition of a nominal year will result in 28 February of the following year. Similarly, `'P1M'` is understood here as a nominal month, the addition of which will result in one of:\n\n* the same day in the following month, if it exists, or;\n* one or two days less where the following month is shorter, or;\n* in the case of adding a month to the date 31 Jan, the result will be 28 Feb in a non-leap year (i.e. three less) and 29 Feb in a leap year (i.e. two less).",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date"
                    }
                },
                "subtract_nominal": {
                    "name": "subtract_nominal",
                    "aliases": [
                        "--"
                    ],
                    "documentation": "Subtraction of nominal duration represented by `_a_diff_`. See `_add_nominal_()` for semantics.",
                    "parameters": {
                        "a_diff": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "a_diff",
                            "type": "Iso8601_duration"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date"
                    }
                }
            },
            "invariants": {
                "Year_valid": "valid_year (year)",
                "Month_valid": "not month_unknown implies valid_month (month)",
                "Day_valid": "not day_unknown implies valid_day (year, month, day)",
                "Partial_validity": "month_unknown implies day_unknown"
            }
        },
        "Temporal": {
            "name": "Temporal",
            "documentation": "Abstract ancestor of time-related classes.",
            "is_abstract": true,
            "ancestors": [
                "Ordered"
            ]
        },
        "Multiplicity_interval": {
            "name": "Multiplicity_interval",
            "documentation": "An Interval of Integer, used to represent multiplicity, cardinality and optionality in models. ",
            "ancestors": [
                "Proper_interval"
            ],
            "constants": {
                "Multiplicity_range_marker": {
                    "name": "Multiplicity_range_marker",
                    "documentation": "Marker to use in string form of interval between limits.",
                    "type": "String",
                    "value": "\"..\""
                },
                "Multiplicity_unbounded_marker": {
                    "name": "Multiplicity_unbounded_marker",
                    "documentation": "Symbol to use to indicate upper limit unbounded.",
                    "type": "Character",
                    "value": "'&#42;'"
                }
            },
            "functions": {
                "is_open": {
                    "name": "is_open",
                    "documentation": "True if this interval imposes no constraints, i.e. is set to `0..*`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_optional": {
                    "name": "is_optional",
                    "documentation": "True if this interval expresses optionality, i.e. `0..1`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_mandatory": {
                    "name": "is_mandatory",
                    "documentation": "True if this interval expresses mandation, i.e. `1..1`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_prohibited": {
                    "name": "is_prohibited",
                    "documentation": "True if this interval is set to `0..0`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Interval": {
            "name": "Interval",
            "documentation": "Interval abstraction, featuring upper and lower limits that may be open or closed, included or not included.",
            "is_abstract": true,
            "ancestors": [
                "Any"
            ],
            "generic_parameter_defs": {
                "T": {
                    "name": "T",
                    "conforms_to_type": "Ordered"
                }
            },
            "properties": {
                "lower": {
                    "_type": "P_BMM_SINGLE_PROPERTY_OPEN",
                    "name": "lower",
                    "documentation": "Lower bound.",
                    "type": "T"
                },
                "upper": {
                    "_type": "P_BMM_SINGLE_PROPERTY_OPEN",
                    "name": "upper",
                    "documentation": "Upper bound.",
                    "type": "T"
                },
                "lower_unbounded": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "lower_unbounded",
                    "documentation": "`lower` boundary open (i.e. = -infinity).",
                    "is_mandatory": true,
                    "type": "Boolean"
                },
                "upper_unbounded": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "upper_unbounded",
                    "documentation": "`upper` boundary open (i.e. = +infinity).",
                    "is_mandatory": true,
                    "type": "Boolean"
                },
                "lower_included": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "lower_included",
                    "documentation": "`lower` boundary value included in range if not `lower_unbounded`.",
                    "is_mandatory": true,
                    "type": "Boolean"
                },
                "upper_included": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "upper_included",
                    "documentation": "`upper` boundary value included in range if not `upper_unbounded`.",
                    "is_mandatory": true,
                    "type": "Boolean"
                }
            },
            "functions": {
                "has": {
                    "name": "has",
                    "documentation": "True if the value `e` is properly contained in this Interval.",
                    "is_abstract": true,
                    "parameters": {
                        "e": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER_OPEN",
                            "name": "e",
                            "type": "T"
                        }
                    },
                    "post_conditions": {
                        "Post_result": "Result = (lower_unbounded or lower_included and v >= lower) or v > lower and (upper_unbounded or upper_included and v <= upper or v < upper)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "intersects": {
                    "name": "intersects",
                    "documentation": "True if there is any overlap between intervals represented by Current and `_other_`. True if at least one limit of other is strictly inside the limits of this interval.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Interval"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "contains": {
                    "name": "contains",
                    "documentation": "True if current interval properly contains `_other_`? True if all points of `_other_` are inside the current interval.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Interval"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_equal": {
                    "name": "is_equal",
                    "documentation": "True if current object's interval is semantically same as `_other_`.",
                    "is_abstract": true,
                    "parameters": {
                        "other": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "other",
                            "type": "Any"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            },
            "invariants": {
                "Lower_included_valid": "lower_unbounded implies not lower_included",
                "Upper_included_valid": "upper_unbounded implies not upper_included",
                "Limits_consistent": "(not upper_unbounded and not lower_unbounded) implies lower <= upper",
                "Limits_comparable": "(not upper_unbounded and not lower_unbounded) implies lower.strictly_comparable_to (upper)"
            }
        },
        "Cardinality": {
            "name": "Cardinality",
            "documentation": "Express constraints on the cardinality of container objects which are the values of multiply-valued attributes, including uniqueness and ordering, providing the means to state that a container acts like a logical list, set or bag.",
            "properties": {
                "interval": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "interval",
                    "documentation": "The interval of this cardinality. ",
                    "is_mandatory": true,
                    "type": "Multiplicity_interval"
                },
                "is_ordered": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "is_ordered",
                    "documentation": "True if the members of the container attribute to which this cardinality refers are ordered. ",
                    "is_mandatory": true,
                    "type": "Boolean"
                },
                "is_unique": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "is_unique",
                    "documentation": "True if the members of the container attribute to which this cardinality refers are unique.",
                    "is_mandatory": true,
                    "type": "Boolean"
                }
            },
            "functions": {
                "is_bag": {
                    "name": "is_bag",
                    "documentation": "True if the semantics of this cardinality represent a bag, i.e. unordered, non-unique membership.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_list": {
                    "name": "is_list",
                    "documentation": "True if the semantics of this cardinality represent a list, i.e. ordered, non-unique membership.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_set": {
                    "name": "is_set",
                    "documentation": "True if the semantics of this cardinality represent a set, i.e. unordered, unique membership.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Terminology_code": {
            "name": "Terminology_code",
            "documentation": "Primitive type representing a standalone reference to a terminology concept, in the form of a terminology identifier, optional version, and a code or code string from the terminology.",
            "ancestors": [
                "Any"
            ],
            "properties": {
                "terminology_id": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "terminology_id",
                    "documentation": "The archetype environment namespace identifier used to identify a terminology. Typically a value like `\"snomed_ct\"` that is mapped elsewhere to the full URI identifying the terminology.",
                    "is_mandatory": true,
                    "type": "String"
                },
                "terminology_version": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "terminology_version",
                    "documentation": "Optional string value representing terminology version, typically a date or dotted numeric.",
                    "type": "String"
                },
                "code_string": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "code_string",
                    "documentation": "A terminology code or post-coordinated code expression, if supported by the terminology. The code may refer to a single term, a value set consisting of multiple terms, or some other entity representable within the terminology.",
                    "is_mandatory": true,
                    "type": "String"
                },
                "uri": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "uri",
                    "documentation": "The URI reference that may be used as a concrete key into a notional terminology service for queries that can obtain the term text, definition, and other associated elements.",
                    "type": "Uri"
                }
            }
        },
        "Terminology_term": {
            "name": "Terminology_term",
            "documentation": "Leaf type representing a standalone term from a terminology, which consists of the term text and the code, i.e. a concept reference.",
            "ancestors": [
                "Any"
            ],
            "properties": {
                "concept": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "concept",
                    "documentation": "Reference to the terminology concept formally representing this term.",
                    "is_mandatory": true,
                    "type": "Terminology_code"
                },
                "text": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "text",
                    "documentation": "Text of term.",
                    "is_mandatory": true,
                    "type": "String"
                }
            }
        }
    },
    "class_definitions": {
        "ARCHETYPE_ID": {
            "name": "ARCHETYPE_ID",
            "documentation": "Identifier for archetypes. Ideally these would identify globally unique archetypes.\n\nLexical form: `rm_originator  '-' rm_name  '-' rm_entity  '.' concept_name {  '-' specialisation }*  '.v' number`.",
            "ancestors": [
                "OBJECT_ID"
            ],
            "functions": {
                "qualified_rm_entity": {
                    "name": "qualified_rm_entity",
                    "documentation": "Globally qualified reference model entity, e.g.  `openehr-EHR-OBSERVATION`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "domain_concept": {
                    "name": "domain_concept",
                    "documentation": "Name of the concept represented by this archetype, including specialisation, e.g. `Biochemistry_result-cholesterol`. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "rm_originator": {
                    "name": "rm_originator",
                    "documentation": "Organisation originating the reference model on which this archetype is based, e.g. openehr,  cen,  hl7 . ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "rm_name": {
                    "name": "rm_name",
                    "documentation": "Name of the reference model, e.g. rim,  ehr_rm,  en13606 . ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "rm_entity": {
                    "name": "rm_entity",
                    "documentation": "Name of the ontological level within the reference model to which this archetype is targeted, e.g. for openEHR,  folder ,  composition ,  section ,  entry .",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "specialisation": {
                    "name": "specialisation",
                    "documentation": "Name of specialisation of concept, if this archetype is a specialisation of another archetype, e.g.  cholesterol .",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "version_id": {
                    "name": "version_id",
                    "documentation": "Version of this archetype. \n",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                }
            }
        },
        "GENERIC_ID": {
            "name": "GENERIC_ID",
            "documentation": "Generic identifier type for identifiers whose format is otherwise unknown to openEHR. Includes an attribute for naming the identification scheme (which may well be local). ",
            "ancestors": [
                "OBJECT_ID"
            ],
            "properties": {
                "scheme": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "scheme",
                    "documentation": "Name of the scheme to which this identifier conforms. Ideally this name will be recognisable globally but realistically it may be a local ad hoc scheme whose name is not controlled or standardised in any way. ",
                    "is_mandatory": true,
                    "type": "String"
                }
            }
        },
        "HIER_OBJECT_ID": {
            "name": "HIER_OBJECT_ID",
            "documentation": "Concrete type corresponding to hierarchical identifiers of the form defined by `UID_BASED_ID`. ",
            "ancestors": [
                "UID_BASED_ID"
            ]
        },
        "LOCATABLE_REF": {
            "name": "LOCATABLE_REF",
            "documentation": "Purpose Reference to a `LOCATABLE` instance inside the top-level content structure inside a `VERSION<T>`; the path attribute is applied to the object that `VERSION._data_` points to. ",
            "ancestors": [
                "OBJECT_REF"
            ],
            "properties": {
                "path": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "path",
                    "documentation": "The path to an instance in question, as an absolute path with respect to the object found at `VERSION._data_`. An empty path means that the object referred to by id being specified. ",
                    "type": "String"
                },
                "id": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "id",
                    "documentation": "Globally unique id of an object, regardless of where it is stored.",
                    "is_mandatory": true,
                    "type": "UID_BASED_ID"
                }
            },
            "functions": {
                "as_uri": {
                    "name": "as_uri",
                    "documentation": "A URI form of the reference, created by concatenating the following: \n\n* scheme, e.g. `ehr:`, derived from `_namespace_`\n* `_id.value_`\n* `\/` + `_path_`, where `_path_` is non-empty\n",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                }
            }
        },
        "OBJECT_ID": {
            "name": "OBJECT_ID",
            "documentation": "Ancestor class of identifiers of informational objects. Ids may be completely meaningless, in which case their only job is to refer to something, or may carry some information to do with the identified object. \n\nObject ids are used inside an object to identify that object. To identify another object in another service, use an `OBJECT_REF`, or else use a UID for local objects identified by UID. If none of the subtypes is suitable, direct instances of this class may be used. ",
            "is_abstract": true,
            "properties": {
                "value": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "value",
                    "documentation": "The value of the id in the form defined below. ",
                    "is_mandatory": true,
                    "type": "String"
                }
            }
        },
        "OBJECT_REF": {
            "name": "OBJECT_REF",
            "documentation": "Class describing a reference to another object, which may exist locally or be maintained outside the current namespace, e.g. in another service. Services are usually external, e.g. available in a LAN (including on the same host) or the internet via Corba, SOAP, or some other distributed protocol. However, in small systems they may be part of the same executable as the data containing the Id. ",
            "properties": {
                "namespace": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "namespace",
                    "documentation": "Namespace to which this identifier belongs in the local system context (and possibly in any other openEHR compliant environment) e.g.  terminology ,  demographic . These names are not yet standardised. Legal values for `_namespace_` are:\n\n* `\"local\"`\n* `\"unknown\"`\n* a string matching the standard regex `[a-zA-Z][a-zA-Z0-9_.:\\\/&?=+-]*`.\n\nNote that the first two are just special values of the regex, and will be matched by it.",
                    "is_mandatory": true,
                    "type": "String"
                },
                "type": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "type",
                    "documentation": "Name of the  class (concrete or abstract) of object to which this identifier type refers, e.g. `PARTY`, `PERSON`,  `GUIDELINE`  etc. These class names are from the relevant reference model. The type name `ANY` can be used to indicate that any type is accepted (e.g. if the type is unknown). ",
                    "is_mandatory": true,
                    "type": "String"
                },
                "id": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "id",
                    "documentation": "Globally unique id of an object, regardless of where it is stored.",
                    "is_mandatory": true,
                    "type": "OBJECT_ID"
                }
            }
        },
        "OBJECT_VERSION_ID": {
            "name": "OBJECT_VERSION_ID",
            "documentation": "Globally unique identifier for one version of a versioned object; lexical form: `object_id  '::' creating_system_id  '::' version_tree_id`.",
            "ancestors": [
                "UID_BASED_ID"
            ],
            "functions": {
                "object_id": {
                    "name": "object_id",
                    "documentation": "Unique identifier for logical object of which this identifier identifies one version; normally the `_object_id_` will be the unique identifier of the version container containing the version referred to by this `OBJECT_VERSION_ID` instance. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "UID"
                    }
                },
                "creating_system_id": {
                    "name": "creating_system_id",
                    "documentation": "Identifier of the system that created the Version corresponding to this Object version id.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "UID"
                    }
                },
                "version_tree_id": {
                    "name": "version_tree_id",
                    "documentation": "Tree identifier of this version with respect to other versions in the same version tree, as either 1 or 3 part dot-separated numbers, e.g.  1 ,  2.1.4 . ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "VERSION_TREE_ID"
                    }
                },
                "is_branch": {
                    "name": "is_branch",
                    "documentation": "True if this version identifier represents a branch.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "PARTY_REF": {
            "name": "PARTY_REF",
            "documentation": "Identifier for parties in a demographic or identity service. There are typically a number of subtypes of the `PARTY` class, including `PERSON`, `ORGANISATION`, etc. Abstract supertypes are allowed if the referenced object is of a type not known by the current implementation of this class (in other words, if the demographic model is changed by the addition of a new `PARTY` or `ACTOR` subtypes, valid `PARTY_REFs` can still be constructed to them). ",
            "ancestors": [
                "OBJECT_REF"
            ],
            "invariants": {
                "Type_validity": "type.is_equal(\u201cPERSON\u201d) or type.is_equal(\u201cORGANISATION\u201d) or type.is_equal(\u201cGROUP\u201d) or type.is_equal(\u201cAGENT\u201d)or type.is_equal(\u201cROLE\u201d) or type.is_equal(\u201cPARTY\u201d) or type.is_equal(\u201cACTOR\u201d)"
            }
        },
        "TERMINOLOGY_ID": {
            "name": "TERMINOLOGY_ID",
            "documentation": "Identifier for terminologies such as accessed via a terminology query service. In this class, the value attribute identifies the Terminology in the terminology service, e.g.  SNOMED-CT . A terminology is assumed to be in a particular language, which must be explicitly specified.\n\nThe value if the id attribute is the precise terminology id identifier, including actual release (i.e. actual  version), local modifications etc; e.g. ICPC2.\n\nLexical form: `name [  '(' version  ')' ]`.\n",
            "ancestors": [
                "OBJECT_ID"
            ],
            "functions": {
                "name": {
                    "name": "name",
                    "documentation": "Return the terminology id (which includes the  version  in some cases). Distinct names correspond to distinct (i.e. non-compatible) terminologies. Thus the names  ICD10AM  and  ICD10  refer to distinct terminologies. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "version_id": {
                    "name": "version_id",
                    "documentation": "Version of this terminology, if versioning supported, else the empty string. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                }
            }
        },
        "VERSION_TREE_ID": {
            "name": "VERSION_TREE_ID",
            "documentation": "Version tree identifier for one version. Lexical form: \n\n`trunk_version [  '.' branch_number  '.' branch_version ]`",
            "properties": {
                "value": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "value",
                    "documentation": "String form of this identifier.",
                    "is_mandatory": true,
                    "type": "String"
                }
            },
            "functions": {
                "trunk_version": {
                    "name": "trunk_version",
                    "documentation": "Trunk version number; numbering starts at 1. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "is_branch": {
                    "name": "is_branch",
                    "documentation": "True if this version identifier represents a branch, i.e. has branch_number and branch_version parts.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "branch_number": {
                    "name": "branch_number",
                    "documentation": "Number of branch from the trunk point; numbering starts at 1. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "branch_version": {
                    "name": "branch_version",
                    "documentation": "Version of the branch; numbering starts at 1. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                }
            },
            "invariants": {
                "Value_valid": "not value.is_empty",
                "Trunk_version_valid": "trunk_version \/= Void and then trunk_version.is_integer and then trunk_version.as_integer >= 1",
                "Branch_number_valid": "branch_number \/= Void implies branch_number.is_integer and then branch_number.as_integer >= 1",
                "Branch_version_valid": "branch_version \/= Void implies branch_version.is_integer and then branch_version.as_integer >= 1",
                "Branch_validity": "(branch_number = Void and branch_version = Void ) xor (branch_number \/= Void and branch_version \/= Void )",
                "Is_branch_validity": "is_branch xor branch_number = Void",
                "Is_first_validity": "not is_first xor trunk_version.is_equal(\u201c1\u201d)"
            }
        },
        "UID_BASED_ID": {
            "name": "UID_BASED_ID",
            "documentation": "Abstract model of UID-based identifiers consisting of a root part and an optional extension; lexical form: `root '::' extension`.",
            "is_abstract": true,
            "ancestors": [
                "OBJECT_ID"
            ],
            "functions": {
                "root": {
                    "name": "root",
                    "documentation": "The identifier of the conceptual namespace in which the object exists, within the identification scheme. Returns the part to the left of the first '::' separator, if any, or else the whole string. ",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "UID"
                    }
                },
                "extension": {
                    "name": "extension",
                    "documentation": "Optional local identifier of the object within the context of the root identifier. Returns the part to the right of the first '::' separator if any, or else any empty String.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                },
                "has_extension": {
                    "name": "has_extension",
                    "documentation": "True if not `_extension_.is_empty()`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            },
            "invariants": {
                "Has_extension_valid": "extension.is_empty xor has_extension"
            }
        },
        "UUID": {
            "name": "UUID",
            "documentation": "Model of the DCE Universal Unique Identifier or UUID which takes the form of hexadecimal integers separated by hyphens, following the pattern 8-4-4-4-12 as defined by the Open Group, CDE 1.1 Remote Procedure Call specification, Appendix A. Also known as a GUID.",
            "ancestors": [
                "UID"
            ]
        },
        "INTERNET_ID": {
            "name": "INTERNET_ID",
            "documentation": "Model of a reverse internet domain, as used to uniquely identify an internet domain. In the form of a dot-separated string in the reverse order of a domain name, specified by https:\/\/www.rfc-editor.org\/info\/rfc1034[IETF RFC 1034^]. ",
            "ancestors": [
                "UID"
            ]
        },
        "UID": {
            "name": "UID",
            "documentation": "Abstract parent of classes representing unique identifiers which identify information entities in a durable way. UIDs only ever identify one IE in time or space and are never re-used.",
            "is_abstract": true,
            "properties": {
                "value": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "value",
                    "documentation": "The value of the id.",
                    "is_mandatory": true,
                    "type": "String"
                }
            },
            "invariants": {
                "Value_valid": "not value.empty"
            }
        },
        "ISO_OID": {
            "name": "ISO_OID",
            "documentation": "Model of ISO's Object Identifier (oid) as defined by the standard ISO\/IEC 8824. Oids are formed from integers separated by dots. Each non-leaf node in an Oid starting from the left corresponds to an assigning authority, and identifies that authority's namespace, inside which the remaining part of the identifier is locally unique. ",
            "ancestors": [
                "UID"
            ]
        },
        "TEMPLATE_ID": {
            "name": "TEMPLATE_ID",
            "documentation": "Identifier for templates. Lexical form to be determined.",
            "ancestors": [
                "OBJECT_ID"
            ]
        },
        "ACCESS_GROUP_REF": {
            "name": "ACCESS_GROUP_REF",
            "documentation": "Reference to access group in an access control service.",
            "ancestors": [
                "OBJECT_REF"
            ],
            "invariants": {
                "Type_validity": "type.is_equal (\u201cACCESS_GROUP\u201d)"
            }
        },
        "OPENEHR_DEFINITIONS": {
            "name": "OPENEHR_DEFINITIONS",
            "documentation": "Inheritance class to provide access to constants defined in other packages.",
            "ancestors": [
                "BASIC_DEFINITIONS"
            ],
            "constants": {
                "Local_terminology_id": {
                    "name": "Local_terminology_id",
                    "documentation": "Predefined terminology identifier to indicate it is local to the knowledge resource in which it occurs, e.g. an archetype",
                    "type": "String",
                    "value": "\"local\""
                }
            }
        },
        "BASIC_DEFINITIONS": {
            "name": "BASIC_DEFINITIONS",
            "documentation": "Defines globally used constant values.",
            "constants": {
                "CR": {
                    "name": "CR",
                    "documentation": "Carriage return character.",
                    "type": "Character",
                    "value": "'\\015'"
                },
                "LF": {
                    "name": "LF",
                    "documentation": "Line feed character.",
                    "type": "Character",
                    "value": "'\\012'"
                },
                "Any_type_name": {
                    "name": "Any_type_name",
                    "type": "String",
                    "value": "\"Any\""
                },
                "Regex_any_pattern": {
                    "name": "Regex_any_pattern",
                    "type": "String",
                    "value": "\".&#42;\""
                },
                "Default_encoding": {
                    "name": "Default_encoding",
                    "type": "String",
                    "value": "\"UTF-8\""
                },
                "None_type_name": {
                    "name": "None_type_name",
                    "type": "String",
                    "value": "\"None\""
                }
            }
        },
        "VALIDITY_KIND": {
            "_type": "P_BMM_ENUMERATION_STRING",
            "name": "VALIDITY_KIND",
            "documentation": "An enumeration of three values that may commonly occur in constraint models.\n\nUse as the type of any attribute within this model, which expresses constraint on some attribute in a class in a reference model. For example to indicate validity\nof Date\/Time fields.",
            "ancestors": [
                "String"
            ],
            "item_names": [
                "mandatory",
                "optional",
                "prohibited"
            ],
            "item_documentations": [
                "Constant to indicate mandatory presence of something.",
                "Constant to indicate optional presence of something.",
                "Constant to indicate disallowed presence of something."
            ]
        },
        "VERSION_STATUS": {
            "_type": "P_BMM_ENUMERATION_STRING",
            "name": "VERSION_STATUS",
            "documentation": "Status of a versioned artefact, as one of a number of possible values: uncontrolled, prerelease, release, build.",
            "ancestors": [
                "String"
            ],
            "item_names": [
                "alpha",
                "beta",
                "release_candidate",
                "released",
                "build"
            ],
            "item_documentations": [
                "Value representing a version which is 'unstable', i.e. contains an unknown size of change with respect to its base version. Rendered with the build number as a string in the form `N.M.P-alpha.B` e.g. `2.0.1-alpha.154`.",
                "Value representing a version which is 'beta', i.e. contains an unknown but reducing size of change with respect to its base version. Rendered with the build number as a string in the form `N.M.P-beta.B` e.g. `2.0.1-beta.154`.",
                "Value representing a version which is 'release candidate', i.e. contains only patch-level changes on the base version. Rendered as a string as `N.M.P-rc.B` e.g. `2.0.1-rc.27`.",
                "Value representing a version which is 'released', i.e. is the definitive base version. `N.M.P` e.g. `2.0.1`.",
                "Value representing a version which is a build of the current base release. Rendered with the build number as a string in the form `N.M.P+B` e.g. `2.0.1+33`."
            ]
        },
        "Env": {
            "_type": "P_BMM_INTERFACE",
            "name": "Env",
            "documentation": "Class representing the real-world environment, providing basic information like current time, date, etc.",
            "functions": {
                "current_date": {
                    "name": "current_date",
                    "documentation": "Return today's date in the current locale.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date"
                    }
                },
                "current_time": {
                    "name": "current_time",
                    "documentation": "Return current time in the current locale.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_time"
                    }
                },
                "current_date_time": {
                    "name": "current_date_time",
                    "documentation": "Return current date\/time in the current locale.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_date_time"
                    }
                },
                "current_time_zone": {
                    "name": "current_time_zone",
                    "documentation": "Return the timezone of the current locale.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Iso8601_timezone"
                    }
                }
            }
        },
        "Statistical_evaluator": {
            "_type": "P_BMM_INTERFACE",
            "name": "Statistical_evaluator",
            "documentation": "A basic statistical evaluator class providing common functions on collections of numbers.",
            "functions": {
                "sum": {
                    "name": "sum",
                    "documentation": "Sum of a container of values.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "avg": {
                    "name": "avg",
                    "documentation": "Synonym for `_mean()_`.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "mean": {
                    "name": "mean",
                    "documentation": "Mean (arithmetic average) of a container of values.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "median": {
                    "name": "median",
                    "documentation": "Return numerically centre value in ordered form of container contents.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "mode": {
                    "name": "mode",
                    "documentation": "Mode (most frequent) of a container of values.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "max": {
                    "name": "max",
                    "documentation": "Maximum of a container of values.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "min": {
                    "name": "min",
                    "documentation": "Minimum of a container of values.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "count": {
                    "name": "count",
                    "documentation": "Return the number of items in `_vals_`, i.e. `_vals.count_`.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Numeric"
                    }
                },
                "std_dev": {
                    "name": "std_dev",
                    "documentation": "Compute standard deviation of a container of values.",
                    "parameters": {
                        "vals": {
                            "_type": "P_BMM_GENERIC_FUNCTION_PARAMETER",
                            "name": "vals",
                            "type_def": {
                                "root_type": "Container",
                                "generic_parameters": [
                                    "Numeric"
                                ]
                            }
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                }
            }
        },
        "Locale": {
            "_type": "P_BMM_INTERFACE",
            "name": "Locale",
            "documentation": "Class representing current Locale.",
            "functions": {
                "primary_language": {
                    "name": "primary_language",
                    "documentation": "Primary language of the current locale.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Terminology_code"
                    }
                }
            }
        },
        "Math": {
            "_type": "P_BMM_INTERFACE",
            "name": "Math",
            "documentation": "Mathematical computation.",
            "functions": {
                "ln": {
                    "name": "ln",
                    "documentation": "Compute natural log of v.",
                    "parameters": {
                        "v": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "v",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "log": {
                    "name": "log",
                    "documentation": "Compute base 10 log of v.",
                    "parameters": {
                        "v": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "v",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                },
                "sin": {
                    "name": "sin",
                    "documentation": "Compute sin(v).",
                    "parameters": {
                        "(v": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "(v",
                            "type": "Numeric"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Double"
                    }
                }
            }
        },
        "Quantity_converter": {
            "_type": "P_BMM_INTERFACE",
            "name": "Quantity_converter",
            "documentation": "Quantity conversion.",
            "functions": {
                "convert_value": {
                    "name": "convert_value",
                    "documentation": "Convert `_value_` of physical property type (e.g. 'pressure' etc) from one units to another.",
                    "parameters": {
                        "value": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "value",
                            "type": "Real"
                        },
                        "from_units": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "from_units",
                            "type": "String"
                        },
                        "to_units": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "to_units",
                            "type": "String"
                        },
                        "property": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "property",
                            "type": "Terminology_code"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Real"
                    }
                }
            }
        },
        "Comparable": {
            "name": "Comparable",
            "is_abstract": true
        },
        "TUPLE": {
            "name": "TUPLE",
            "documentation": "Parent type of all TUPLE types."
        },
        "FUNCTION": {
            "name": "FUNCTION",
            "documentation": "Type representing a function with a return type and 0 or more arguments represented as a TUPLE.",
            "ancestors": [
                "ROUTINE"
            ],
            "generic_parameter_defs": {
                "ARGS": {
                    "name": "ARGS",
                    "conforms_to_type": "TUPLE"
                },
                "RESULT": {
                    "name": "RESULT",
                    "conforms_to_type": "Any"
                }
            }
        },
        "TUPLE1": {
            "name": "TUPLE1",
            "documentation": "A Tuple type used, among other things, for representing a single typed argument within a Routine signature.",
            "ancestors": [
                "TUPLE"
            ],
            "generic_parameter_defs": {
                "A": {
                    "name": "A",
                    "conforms_to_type": "Any"
                }
            }
        },
        "TUPLE2": {
            "name": "TUPLE2",
            "documentation": "A Tuple type used, among other things, for representing two typed arguments within a Routine signature.",
            "ancestors": [
                "TUPLE"
            ],
            "generic_parameter_defs": {
                "A": {
                    "name": "A",
                    "conforms_to_type": "Any"
                },
                "B": {
                    "name": "B",
                    "conforms_to_type": "Any"
                }
            }
        },
        "ROUTINE": {
            "name": "ROUTINE",
            "documentation": "Type representing a function with a return type and 0 or more arguments represented as a TUPLE.",
            "generic_parameter_defs": {
                "ARGS": {
                    "name": "ARGS",
                    "conforms_to_type": "TUPLE"
                }
            }
        },
        "PROCEDURE": {
            "name": "PROCEDURE",
            "documentation": "Type representing a procedure with 0 or more arguments represented as a TUPLE.",
            "ancestors": [
                "ROUTINE"
            ],
            "generic_parameter_defs": {
                "ARGS": {
                    "name": "ARGS",
                    "conforms_to_type": "TUPLE"
                }
            }
        },
        "Iso8601_timezone": {
            "name": "Iso8601_timezone",
            "documentation": "ISO8601 timezone string, in format:\n\n* `Z | \u00b1hh[mm]`\n\nwhere:\n\n* `hh` is \"00\" - \"23\" (0-filled to two digits)\n* `mm` is \"00\" - \"59\" (0-filled to two digits)\n* `Z` is a literal meaning UTC (modern replacement for GMT), i.e. timezone `+0000`\n",
            "ancestors": [
                "Iso8601_type"
            ],
            "functions": {
                "hour": {
                    "name": "hour",
                    "documentation": "Extract the hour part of timezone, as an Integer in the range `00 - 14`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "minute": {
                    "name": "minute",
                    "documentation": "Extract the hour part of timezone, as an Integer, usually either 0 or 30.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "sign": {
                    "name": "sign",
                    "documentation": "Direction of timezone expresssed as +1 or -1.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Integer"
                    }
                },
                "minute_unknown": {
                    "name": "minute_unknown",
                    "documentation": "Indicates whether minute part known.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_partial": {
                    "name": "is_partial",
                    "documentation": "True if this time zone is partial, i.e. if minutes is missing.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_extended": {
                    "name": "is_extended",
                    "documentation": "True if this time-zone uses \u2018:\u2019 separators.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "is_gmt": {
                    "name": "is_gmt",
                    "documentation": "True if timezone is UTC, i.e. `+0000`.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "as_string": {
                    "name": "as_string",
                    "documentation": "Return timezone string in extended format.",
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "String"
                    }
                }
            },
            "invariants": {
                "Min_hour_valid": "sign = -1 implies hour > 0 and hour <= Min_timezone_hour",
                "Max_hour_valid": "sign = 1 implies hour > 0 and hour <= Max_timezone_hour",
                "Minute_valid": "not minute_unknown implies valid_minute (minute)",
                "Sign_valid": "sign = 1 or sign = -1"
            }
        },
        "Time_Definitions": {
            "name": "Time_Definitions",
            "documentation": "Definitions for date\/time classes. Note that the timezone limits are set by where the international dateline is. Thus, time in New Zealand is quoted using `+12:00`, not `-12:00`.",
            "constants": {
                "Seconds_in_minute": {
                    "name": "Seconds_in_minute",
                    "documentation": "Number of seconds in a minute.",
                    "type": "Integer",
                    "value": 60
                },
                "Minutes_in_hour": {
                    "name": "Minutes_in_hour",
                    "documentation": "Number of minutes in an hour.",
                    "type": "Integer",
                    "value": 60
                },
                "Hours_in_day": {
                    "name": "Hours_in_day",
                    "documentation": "Number of clock hours in a day, i.e. 24.",
                    "type": "Integer",
                    "value": 24
                },
                "Average_days_in_month": {
                    "name": "Average_days_in_month",
                    "documentation": "Used for conversions of durations containing months to days and \/ or seconds.",
                    "type": "Real",
                    "value": 30.42
                },
                "Max_days_in_month": {
                    "name": "Max_days_in_month",
                    "documentation": "Maximum number of days in any month.",
                    "type": "Integer",
                    "value": 31
                },
                "Days_in_year": {
                    "name": "Days_in_year",
                    "documentation": "Calendar days in a normal year, i.e. 365.",
                    "type": "Integer",
                    "value": 365
                },
                "Average_days_in_year": {
                    "name": "Average_days_in_year",
                    "documentation": "Used for conversions of durations containing years to days and \/ or seconds.",
                    "type": "Real",
                    "value": 365.24
                },
                "Days_in_leap_year": {
                    "name": "Days_in_leap_year",
                    "documentation": "Calendar days in a standard leap year, i.e. 366.",
                    "type": "Integer",
                    "value": 366
                },
                "Max_days_in_year": {
                    "name": "Max_days_in_year",
                    "documentation": "Maximum number of days in a year, i.e. accounting for leap years.",
                    "type": "Integer",
                    "value": "Days_in_leap_year"
                },
                "Days_in_week": {
                    "name": "Days_in_week",
                    "documentation": "Number of days in a week.",
                    "type": "Integer",
                    "value": 7
                },
                "Months_in_year": {
                    "name": "Months_in_year",
                    "documentation": "Number of months in a year.",
                    "type": "Integer",
                    "value": 12
                },
                "Min_timezone_hour": {
                    "name": "Min_timezone_hour",
                    "documentation": "Minimum hour value of a timezone  according to ISO 8601 (note that the -ve sign is supplied in the `ISO8601_TIMEZONE` class).",
                    "type": "Integer",
                    "value": 12
                },
                "Max_timezone_hour": {
                    "name": "Max_timezone_hour",
                    "documentation": "Maximum hour value of a timezone according to ISO 8601.",
                    "type": "Integer",
                    "value": 14
                },
                "Nominal_days_in_month": {
                    "name": "Nominal_days_in_month",
                    "documentation": "Used for conversions of durations containing months to days and \/ or seconds.",
                    "type": "Real",
                    "value": 30.42
                },
                "Nominal_days_in_year": {
                    "name": "Nominal_days_in_year",
                    "documentation": "Used for conversions of durations containing years to days and \/ or seconds.",
                    "type": "Real",
                    "value": 365.24
                }
            },
            "functions": {
                "valid_year": {
                    "name": "valid_year",
                    "documentation": "True if `y >= 0`.",
                    "parameters": {
                        "y": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "y",
                            "type": "Integer"
                        }
                    },
                    "post_conditions": {
                        "Post": "Result = y >= 0"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_month": {
                    "name": "valid_month",
                    "documentation": "True if `m >= 1 and m <= months_in_year`.",
                    "parameters": {
                        "m": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "m",
                            "type": "Integer"
                        }
                    },
                    "post_conditions": {
                        "Post": "Result = m >= 1 and m <= Months_in_year"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_day": {
                    "name": "valid_day",
                    "documentation": "True if `d >= 1 and d <= days_in_month (m, y)`.",
                    "parameters": {
                        "y": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "y",
                            "type": "Integer"
                        },
                        "m": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "m",
                            "type": "Integer"
                        },
                        "d": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "d",
                            "type": "Integer"
                        }
                    },
                    "post_conditions": {
                        "Post": "Result = d >= 1 and d <= days_in_month (m, y)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_hour": {
                    "name": "valid_hour",
                    "documentation": "True if `(h >= 0 and h < Hours_in_day) or (h = Hours_in_day and m = 0 and s = 0)` .",
                    "parameters": {
                        "h": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "h",
                            "type": "Integer"
                        },
                        "m": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "m",
                            "type": "Integer"
                        },
                        "s": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "s",
                            "type": "Integer"
                        }
                    },
                    "post_conditions": {
                        "Post": "Result = (h >= 0 and h < Hours_in_day) or (h = Hours_in_day and m = 0 and s = 0)"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_minute": {
                    "name": "valid_minute",
                    "documentation": "True if `m >= 0 and m < Minutes_in_hour`.",
                    "parameters": {
                        "m": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "m",
                            "type": "Integer"
                        }
                    },
                    "post_conditions": {
                        "Post": "Result = m >= 0 and m < Minutes_in_hour"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_second": {
                    "name": "valid_second",
                    "documentation": "True if `s >= 0 and s < Seconds_in_minute` .",
                    "parameters": {
                        "s": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "s",
                            "type": "Integer"
                        }
                    },
                    "post_conditions": {
                        "Post": "Result = s >= 0 and s < Seconds_in_minute"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_fractional_second": {
                    "name": "valid_fractional_second",
                    "documentation": "True if `fs >= 0.0` and `fs < 1.0` .",
                    "parameters": {
                        "fs": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "fs",
                            "type": "Double"
                        }
                    },
                    "post_conditions": {
                        "Post": "Result = fs >= 0.0 and fs < 1.0"
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_iso8601_date": {
                    "name": "valid_iso8601_date",
                    "documentation": "String is a valid ISO 8601 date, i.e. takes the complete form:\n\n* `YYYY-MM-DD` (extended, preferred) or one of the partial forms `YYYY-MM` or `YYYY`\n* `YYYYMMDD` (compact) or a partial variant `YYYYMM`.\n\nWhere:\n\n* `YYYY` is the string form of any positive number in the range `0000` - `9999` (zero-filled to four digits)\n* `MM` is `01` - `12` (zero-filled to two digits)\n* `DD` is `01` - `31` (zero-filled to two digits)\n\nThe combinations of `YYYY`, `MM`, `DD` numbers must be correct with respect to the Gregorian calendar.",
                    "parameters": {
                        "s": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "s",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_iso8601_time": {
                    "name": "valid_iso8601_time",
                    "documentation": "String is a valid ISO 8601 date, i.e. takes the form:\n\n* `hh:mm:ss[(,|.)s+][Z|\u00b1hh[:mm]]` (extended)\n* `hhmmss[(,|.)s+][Z|\u00b1hh[mm]]` (compact)\n* or one of the partial forms:\n** `hh:mm` (extended)\n** `hhmm` or `hh` (compact)\n\nwith an additional optional timezone indicator of:\n\n* `Z` or `\u00b1hh[:mm]` (extended)  `\u00b1hh[mm]` (compact)\n\nWhere:\n\n* `hh` is \"00\" - \"23\" (0-filled to two digits)\n* `mm` is \"00\" - \"59\" (0-filled to two digits)\n* `ss` is \"00\" - \"60\" (0-filled to two digits)\n* `[(,|.)s+]` is an optional string consisting of a comma or decimal point followed by numeric string of 1 or more digits, representing a fractional second\n* `Z` is a literal meaning UTC (modern replacement for GMT), i.e. timezone `+0000`\n",
                    "parameters": {
                        "s": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "s",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_iso8601_date_time": {
                    "name": "valid_iso8601_date_time",
                    "documentation": "String is a valid ISO 8601 date-time, i.e. takes the form:\n\n* `YYYY-MM-DDThh:mm:ss[(,|.)s+][Z|\u00b1hh[:mm]]` (extended)\n* `YYYYMMDDThhmmss[(,|.)s+][Z|\u00b1hh[mm]]` (compact)\n* or one of the partial forms:\n** `YYYY-MM-DDThh:mm` or `YYYY-MM-DDThh` (extended)\n** `YYYYMMDDThhmm` or `YYYYMMDDThh` (compact)",
                    "parameters": {
                        "s": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "s",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                },
                "valid_iso8601_duration": {
                    "name": "valid_iso8601_duration",
                    "documentation": "String is a valid ISO 8601 duration, i.e. takes the form:\n\n* `P[nnY][nnM][nnW][nnD][T[nnH][nnM][nnS]]`\n\nWhere each nn represents a number of years, months, etc. `nnW` represents a number of 7-day weeks.\n\nNote: allowing the `W` designator in the same expression as other designators is an exception to the published standard, but necessary in clinical information (typically for representing pregnancy duration).",
                    "parameters": {
                        "s": {
                            "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                            "name": "s",
                            "documentation": "String is a valid ISO 8601 duration, i.e. takes the form:\n\n* `P[nnY][nnM][nnW][nnD][T[nnH][nnM][nnS]]`\n\nWhere each `nn` represents a number of years, months, etc. `nnW` represents a number of 7- day weeks.\n\nNOTE: allowing the `W` designator in the same expression as other designators is an exception to the published standard, but necessary in clinical information (typically for representing pregnancy duration).",
                            "type": "String"
                        }
                    },
                    "result": {
                        "_type": "P_BMM_SIMPLE_TYPE",
                        "type": "Boolean"
                    }
                }
            }
        },
        "Proper_interval": {
            "name": "Proper_interval",
            "documentation": "Type representing a 'proper' Interval, i.e. any two-sided or one-sided interval.",
            "ancestors": [
                "Interval"
            ],
            "generic_parameter_defs": {
                "T": {
                    "name": "T",
                    "conforms_to_type": "Ordered"
                }
            },
            "invariants": {
                "Inv_not_point": "lower \/= upper"
            }
        },
        "Point_interval": {
            "name": "Point_interval",
            "documentation": "Type representing an Interval that happens to be a point value. Provides an efficient representation that is substitutable for `Interval<T>` where needed.",
            "ancestors": [
                "Interval"
            ],
            "generic_parameter_defs": {
                "T": {
                    "name": "T",
                    "conforms_to_type": "Ordered"
                }
            },
            "properties": {
                "lower_unbounded": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "lower_unbounded",
                    "documentation": "Lower boundary open (i.e. = -infinity).",
                    "is_mandatory": true,
                    "type": "Boolean",
                    "default": false
                },
                "upper_unbounded": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "upper_unbounded",
                    "documentation": "Upper boundary open (i.e. = +infinity).",
                    "is_mandatory": true,
                    "type": "Boolean",
                    "default": false
                },
                "lower_included": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "lower_included",
                    "documentation": "Lower boundary value included in range if not `_lower_unbounded_`.",
                    "is_mandatory": true,
                    "type": "Boolean",
                    "default": true
                },
                "upper_included": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "upper_included",
                    "documentation": "Upper boundary value included in range if not `_upper_unbounded_`.",
                    "is_mandatory": true,
                    "type": "Boolean",
                    "default": true
                }
            },
            "invariants": {
                "Inv_point": "lower = upper"
            }
        },
        "AUTHORED_RESOURCE": {
            "name": "AUTHORED_RESOURCE",
            "documentation": "Abstract idea of an online resource created by a human author. \n",
            "is_abstract": true,
            "properties": {
                "uid": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "uid",
                    "documentation": "Unique identifier of the family of archetypes having the same interface identifier (same major version).",
                    "type": "UUID"
                },
                "original_language": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "original_language",
                    "documentation": "Language in which this resource was initially authored. Although there is no language primacy of resources overall, the language of original authoring is required to ensure natural language translations can preserve quality. Language is relevant in both the description and ontology sections. ",
                    "is_mandatory": true,
                    "type": "Terminology_code"
                },
                "description": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "description",
                    "documentation": "Description and lifecycle information of the resource.",
                    "type": "RESOURCE_DESCRIPTION"
                },
                "is_controlled": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "is_controlled",
                    "documentation": "True if this resource is under any kind of change control (even file copying), in which case revision history is created. ",
                    "type": "Boolean"
                },
                "annotations": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "annotations",
                    "documentation": "Annotations on individual items within the resource, keyed by path. The inner table takes the form of a Hash table of String values keyed by String tags.",
                    "type": "RESOURCE_ANNOTATIONS"
                },
                "translations": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "translations",
                    "documentation": "List of details for each natural translation made of this resource, keyed by language code. For each translation listed here, there must be corresponding sections in all language-dependent parts of the resource. The `_original_language_` does not appear in this list.",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "TRANSLATION_DETAILS"
                        ]
                    }
                }
            },
            "functions": {
                "languages_available": {
                    "name": "languages_available",
                    "documentation": "Total list of languages available in this resource, derived from original_language and translations. ",
                    "result": {
                        "_type": "P_BMM_CONTAINER_TYPE",
                        "container_type": "List",
                        "type": "String"
                    }
                }
            },
            "invariants": {
                "Original_language_valid": "code_set (Code_set_id_languages).has_code (original_language.as_string)",
                "Translations_valid": "translations \/= Void implies (not translations.is_empty and not translations.has (orginal_language.code_string))",
                "Description_valid": "translations \/= Void implies (description.details.for_all (d &#124;\ntranslations.has_key (d.language.code_string)))",
                "Languages_available_valid": "languages_available.has (original_language)"
            }
        },
        "RESOURCE_DESCRIPTION": {
            "name": "RESOURCE_DESCRIPTION",
            "documentation": "Defines the descriptive meta-data of a resource.",
            "properties": {
                "original_author": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "original_author",
                    "documentation": "Original author of this resource, with all relevant details, including organisation.",
                    "is_mandatory": true,
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "original_namespace": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "original_namespace",
                    "documentation": "Namespace of original author's organisation, in reverse internet form, if applicable.",
                    "type": "String"
                },
                "original_publisher": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "original_publisher",
                    "documentation": "Plain text name of organisation that originally published this artefact, if any.",
                    "type": "String"
                },
                "other_contributors": {
                    "_type": "P_BMM_CONTAINER_PROPERTY",
                    "name": "other_contributors",
                    "documentation": "Other contributors to the resource, each listed in \"name <email>\"  form. ",
                    "type_def": {
                        "container_type": "List",
                        "type": "String"
                    },
                    "cardinality": {
                        "lower": 0,
                        "upper_unbounded": true
                    }
                },
                "lifecycle_state": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "lifecycle_state",
                    "documentation": "Lifecycle state of the resource, typically including states such as: initial, in_development, in_review, published, superseded, obsolete. ",
                    "is_mandatory": true,
                    "type": "Terminology_code"
                },
                "parent_resource": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "parent_resource",
                    "documentation": "Reference to owning resource. ",
                    "is_mandatory": true,
                    "type": "AUTHORED_RESOURCE",
                    "default": ""
                },
                "custodian_namespace": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "custodian_namespace",
                    "documentation": "Namespace in reverse internet id form, of current custodian organisation.",
                    "type": "String"
                },
                "custodian_organisation": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "custodian_organisation",
                    "documentation": "Plain text name of current custodian organisation.",
                    "type": "String"
                },
                "copyright": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "copyright",
                    "documentation": "Optional copyright statement for the resource as a knowledge resource. \n",
                    "type": "String"
                },
                "licence": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "licence",
                    "documentation": "Licence of current artefact, in format \"short licence name <URL of licence>\", e.g. \"Apache 2.0 License <http:\/\/www.apache.org\/licenses\/LICENSE-2.0.html>\"",
                    "type": "String"
                },
                "ip_acknowledgements": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "ip_acknowledgements",
                    "documentation": "List of acknowledgements of other IP directly referenced in this archetype, typically terminology codes, ontology ids etc. Recommended keys are the widely known name or namespace for the IP source, as shown in the following example:\n\n----\nip_acknowledgements = <\n    [\"loinc\"] = <\"This content from LOINC\u00ae is copyright \u00a9 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at http:\/\/loinc.org\/terms-of-use\">\n    [\"snomedct\"] = <\"Content from SNOMED CT\u00ae is copyright \u00a9 2007 IHTSDO <ihtsdo.org>\">\n>\n----",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "references": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "references",
                    "documentation": "List of references of material on which this artefact is based, as a keyed list of strings. The keys should be in a standard citation format.",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "resource_package_uri": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "resource_package_uri",
                    "documentation": "URI of package to which this resource belongs.",
                    "type": "String"
                },
                "conversion_details": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "conversion_details",
                    "documentation": "Details related to conversion process that generated this model from an original, if relevant, as a list of name\/value pairs. Typical example with recommended tags:\n\n----\nconversion_details = <\n    [\"source_model\"] = <\"CEM model xyz <http:\/\/location.in.clinicalelementmodels.com>\">\n    [\"tool\"] = <\"cem2adl v6.3.0\">\n    [\"time\"] = <\"2014-11-03T09:05:00\">\n>\n----",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "other_details": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "other_details",
                    "documentation": "Additional non-language-sensitive resource meta-data, as a list of name\/value pairs.",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "details": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "details",
                    "documentation": "Details of all parts of resource description that are natural language-dependent, keyed by language code.",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "RESOURCE_DESCRIPTION_ITEM"
                        ]
                    }
                }
            }
        },
        "TRANSLATION_DETAILS": {
            "name": "TRANSLATION_DETAILS",
            "documentation": "Class providing details of a natural language translation.",
            "properties": {
                "language": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "language",
                    "documentation": "Language of the translation, coded using ISO 639-1 (2 character) language codes.",
                    "is_mandatory": true,
                    "type": "Terminology_code"
                },
                "author": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "author",
                    "documentation": "Primary translator name and other demographic details.",
                    "is_mandatory": true,
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "accreditation": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "accreditation",
                    "documentation": "Accreditation of primary translator or group, usually a national translator's registration or association membership id.",
                    "type": "String"
                },
                "other_details": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "other_details",
                    "documentation": "Any other meta-data.",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "version_last_translated": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "version_last_translated",
                    "documentation": "Version of this resource last time it was translated into the language represented by this `TRANSLATION_DETAILS` object.",
                    "type": "String"
                },
                "other_contributors": {
                    "_type": "P_BMM_CONTAINER_PROPERTY",
                    "name": "other_contributors",
                    "documentation": "Additional contributors to this translation, each listed in the preferred format of the relevant organisation for the artefacts in question. A typical default is `\"name <email>\"` if nothing else is specified. ",
                    "type_def": {
                        "container_type": "List",
                        "type": "String"
                    },
                    "cardinality": {
                        "lower": 0,
                        "upper_unbounded": true
                    }
                }
            }
        },
        "RESOURCE_DESCRIPTION_ITEM": {
            "name": "RESOURCE_DESCRIPTION_ITEM",
            "documentation": "Language-specific detail of resource description. When a resource is translated for use in another language environment, each `RESOURCE_DESCRIPTION_ITEM` needs to be copied and translated into the new language.",
            "properties": {
                "language": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "language",
                    "documentation": "The localised language in which the items in this description item are written. Coded using ISO 639-1 (2 character) language codes.",
                    "is_mandatory": true,
                    "type": "Terminology_code"
                },
                "purpose": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "purpose",
                    "documentation": "Purpose of the resource.",
                    "is_mandatory": true,
                    "type": "String"
                },
                "keywords": {
                    "_type": "P_BMM_CONTAINER_PROPERTY",
                    "name": "keywords",
                    "documentation": "Keywords which characterise this resource, used e.g. for indexing and searching. \n",
                    "type_def": {
                        "container_type": "List",
                        "type": "String"
                    },
                    "cardinality": {
                        "lower": 0,
                        "upper_unbounded": true
                    }
                },
                "use": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "use",
                    "documentation": "Description of the uses of the resource, i.e. contexts in which it could be used. \n",
                    "type": "String"
                },
                "misuse": {
                    "_type": "P_BMM_SINGLE_PROPERTY",
                    "name": "misuse",
                    "documentation": "Description of any misuses of the resource, i.e. contexts in which it should not be used.",
                    "type": "String"
                },
                "original_resource_uri": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "original_resource_uri",
                    "documentation": "URIs of original clinical document(s) or description of which resource is a formalisation, in the language of this description item; keyed by meaning.",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                },
                "other_details": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "other_details",
                    "documentation": "Additional language-sensitive resource metadata, as a list of name\/value pairs. ",
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameters": [
                            "String",
                            "String"
                        ]
                    }
                }
            }
        },
        "RESOURCE_ANNOTATIONS": {
            "name": "RESOURCE_ANNOTATIONS",
            "documentation": "Object representing annotations on an archetype. These can be of various forms, with a documentation form defined so far, which has a multi-level tabular structure [ [ [String value, String key], path key], language key]. Example instance, showing the documentation structure.\n\n--------\n    documentation = <\n        [\"en\"] = <\n           [\"\/data[id2]\"] = <\n               [\"ui\"] = <\"passthrough\">\n           >\n           [\"\/data[id2]\/items[id3]\"] = <\n               [\"design note\"] = <\"this is a design note on Statement\">\n               [\"requirements note\"] = <\"this is a requirements note on Statement\">\n               [\"medline ref\"] = <\"this is a medline ref on Statement\">\n           >\n        >\n    >\n--------\n\nOther sub-structures might have different keys, e.g.  based on programming languages, UI toolkits etc.\n",
            "properties": {
                "documentation": {
                    "_type": "P_BMM_GENERIC_PROPERTY",
                    "name": "documentation",
                    "documentation": "Documentary annotations in a multi-level keyed structure.",
                    "is_mandatory": true,
                    "type_def": {
                        "root_type": "Hash",
                        "generic_parameter_defs": {
                            "K": {
                                "_type": "P_BMM_SIMPLE_TYPE",
                                "type": "String"
                            },
                            "V": {
                                "_type": "P_BMM_GENERIC_TYPE",
                                "root_type": "Hash",
                                "generic_parameter_defs": {
                                    "K": {
                                        "_type": "P_BMM_SIMPLE_TYPE",
                                        "type": "String"
                                    },
                                    "V": {
                                        "_type": "P_BMM_GENERIC_TYPE",
                                        "root_type": "Hash",
                                        "generic_parameters": [
                                            "String",
                                            "String"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
