/**
 * iCure Data Stack API Documentation
 * The iCure Data Stack Application API is the native interface to iCure. This version is obsolete, please use v2.
 *
 * OpenAPI spec version: v1
 *
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */
import { AuthenticationToken } from './AuthenticationToken';
import { Permission } from './Permission';
import { PropertyStub } from './PropertyStub';
import { Identifier } from './Identifier';
/**
 * This entity is a root level object. It represents an user that can log in to the iCure platform. It is serialized in JSON and saved in the underlying icure-base CouchDB database.
 */
export declare class User {
    constructor(json: JSON | any);
    /**
     * the Id of the user. We encourage using either a v4 UUID or a HL7 Id.
     */
    id?: string;
    /**
     * the revision of the user in the database, used for conflict management / optimistic locking.
     */
    rev?: string;
    identifier?: Array<Identifier>;
    /**
     * hard delete (unix epoch in ms) timestamp of the object. Filled automatically when deletePatient is called.
     */
    deletionDate?: number;
    created?: number;
    /**
     * Last name of the user. This is the official last name that should be used for official administrative purposes.
     */
    name?: string;
    /**
     * Extra properties for the user. Those properties are typed (see class Property)
     */
    properties?: Array<PropertyStub>;
    /**
     * If permission to modify patient data is granted or revoked
     */
    permissions?: Array<Permission>;
    /**
     * Roles specified for the user
     */
    roles?: Array<string>;
    /**
     * Authorization source for user. 'Database', 'ldap' or 'token'
     */
    type?: User.TypeEnum;
    /**
     * State of user's activeness: 'Active', 'Disabled' or 'Registering'
     */
    status?: User.StatusEnum;
    /**
     * Username for this user. We encourage using an email address
     */
    login?: string;
    /**
     * Hashed version of the password (BCrypt is used for hashing)
     */
    passwordHash?: string;
    /**
     * Secret token used to verify 2fa
     */
    secret?: string;
    /**
     * Whether the user has activated two factors authentication
     */
    use2fa?: boolean;
    /**
     * id of the group (practice/hospital) the user is member of
     */
    groupId?: string;
    /**
     * Id of the healthcare party if the user is a healthcare party.
     */
    healthcarePartyId?: string;
    /**
     * Id of the patient if the user is a patient
     */
    patientId?: string;
    /**
     * Id of the device if the user is a device
     */
    deviceId?: string;
    /**
     * Delegations that are automatically generated client side when a new database object is created by this user
     */
    autoDelegations?: {
        [key in User.AutoDelegationTagEnum]?: Array<string>;
    };
    /**
     * @deprecated use created instead
     * the timestamp (unix epoch in ms) of creation of the user, will be filled automatically if missing. Not enforced by the application server.
     */
    createdDate?: number;
    /**
     * the timestamp (unix epoch in ms) of the latest validation of the terms of use of the application
     */
    termsOfUseDate?: number;
    /**
     * email address of the user (used for token exchange or password recovery).
     */
    email?: string;
    /**
     * mobile phone of the user (used for token exchange or password recovery).
     */
    mobilePhone?: string;
    applicationTokens?: {
        [key: string]: string;
    };
    /**
     * Encrypted and time-limited Authentication tokens used for inter-applications authentication
     */
    authenticationTokens?: {
        [key: string]: AuthenticationToken;
    };
    /**
     * System metadata for the user: this configuration is read only, and defined only when using the cloud version of iCure.
     */
    systemMetadata?: User.SystemMetadata;
}
export declare namespace User {
    type TypeEnum = 'database' | 'ldap' | 'token';
    const TypeEnum: {
        Database: TypeEnum;
        Ldap: TypeEnum;
        Token: TypeEnum;
    };
    type StatusEnum = 'ACTIVE' | 'DISABLED' | 'REGISTERING';
    const StatusEnum: {
        ACTIVE: StatusEnum;
        DISABLED: StatusEnum;
        REGISTERING: StatusEnum;
    };
    type AutoDelegationTagEnum = 'all' | 'administrativeData' | 'generalInformation' | 'financialInformation' | 'medicalInformation' | 'sensitiveInformation' | 'confidentialInformation' | 'cdItemRisk' | 'cdItemFamilyRisk' | 'cdItemHealthcareelement' | 'cdItemHealthcareapproach' | 'cdItemAllergy' | 'cdItemDiagnosis' | 'cdItemLab' | 'cdItemResult' | 'cdItemParameter' | 'cdItemMedication' | 'cdItemTreatment' | 'cdItemVaccine';
    const AutoDelegationTagEnum: {
        all: AutoDelegationTagEnum;
        administrativeData: AutoDelegationTagEnum;
        generalInformation: AutoDelegationTagEnum;
        financialInformation: AutoDelegationTagEnum;
        medicalInformation: AutoDelegationTagEnum;
        sensitiveInformation: AutoDelegationTagEnum;
        confidentialInformation: AutoDelegationTagEnum;
        cdItemRisk: AutoDelegationTagEnum;
        cdItemFamilyRisk: AutoDelegationTagEnum;
        cdItemHealthcareelement: AutoDelegationTagEnum;
        cdItemHealthcareapproach: AutoDelegationTagEnum;
        cdItemAllergy: AutoDelegationTagEnum;
        cdItemDiagnosis: AutoDelegationTagEnum;
        cdItemLab: AutoDelegationTagEnum;
        cdItemResult: AutoDelegationTagEnum;
        cdItemParameter: AutoDelegationTagEnum;
        cdItemMedication: AutoDelegationTagEnum;
        cdItemTreatment: AutoDelegationTagEnum;
        cdItemVaccine: AutoDelegationTagEnum;
    };
    class SystemMetadata {
        constructor(json: JSON | any);
        /**
         * The roles of the user that the cloud environment recognizes
         */
        roles?: string[];
        /**
         * If the user is considered as an admin by the cloud environment
         */
        isAdmin?: boolean;
        /**
         * True if the content of roles is inherited from the user's group configuration, false if the roles are defined specifically for the use
         */
        inheritsRoles?: boolean;
        /**
         * Identifiers of the user available for login
         */
        loginIdentifiers?: Identifier[];
    }
}
