/**
 * Synapse REST API
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: v1
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */
import type { RestrictableObjectDescriptor } from './RestrictableObjectDescriptor';
/**
 * JSON schema for in-Synapse 'Access Control Team' controlled Access Requirement, a 'tier 3' Access Requirement. This access requirement allows the ACT managing the detail requirements, and submissions within Synapse.
 * @export
 * @interface ManagedACTAccessRequirement
 */
export interface ManagedACTAccessRequirement {
    /**
     * The version number issued to this version on the object.
     * @type {number}
     * @memberof ManagedACTAccessRequirement
     */
    versionNumber?: number;
    /**
     * The unique immutable ID.  Provided by the system, the user may not set this field.
     * @type {number}
     * @memberof ManagedACTAccessRequirement
     */
    id?: number;
    /**
     * Depricated. Replaced by name.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    description?: string;
    /**
     * Name of the AR. Limited to 50 characters and must be unique. Required.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    name?: string;
    /**
     * Synapse employs an Optimistic Concurrency Control (OCC) scheme to handle concurrent updates. Since the E-Tag changes every time an entity is updated it is used to detect when a client's current representation of an object is out-of-date.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    etag?: string;
    /**
     * The date this object was created. Provided by the system, the user may not set this field.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    createdOn?: string;
    /**
     * The date this object was last modified. Provided by the system, the user may not set this field.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    modifiedOn?: string;
    /**
     * The user that created this object.  Provided by the system, the user may not set this field.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    createdBy?: string;
    /**
     * The user that last modified this object.  Provided by the system, the user may not set this field.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    modifiedBy?: string;
    /**
     * Defaults to 'false'.  When 'true', the subjects controlled by this AR are defined by the the'_accessRequirementIds' annotations on individual entities.  This property is mutually exclusive with 'subjectIds'.  If this is set to 'true' then 'subjectIds' must be excluded or empty.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    subjectsDefinedByAnnotations?: boolean;
    /**
     * The IDs of the items controlled by this Access Requirement when 'subjectsDefinedByAnnotations=false'. This property is mutually exclusive with 'subjectsDefinedByAnnotations'.  When 'subjectsDefinedByAnnotations=true' then this property must be empty or excluded.  Required when creating or updating and 'subjectsDefinedByAnnotations=false' or 'subjectsDefinedByAnnotations' is excluded.
     * @type {Array<RestrictableObjectDescriptor>}
     * @memberof ManagedACTAccessRequirement
     */
    subjectIds?: Array<RestrictableObjectDescriptor>;
    /**
     * The enumeration of possible permission.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    accessType?: ManagedACTAccessRequirementAccessTypeEnum;
    /**
     * Indicates which type of AccessRequirement this object represents.  Provided by the system, the user may not set this field.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    concreteType: ManagedACTAccessRequirementConcreteTypeEnum;
    /**
     * If true, then accessor needs to be a Synapse Certified User to gain access.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    isCertifiedUserRequired?: boolean;
    /**
     * If true, then accessor needs to have their Synapse Profile validated to gain access.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    isValidatedProfileRequired?: boolean;
    /**
     * If true, then accessor needs to fill, sign, and submit a Data Use Certificate (DUC) to gain access to the data.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    isDUCRequired?: boolean;
    /**
     * If the Data Use Certificate (DUC) is required, creator of this requirement needs to upload a Data Use Certificate (DUC) template. Users have to download this template, fill out, sign and submit it.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    ducTemplateFileHandleId?: string;
    /**
     * If true, then accessor needs to submit an Institutional Review Board (IRB) Approval document to gain access to the data.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    isIRBApprovalRequired?: boolean;
    /**
     * If true, then accessor needs to upload attachment(s) other than Data Use Certificate (DUC) and Institutional Review Board (IRB) Approval document to gain access to the data.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    areOtherAttachmentsRequired?: boolean;
    /**
     * After an AccessApproval is granted for this AccessRequirement, it will be expired after expirationPeriod miliseconds. Set this value to 0 to indicate that AccessApproval will never be expired.
     * @type {number}
     * @memberof ManagedACTAccessRequirement
     */
    expirationPeriod?: number;
    /**
     * If true, the Intended Data Use Statements submitted to gain access to the data will be presented to public.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    isIDUPublic?: boolean;
    /**
     * If true (default), the Intended Data Use Statement for a research project is required.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    isIDURequired?: boolean;
    /**
     * If true, then accessor needs to enable two factor authentication before gaining access to the data.
     * @type {boolean}
     * @memberof ManagedACTAccessRequirement
     */
    isTwoFaRequired?: boolean;
    /**
     * The ID of the electronic Data Use Certificate (eDUC) template to fill out for data access requests.
     * @type {string}
     * @memberof ManagedACTAccessRequirement
     */
    eDucTemplateId?: string;
}
/**
 * @export
 */
export declare const ManagedACTAccessRequirementAccessTypeEnum: {
    readonly CREATE: "CREATE";
    readonly READ: "READ";
    readonly UPDATE: "UPDATE";
    readonly DELETE: "DELETE";
    readonly CHANGE_PERMISSIONS: "CHANGE_PERMISSIONS";
    readonly DOWNLOAD: "DOWNLOAD";
    readonly UPLOAD: "UPLOAD";
    readonly PARTICIPATE: "PARTICIPATE";
    readonly SUBMIT: "SUBMIT";
    readonly READ_PRIVATE_SUBMISSION: "READ_PRIVATE_SUBMISSION";
    readonly UPDATE_SUBMISSION: "UPDATE_SUBMISSION";
    readonly DELETE_SUBMISSION: "DELETE_SUBMISSION";
    readonly TEAM_MEMBERSHIP_UPDATE: "TEAM_MEMBERSHIP_UPDATE";
    readonly SEND_MESSAGE: "SEND_MESSAGE";
    readonly CHANGE_SETTINGS: "CHANGE_SETTINGS";
    readonly MODERATE: "MODERATE";
    readonly REVIEW_SUBMISSIONS: "REVIEW_SUBMISSIONS";
    readonly EXEMPTION_ELIGIBLE: "EXEMPTION_ELIGIBLE";
};
export type ManagedACTAccessRequirementAccessTypeEnum = typeof ManagedACTAccessRequirementAccessTypeEnum[keyof typeof ManagedACTAccessRequirementAccessTypeEnum];
/**
 * @export
 */
export declare const ManagedACTAccessRequirementConcreteTypeEnum: {
    readonly org_sagebionetworks_repo_model_ManagedACTAccessRequirement: "org.sagebionetworks.repo.model.ManagedACTAccessRequirement";
};
export type ManagedACTAccessRequirementConcreteTypeEnum = typeof ManagedACTAccessRequirementConcreteTypeEnum[keyof typeof ManagedACTAccessRequirementConcreteTypeEnum];
/**
 * Check if a given object implements the ManagedACTAccessRequirement interface.
 */
export declare function instanceOfManagedACTAccessRequirement(value: object): value is ManagedACTAccessRequirement;
export declare function ManagedACTAccessRequirementFromJSON(json: any): ManagedACTAccessRequirement;
export declare function ManagedACTAccessRequirementFromJSONTyped(json: any, ignoreDiscriminator: boolean): ManagedACTAccessRequirement;
export declare function ManagedACTAccessRequirementToJSON(json: any): ManagedACTAccessRequirement;
export declare function ManagedACTAccessRequirementToJSONTyped(value?: ManagedACTAccessRequirement | null, ignoreDiscriminator?: boolean): any;
