syntax = "proto3";

package iwa.ttf.token.sustainability;
import "common.proto";
import "dmrv.proto";
import "google/protobuf/any.proto";
option csharp_namespace = "IWA.TTF.Token.Sustainability";
option java_package = "org.iwa.ttf.token.sustainability";
option java_multiple_files = true;

//the identity of the organization operating one or more AIM projects
message AccountableImpactOrganization{
    string id = 1; //unique id for the organization
    string name = 2; //name of the organization
    string description = 3; //description of the organization
    repeated common.Address addresses = 4; //list of addresses associated with the organization
    repeated string owners = 5; //list of owners of the organization
    common.VerifiedLink information_link = 8; //Link to information about the organization
    repeated common.VerifiedLink media_links = 9; //Links to media that can be used for promotional materials about the organization
    repeated common.Attestation attestations = 10; //a collection of Attestation workflow steps for a project
    repeated ActivityImpactModule activity_impact_modules = 11; //list of activity impact modules
    repeated dmrv.EntityExtension extensions = 12; //list of MRV extensions for the organization
}

//Can represent a single Project or a Module of a Project, if a project contains multiple AIMs, these can be correlated by the correlating_project_id.
message ActivityImpactModule {
    string id = 1; //unique identifier for the activity impact project or module
    string aio_id = 2; //identifier for the parent organization
    bool is_grouped = 3; //if true, this AIM is a part of at least one multi-module Origination Process Agreement. It can be a member of multiple agreements, for example, if the project provides captured CO2 to multiple storage facilities.
    string name = 4; //descriptive name for the project
    common.ClassificationCategory classification_category = 5; //classification category for the project
    common.Method classification_method = 6; //classification method for the project
    common.CoBenefit benefit_category = 7; //ecological benefit category for the project
    common.ProjectScope project_scope = 8; //scope of the project
    common.ProjectType project_type = 9; //type of the project
    common.ProjectScale project_scale = 10; //size of the project, small, medium, large
    common.Country country = 11;//Alpha 3 ISO 3166 international standard country code https://www.iban.com/country-codes
    common.Region region = 12; //region of the organization
    string arb_id = 13; //if the credit is registered for the California Air Resources Board, this is the ARB ID assigned to the project.
    common.GeographicLocation geographic_location = 14; //geographic location of the project
    string first_year_issuance = 15; //first year of issuance, historical if an established project
    string registry_project_id = 16; //OPTIONAL Registry ID if different from the project id. Most registries do not have a one to many EP to AIM and assign unique identifiers to projects.
    repeated string developers = 17; //list of developers of the project
    repeated string sponsors = 18; //list of sponsors of the project, i.e., financial backers
    repeated ClaimSource claim_sources = 19; //a list of claim sources that can be used for claims from this activity impact module.
    repeated ImpactClaim impact_claims  = 20; //list of ecological claims for the project
    repeated dmrv.EntityExtension extensions = 21; //list of MRV extensions for the module
    //DRAFT
    message ValidationStep{
        string validation_step_name = 1; //name of the validation step as defined by the validation method
        string validation_step_description = 2; //description of the validation step
        enum ValidationStepStatus{
            NOT_STARTED = 0;
            IN_PROGRESS = 1;
            COMPLETED = 2;
        }
        ValidationStepStatus validation_step_status = 3; //status of the validation step, e.g., completed, in progress, not started, etc.
        common.VerifiedLink validation_step_document_link = 4; //link to the document that contains the details of the validation step and output
    }
    //DRAFT
    message Validation{
        string request_date = 1; //date of the validation request, yyyy-mm-dd
        string validation_date = 2; //date of the validation, yyyy-mm-dd
        string validating_party_id = 3; //name or Id of the party that performed the validation
        string validation_method = 4; //name of the validation method used
        string validation_expiration_date = 5; //expiration date of the validation, yyyy-mm-dd
        repeated ValidationStep validation_steps = 6; //collection of validation steps
    }
    repeated Validation validations = 22; //in DRAFT, a collection of Validation workflow steps for a project
    repeated common.Attestation attestations = 23; //a collection of Attestation workflow steps for a project
    repeated dmrv.Variable fixed_variables = 24; //a list of fixed variables that are associated with the project, i.e., emission factors, etc.
    AccountableImpactOrganization accountable_impact_organization = 25; //optional, for object navigation, the parent accountable impact organization
}

//A ClaimGroup is a group of Impact and Processed Claim pairs that are grouped together in order to combine claims from multiple projects (AIM), potentially from different organizations, into a single claim for processing.
message ClaimGroup
{
    string id = 1; //unique id for the group
    string opa_id = 2; //the id of the Origination Process Agreement that the claim group is associated with.
    string name = 3; //the name of the group
    string description = 4; //a description of the group
    repeated dmrv.EntityExtension extensions = 5; //a list of MRV extensions that are associated with the group
    repeated dmrv.Formula formulas = 6; //a list of MRV formulas that are associated with the group
    repeated ImpactClaim impact_claims = 7; //for model navigation, the collection of child impact claims
    repeated ProcessedClaim processed_claims = 8; //for model navigation, the collection of child processed claims
}

//A ClaimSource is a source of claim data that is registered with an AIM.  The claim source can be a sensor device, an application running on a device, or a reference source like a satellite or remote sensing data.
message ClaimSource
{
    string id = 1; //each claim source is issued an id unique to the claim it is sourcing.  This is independent of the identifiers the device may have.
    string aim_id = 2; //the id of the activity impact module that the claim source is associated with.
    string name = 3; //the name of the device.
    string description = 4; //a description of the device, like the location, etc.
    common.GeographicLocation location = 5; //the location of the device, using GNSS with Decimal Degrees.
    enum ClaimSourceType
    {
        SENSOR_DEVICE = 0; //IoT, meter, etc.
        USER_APPLICATION = 1; //An application running on a device, iPad, etc. that uses the device's sensors like GPS, date/time and user authentication as evidence of source claim data.
        REFERENCE = 2; //Factor Library, Satellite, Remote Sensing, Analytical Models, etc.
        DOCUMENT = 3; //A document that is used as a reference source.
        CALCULATED = 4; //A calculated source, derived from other data.
        OTHER = 5; //Other source type.
    }
    ClaimSourceType source_type = 6; //the type of source that is providing the claim data.
    common.UnitOfMeasure unit_of_measure = 7; //the unit of measure for the claim data.
    common.ReportingFrequency reporting_frequency = 8; //the frequency that the claim source reports data.
    string source_identifier = 9; //this can be a unique identifier for a device, a serial number, public key, or for a application/user can be the appId and UserId, for reference data it can be the URI for the reference source.
    repeated dmrv.EntityExtension extensions = 10; //an optional list of MRV extensions that can be used for source configuration or other metadata.
    repeated dmrv.VariableTemplate variable_templates = 11; //a list of MRV variables that are associated with the claim source.
}

message ImpactClaim
{
    string id = 1; //unique id for the claim, the processed claim should have the same id. If the implementation uses a different id for the processed claim, the processed claim id should be recorded in the claim.
    string aim_id = 2; //the id of the AIM that the claim is associated with
    string processed_claim_id = 3; //will be null if the implementation allows for the Id to be the same as the Impact Claim, once processing starts and the processed claim is created, this is the id of the processed claim paired with this claim.
    string claim_group_id = 4; //the id of the ClaimGroup that the claim is associated with, will be null if not part of a group.
    string start_date = 5; //the start date of the claim, yyyy-mm-dd
    string end_date = 6; //the end date of the claim, yyyy-mm-dd
    common.UnitOfMeasure unit_of_measure = 7; //unit of measure for the quantity
    string quantity = 8; //the estimated cumulative benefits summing the Environmental Factor (EF) before and after difference for the entire claim. I.e. 5 for a carbon claim would be 5 tCO2e. Use a string or decimal.
    repeated common.CoBenefit co_benefits = 9; //a list of co-benefits associated with the claim.  Co-benefits are benefits that are not directly related to the environmental factor, but are related to the activity that is being claimed.  I.e. a carbon claim may have a co-benefit of Quality Education.
    repeated dmrv.Formula formulas = 10; //a list of MRV formulas that are associated with the claim.
    repeated Checkpoint checkpoints = 11; //a list of checkpoints that are associated with the claim.
    repeated dmrv.EntityExtension extensions = 12; //a list of MRV extensions that are associated with the claim.
    ActivityImpactModule activity_impact_module = 13; //optional, for object navigation, the parent activity impact module
}

message Checkpoint
{
    string id = 1; //unique id for the checkpoint
    string claim_id = 2; //the id of the claim that the checkpoint is associated with.
    repeated string claim_source_ids = 3; //list of claim source ids that are associated with the checkpoint.
    string project_developer_id = 4; //the id of the project developer that is submitting the checkpoint, must be a developer of the project.
    string ef_before = 5; //environmental factor before activity - i.e., total emissions = 3 tCO2e
    string ef_after = 6; //environmental factor after activity - i.e., total emissions = 2 tCO2e (for a 1 tonne reduction.)
    common.DateRange checkpoint_date_range = 7; //the date range that the checkpoint covers within the claim period.
    repeated dmrv.EntityExtension extensions = 8; //list of MRV extensions for the checkpoint
    repeated dmrv.Variable variables = 9; //list of MRV variables that are associated with the checkpoint
    repeated DataFile data_files = 10; //list of files that are associated with the checkpoint
    repeated DataPackage data_packages = 11; //the manifest from the Data Package is a 'table of contents' of evidence files and the sources.
}

//Processed Claim token schema - not a part of certification
message ProcessedClaim
{
    string id = 1; //the id for the processed claim
    string opa_id = 2; //Id for the Origination Process Agreement
    string impact_claim_id = 3; //the ID for the Ecological Claim being processed, will be null or missing if the implementation allows for the Id to be the same as the Impact Claim Id.
    string claim_group_id = 4; //the id of the ProcessedClaimGroup that the claim is associated with, will be null if not part of a group.
    string credit_id = 5; //when a credit is issued, the processed claim will be retired and the credit id issued will be recorded.
    common.UnitOfMeasure unit_of_measure = 6; //unit of measure for the quantity
    string quantity = 7; //the estimated cumulative benefits summing the Environmental Factor (EF) before and after difference for the entire claim. I.e. 5 for a carbon claim would be 5 tCO2e. Use a string or decimal
    repeated common.CoBenefit co_benefits = 8; //list of co-benefits for the claim
    repeated dmrv.EntityExtension extensions = 9; //a list of MRV extensions that are associated with the claim.
    repeated dmrv.Formula formulas = 10; //a list of MRV formulas that are associated with the claim.
    //basically the same data structure as the checkpoint with different field names, so can reuse the Ecological Checkpoint property set.
    repeated CheckpointResult checkpoint_results = 11; //summary and verified links for the the claim's checkpoint verification results.
    google.protobuf.Any issuance_request = 12; //Since a processed claim is generic, it can contain a proposed asset type with values to the issuing registry to use as a consideration.  For example, this field could contain as the proposed asset a CRU Token with the values that the verifier proposes after verification.  This allows the processed claim to be used as the source for any type of asset or credit.
    OriginationProcessAgreement origination_process_agreement = 13; //optional, for object navigation - the Origination Process Agreement used to verify the claim
    ImpactClaim impact_claim = 14; //optional, for object navigation - the ecological claim being processed
    google.protobuf.Any asset = 15; //optional, for object navigation, the asset that is issued for the processed claim.
}

enum CheckpointResultStatus{
    PENDING = 0; //verification hasn't begun
    IN_PROGRESS = 1; //verification has started
    EXCEPTION_PROCESS = 2; //an exception has been found and is being resolved with the Supplier via Messaging
    VERIFIED = 3; //verification was complete
    REJECTED = 4; //verification was rejected
}

message CheckpointResult{
    string id = 1; //the id for the processed checkpoint
    string checkpoint_id = 2; //The unique identifier for the corresponding ImpactClaimCheckpoint being processed.
    repeated DataPackage processed_data = 3; //Processed data findings, one for each data package in the checkpoint.
    common.DateRange date_range = 4; //Date range for the checkpoints processed
    string ef_before = 5; //verified environmental factor before project activities 
    string ef_after = 6; //verified environmental factor after project activities
    CheckpointResultStatus status = 7; //status of the checkpoint result
    string Comment = 8; //comments from the verifier on the checkpoint result
    repeated dmrv.EntityExtension extensions = 9; //a list of MRV extensions that are associated with the claim.
    repeated dmrv.Variable variables = 10; //list of MRV variables that are associated with the checkpoint result
    repeated DataPackage data_packages = 11; //the manifest from the Data Package is a 'table of contents' of evidence files and the sources.
}


// DataFile is file metadata for a file that is part of a DataPackage.  The DataFile is a file that is part of a DataPackage and is used to submit evidence data from registered claim sources in a claim checkpoint.
message DataFile{
    string name = 1; //name of the file
    enum FileType
    {
        DATA_BINARY = 0; //binary data file
        DATA_CSV = 1; //csv data file
        DATA_JSON = 2; //json data file
        DATA_XML = 3; //xml data file
        DATA_PDF = 4; //pdf data file
        DATA_AVRO = 5; //avro data file
        DATA_OTHER = 6; //other data file
    }
    FileType type = 2; //type of the file
    string description = 3; //description of the file
    string claim_source_id = 4; //the claim source id, registered with the AIM, for the file
    string claim_source_attestation = 5; //claim source attestation or signature for the file
    repeated dmrv.EntityExtension extensions = 6; //dmrv extensions for the file
}

// Data Package, is a compression file/package, i.e., zip file, that contains a manifest.json file in the root that serves as a table of contents for the package. The DataPackage is a container that is used to submit 'evidence' data from registered claim sources in a claim checkpoint.
message DataPackage{
    message Manifest{
        string id = 1; //unique identifier
        string version = 2; //version of the DataPackage specification
        string aio_id = 3; //id of the accountable impact organization
        string aim_id = 4; //id of the activity impact module
        string claim_id = 5; //id of the claim
        string processed_claim_id = 6; //id of the processed claim
        string project_developer_id = 7; //id of the project developer submitting the DataPackage
        common.DatePoint created = 8; //date the DataPackage was created
        repeated dmrv.EntityExtension extensions = 9; //list of MRV extensions
        repeated dmrv.Formula formulas = 10; //list of MRV formulas that are reporting in the DataPackage
        repeated DataFile data_files = 11; //list of files in the DataPackage
    }
    Manifest manifest = 1; //manifest of the DataPackage
    common.VerifiedLink verified_link_to_data_package = 2; //a link to the data package that is associated with the checkpoint or checkpoint_result.
}


message Degradable{
    int32 percentage = 1; //0 = no degredation possible, 100 = all sequestered should be expected to be released
    int32 factor = 2; //25 = .25 per year if linear or exponential starts at 25% of durability years.
    common.DegradationType degradation_type = 3; //does the sequestration degrade over time?
}


message Durability
{
    common.Storage storage_type = 1;
    int32 years = 2; //The term in years of how long the CO2 will be removed from the atmosphere, compared with the risk of CO2 reversion to the atmosphere before that term elapses.
    Degradable degradable = 3; //optional, if the sequestration is degradable, this is the percentage of the sequestration that is expected to be released over time.
    common.ReversalRisk reversal_risk = 4;
    common.DurabilityInsuranceType insurance_type = 5;
    common.InsurancePolicyOwner insurance_policy_owner = 6;
    common.VerifiedLink insurance_policy_link = 7; //optional link to the insurance policy/product
}

message Replacement{
    string replaces_id = 1; //the id of the token being replaced
    common.Date replacement_date = 2; //date of the replacement/adjustment
    string notes = 3; //notes on why the replacement or adjustment is needed
}

//The Carbon Removal or Reduction Unit (CRU) token is a token that represents a claim of a carbon removal or reduction.  It is a generic token that can be used for any type of carbon removal or reduction claim.  It is not a part of the certification process, but is used to represent the claim of a carbon removal or reduction.
message CRU
{
    string id = 1; //unique id for the token
    string quantity = 2; //fractional to represent up to 8 decimal places, use a string or decimal for the quantity.
    common.UnitOfMeasure unit_of_measure = 3; //unit of measure for the quantity
    string owner_id = 4; //the unique id of the owner of the token         
    string listing_agent_id = 5; //AuthorizedId
    string asset_id = 6; //typically the issuing registry's master id or serial number that resides on their registry system. Could be empty or the same as the token's id if not needed.
    common.Date issuance_date = 7; //the date the token was issued.
    string vintage = 8;  //refers to the year that the emissions reduction or removal took place or will take place.
    message CoreCarbonPrinciples{ 
        common.GenerationType generation_type = 1; //typically generated or ex-ante
        common.Standard verification_standard = 2; //the verification standard used to determine and issue a ecological benefit token. These can be a voluntary or compliance/regulatory standard.
        common.MitigationActivity mitigation_activity = 3; //the mitigation activity that is used to generate the ecological benefit token.
        Durability durability = 4; //this is the recommendation that replaces permanence for CCPs as it includes the risk profile and not simply a boolean.
        Replacement replacement = 5; //set if this credit replaces a revoked or adjusted credit.
        common.PACompliance paris_agreement_compliance = 6; //set if using PA specific attributes like corresponding adjustment
        repeated common.CoBenefit quantified_sdg_impacts = 7; //the quantified impacts of the token.
        repeated common.CoBenefit adaptation_co_benefits = 8; //the adaptation co-benefits of the token consistent with the host country’s priorities, consistent with the provisions under Article 7.1 of the Paris Agreement.
    }
    CoreCarbonPrinciples core_carbon_principles = 9; //these are aligned with the ICVCM Core Carbon Principles
    repeated common.ClimateLabel climate_labels = 10; //climate labels are registry specific and are not part of the CCPs, but generally are name/value pairs to describe attributes that are specific to the registry or credit type.
    common.CreditStatus status = 11; //the status of the token
    message ReferencedCru{ //this is used to hold values for credits that reference a credit on another registry, there are likely to be more fields needed here so using a property-set instead of a single field.
        string referenced_credit_id = 1; //the id of the referenced credit, this can be a serial number or a master id
        common.VerifiedLink registry_link = 2; //link to the registry that issued the referenced credit
        string metadata = 3; //metadata about the referenced credit, json serialized as a string
    }
    repeated ReferencedCru referenced_credits = 12; //this is used to hold values for credits that reference a credit on another registry, there are likely to be more fields needed here so using a property-set instead of a single field.
    string applied_to_reporting_period_id = 13; //optional link to external reporting system for the reporting period that the credit was retired and applied to.
    string processed_claim_id = 14; //link to the processed claim id
    string issuer_id = 15; //the account that is the issuer, recorded at issue/mint.
    ProcessedClaim processed_claim = 16; //optional, for object navigation - the processed claim that was used to issue the token.
}

message REC
{
    string id = 1; //unique id for the token
    enum REC_Type{
        I_REC = 0; //International REC
        US_REC = 1; //United States REC
        US_S_REC = 2; //United States Solar REC
        RECS = 3; //EU RECs
    }
    REC_Type rec_type = 2; //the type of REC
    string valid_jurisdiction = 3; //optional jurisdiction where of the REC can be redeemed, i.e. US-Texas, multiples separated by a comma.
    string quantity = 4; //fractional to represent up to 8 decimal places, use a string or decimal for the quantity, typically in MWh.
    common.UnitOfMeasure unit_of_measure = 5; //unit of measure for the quantity
    string owner_id = 6; //the unique id of the owner of the token         
    string listing_agent_id = 7; //AuthorizedId
    repeated common.ClimateLabel climate_labels = 8; //climate labels are registry specific and are not part of the CCPs, but generally are name/value pairs to describe attributes that are specific to the registry or credit type.
    common.CreditStatus status = 9; //the status of the token
    message ReferencedRec{ //this is used to hold values for credits that reference a credit on another registry, there are likely to be more fields needed here so using a property-set instead of a single field.
        string referenced_credit_id = 1; //the id of the referenced credit, this can be a serial number or a master id
        common.VerifiedLink registry_link = 2; //link to the registry that issued the referenced credit
        string metadata = 3; //metadata about the referenced credit, json serialized as a string
    }
    repeated ReferencedRec referenced_recs = 10; //this is used to hold values for credits that reference a credit on another registry, there are likely to be more fields needed here so using a property-set instead of a single field.
    string applied_to_reporting_period_id = 11; //optional link to external reporting system for the reporting period that the credit was retired and applied to.
    string processed_claim_id = 12; //link to the processed claim id
    string issuer_id = 13; //the account that is the issuer, recorded at issue/mint.
    ProcessedClaim processed_claim = 14; //optional, for object navigation - the processed claim that was used to issue the token
}

/*
Project Modules are used to represent the Activity Impact Modules associated with a Origination Process Agreement that are grouped together in order to combine claims from multiple project, potentially from different organizations, into a single claim.
A carbon credit may require several different modules and claims to be combined to create a single credit, the AIMs would be grouped together in an OriginationProcessAgreement, even accross different organizations.

For example, Carbon Capture and Storage (CCS) may require a project developer to capture CO2 from a plant, then hand it off to a different organization to transport the CO2 to a storage facility,
 then a third organization to store the CO2.  Each of these organizations would have their own AIM and claim, but only one credit will be issued for the combined claims. 
 Claims made under multi-module OPAs have their claims grouped, both impact and processed claims, so that the claims can be processed and issued against together.
*/
message ProjectModule{
    string aim_id = 1; //the id of the activity impact module that the project module is associated with
    string description = 2; //description of the project module, i.e., the Capture Module, Transport Module, Storage Module, etc.
    //ExtensionSetModule is the id of the extension set module that the project module is associated with. It is not limited to the module, but can also use extension in the parent ExtensionSet.
    string extension_set_id = 3; //the id of the extension set that the project module is associated with
    string extension_set_module_id = 4; //the id of the extension set module that the project module is associated with
    string vvb_id = 5; //the id of the VVB that is associated with the project module
    string verification_platform_id = 6; //the id of the verification platform that is associated with the project module
}


//Define the required properties that a Origination Process Agreement between a activity impact module, Verifier and Issuing Registry should have.
message OriginationProcessAgreement{
    string id = 1; //unique identifier
    string name = 2; //name of the agreement
    string description = 3; //description of the agreement
    message Signatory{
        string id = 1; //unique identifier
        string name = 2; //name of the signatory
        string description = 3; //description of the signatory
        enum SignatoryRole{
            ISSUING_REGISTRY = 0;
            VALIDATION_AND_VERIFICATION_BODY = 1;
            PROJECT_OWNER = 2;
            VERIFICATION_PLATFORM = 3;
            ACCOUNTABLE_IMPACT_ORGANIZATION = 4;
            PROJECT_DEVELOPER = 5;
            PROJECT_SPONSOR = 6;
        }
        SignatoryRole signatory_role = 4; //role of the signatory
        common.DigitalSignature signature = 5; //digital signature of the signatory
    }
    repeated ProjectModule project_modules = 4; //list of project modules that are associated with the agreement
    repeated Signatory signatories = 6; //list of signatories to the agreement, by id
    message QualityStandard{
        string name = 1; //name of the standard
        string description = 2; //description of the standard
        common.Standard standard = 3; //accredited standard that is used to verify the project
        repeated common.MethodologyAndTool methodology_and_tools = 4; //list of methodologies and tools that are used to verify the project
        string version = 5; //version of the standard
        repeated common.CoBenefit co_benefits = 6; //list of co-benefits that are captured by the standard
        common.VerifiedLink standard_link = 7; //url to the standard
    }
    message MrvRequirements{
        common.MeasurementSpecification measurement_specification = 1; //measurement specification that is used to verify the project
        common.VerifiedLink specification_link = 2; //url to the measurement specification
        message PrecisionMix{
            int32 low = 1; //percentage of estimated or factored precision, 10 = 10%
            int32 medium = 2; //percentage of indirect high quality precision, 20 = 20%
            int32 high = 3; //percentage of direct highly accurate measurements, typically from sensors, 50 = 50%
        }
        PrecisionMix precision = 3; //mix  precision by percentage of the measurement specification, the sum of all the mixes must be 100 for 100%.
        enum ClaimPeriod{
            DAILY = 0; //daily claims
            WEEKLY = 1; //weekly claims
            MONTHLY = 2; //monthly claims
            QUARTERLY = 3; //quarterly claims
            SEMIANNUAL = 4; //semiannual claims
            ANNUAL = 5; //annual claims
            BIENNIAL = 6; //biennial claims
        }
        ClaimPeriod claim_period = 4; //period of claims
        string extension_set_id = 5; //the MRV extension set used in the agreement
        dmrv.ExtensionSet extension_set = 6; //optional for object navigation - the MRV extension set used in the agreement
    }
    QualityStandard quality_standard = 7; //standard that is used to verify the project
    MrvRequirements mrv_requirements = 8; //measurement, reporting and verification requirements
    common.Date agreement_date = 9; //start date of the agreement
    string estimated_annual_credits = 10; //estimated annual credits that will be issued under the agreement
    message Audits{
        common.Date last_audit_date = 2; //date of the last audit
        repeated common.VerifiedLink audit_reports = 3; //list of audit reports
    }
    common.AuditSchedule audit_schedule = 11; //schedule of audits
    Audits audits = 12; //list of audits that have been performed under the agreement
    repeated dmrv.EntityExtension extensions = 13; //list of MRV extensions for the agreement
    ActivityImpactModule activity_impact_module = 14; //optional, for object navigation, the activity impact module that is being verified
    repeated ProcessedClaim processed_claims = 15; //optional, for object navigation, the processed claims that have been processed under the agreement
}


