import { CODEABLE_CONCEPT, EXTENSION, MULTI_RESOURCE } from "../config";
import { ResourceMaster } from "../Interfaces";
import { PRACTITIONER } from "./Practitioner";
import ResourceMain from "./ResourceMai";
declare const EncounterStatusArray: readonly ["planned", "arrived", "triaged", "in-progress", "onleave", "finished", "cancelled", "entered-in-error", "unknown"];
declare const EncounterClassArray: readonly [{
    readonly code: "AMB";
    readonly display: "ambulatory";
}, {
    readonly code: "FLD";
    readonly display: "Field";
}, {
    readonly code: "HH";
    readonly display: "Home Health";
}, {
    readonly code: "IMP";
    readonly display: "in-patient";
}, {
    readonly code: "EMER";
    readonly display: "emergency";
}, {
    readonly code: "ACUTE";
    readonly display: "inpatient acute";
}, {
    readonly code: "NONAC";
    readonly display: "inpatient non-acute";
}, {
    readonly code: "OBSENC";
    readonly display: "observation encounter";
}, {
    readonly code: "PRENC";
    readonly display: "pre-admission";
}, {
    readonly code: "VR";
    readonly display: "virtual";
}];
declare const EncounterHospitalizationDischargeDispositionArray: readonly [{
    readonly code: "home";
    readonly display: "home";
}, {
    readonly code: "alt-home";
    readonly display: "Alternative home";
}, {
    readonly code: "other-hcf";
    readonly display: "Other healthcare facility";
}, {
    readonly code: "hosp";
    readonly display: "Hospice";
}, {
    readonly code: "long";
    readonly display: "Long-term care";
}, {
    readonly code: "aadvice";
    readonly display: "Left against advice";
}, {
    readonly code: "exp";
    readonly display: "Expired";
}, {
    readonly code: "psy";
    readonly display: "Psychiatric hospital";
}, {
    readonly code: "rehab";
    readonly display: "Rehabilitation";
}, {
    readonly code: "smf";
    readonly display: "Skilled nursing facility";
}, {
    readonly code: "oth";
    readonly display: "Other";
}];
declare type EncounterStatus = typeof EncounterStatusArray[number];
declare type EncounterClass = typeof EncounterClassArray[number];
declare type EncounterHospitalizationDischargeDisposition = typeof EncounterHospitalizationDischargeDispositionArray[number];
interface ENCOUNTER_PARTICIPANT {
    type: CODEABLE_CONCEPT[];
    individual: {
        reference: string;
        type: "RelatedPerson" | "Practitioner" | "PractitionerRole";
    };
}
interface BASED_ON extends MULTI_RESOURCE {
    resource: "CarePlan" | "DeviceRequest" | "MedicationRequest" | "ServiceRequest";
}
interface ENCOUNTER {
    id?: string;
    text: string;
    extension?: EXTENSION[];
    status: EncounterStatus;
    careContext?: string;
    organizationId?: string;
    intrimOrFinal?: "Intrim" | "Final";
    estimatedDateDischarge?: string;
    class: EncounterClass;
    type?: CODEABLE_CONCEPT[];
    patientId: string;
    startDate: string;
    endDate?: string;
    appointment?: {
        reference: string;
        type: "Appointment";
    }[];
    reasonReference?: {
        reference: string;
        type: "ImmunizationRecommendation" | "Condition" | "Procedure" | "Observation";
    }[];
    reasonCode?: CODEABLE_CONCEPT[];
    hospitalization?: {
        dischargeDisposition?: CODEABLE_CONCEPT;
        id?: string;
        origin?: {
            reference: string;
            type: "Location" | "Organization";
        };
        admitSource?: CODEABLE_CONCEPT;
        reAdmission?: CODEABLE_CONCEPT;
        dietPreference?: CODEABLE_CONCEPT;
        destination?: {
            reference: string;
            type: "Location" | "Organization";
        };
    };
    diagnosis?: {
        condition: {
            reference: string;
            type: "Condition" | "Procedure";
        };
        use?: CODEABLE_CONCEPT;
        rank?: number;
    }[];
    participant?: ENCOUNTER_PARTICIPANT[];
    account?: {
        reference: string;
        type: "Account";
    }[];
    basedOn?: BASED_ON[];
    location?: {
        location: {
            reference: string;
        };
        period?: {
            start: string;
            end?: string;
        };
        status?: "planned" | "active" | "reserved" | "completed";
        physicalType: CODEABLE_CONCEPT;
    }[];
}
export declare class Encounter extends ResourceMain implements ResourceMaster {
    toHtml(): Promise<string>;
    statusArray?: Function | undefined;
    getFHIR(options: ENCOUNTER): any;
    convertFhirToObject(options: any): ENCOUNTER;
    rearrangeParticipants(participant: ENCOUNTER_PARTICIPANT[]): ENCOUNTER_PARTICIPANT[];
    /**
     *
     * @param particpants particpants of encounters
     * @param allPractioners supply array of practioners for filtering
     * @returns array of practioners
     */
    getPractionersFromParticipants: (particpants: ENCOUNTER_PARTICIPANT[], allPractioners: PRACTITIONER[]) => PRACTITIONER[];
    /**
     * This converts Practioners to encounter particpants
     * @param practioners  PRACTINIORS
     * @returns
     */
    convertPractionersToParticpants: (practioners: PRACTITIONER[]) => ENCOUNTER["participant"];
}
/**
 * @deprecated
 * @param options
 * @returns
 */
declare const EncounterResource: (options: ENCOUNTER) => any;
export { ENCOUNTER, ENCOUNTER_PARTICIPANT, EncounterResource, EncounterHospitalizationDischargeDispositionArray, EncounterStatusArray, EncounterClassArray, };
export type { EncounterClass, EncounterStatus, EncounterHospitalizationDischargeDisposition, };
//# sourceMappingURL=Encounter.d.ts.map