import { ATTACHMENT, CODEABLE_CONCEPT, EXTENSION, MULTI_RESOURCE, PERIOD, REFERENCE } from "../config";
import { ResourceMaster } from "../Interfaces";
import ResourceMain from "./ResourceMai";
interface BasedOn extends MULTI_RESOURCE {
    resource: "CarePlan" | "DeviceRequest" | "ImmunizationRecommendation" | "NutritionOrder" | "ServiceRequest" | "MedicationRequest";
}
interface PartOf extends MULTI_RESOURCE {
    resource: "MedicationAdministration" | "MedicationDispense" | "MedicationStatement" | "Procedure" | "Immunization" | "ImagingStudy";
}
declare const statusArray: readonly ["registered", "preliminary", "final", "amended"];
type status = typeof statusArray[number];
export interface Performer extends MULTI_RESOURCE {
    resource: "CareTeam" | "RelatedPerson" | "Practitioner" | "Organization" | "PractitionerRole" | "Patient";
}
export interface HasMember extends MULTI_RESOURCE {
    resource: "Observation" | "QuestionnaireResponse" | "MolecularSequence";
}
export interface SAMPLE_QUANTITY {
    value: number;
    unit?: string;
    system?: "http://unitsofmeasure.org";
    code?: string;
}
export interface QUANTITY extends Partial<SAMPLE_QUANTITY> {
    comparator?: "<" | "<=" | ">=" | ">";
}
export interface RANGE {
    low: SAMPLE_QUANTITY;
    high: SAMPLE_QUANTITY;
}
export interface RATIO {
    numerator: QUANTITY;
    denominator: QUANTITY;
}
export interface SAMPLE_DATA {
    origin: SAMPLE_QUANTITY;
    period: number;
    factor: number;
    lowerLimit: number;
    upperLimit: number;
    dimensions: number;
    data?: string;
}
export interface VALUE {
    valueQuantity?: QUANTITY;
    valueCodeableConcept?: CODEABLE_CONCEPT;
    valueString?: string;
    valueBoolean?: boolean;
    valueInteger?: number;
    valueRange?: RANGE;
    valueRatio?: RATIO;
    valueSampledData?: SAMPLE_DATA;
    valueTime?: string;
    valueDateTime?: string;
    valuePeriod?: PERIOD;
    valueReference?: REFERENCE;
}
type SingleValue = {
    valueQuantity: QUANTITY;
} | {
    valueCodeableConcept: CODEABLE_CONCEPT;
} | {
    valueString: string;
} | {
    valueBoolean: boolean;
} | {
    valueInteger: number;
} | {
    valueRange: RANGE;
} | {
    valueRatio: RATIO;
} | {
    valueSampledData: SAMPLE_DATA;
} | {
    valueTime: string;
} | {
    valueDateTime: string;
} | {
    valuePeriod: PERIOD;
};
export interface REFERENCE_RANGE {
    low?: SAMPLE_QUANTITY;
    high?: SAMPLE_QUANTITY;
    appliesTo?: CODEABLE_CONCEPT[];
    age?: RANGE;
    text?: string;
}
export interface SUPPORTING_INFO {
    sequence: number;
    category: CODEABLE_CONCEPT;
    code: CODEABLE_CONCEPT;
    "valueAttachment"?: ATTACHMENT;
    "valueReference"?: {
        "reference": `DocumentReference/${string}`;
    };
}
interface COMPONENT {
    id?: string;
    extension?: EXTENSION[];
    modifierExtension?: EXTENSION[];
    code: CODEABLE_CONCEPT;
    interpretation?: CODEABLE_CONCEPT[];
    valueQuantity?: QUANTITY;
    valueCodeableConcept?: CODEABLE_CONCEPT;
    valueString?: string;
    valueBoolean?: boolean;
    valueInteger?: number;
    valueRange?: RANGE;
    valueRatio?: RATIO;
    valueSampledData?: SAMPLE_DATA;
    valueTime?: string;
    valueDateTime?: string;
    valuePeriod?: PERIOD;
}
export interface OBSERVATION {
    id?: string;
    basedOn?: BasedOn[];
    partOf?: PartOf[];
    status: status;
    code: CODEABLE_CONCEPT;
    patientId: string;
    performer?: Performer[];
    /**  This is used when creating the resource (input) */
    value?: VALUE;
    /** This is used when converting the resource to an object (output) */
    valueWithType?: SingleValue;
    dataAbsentReason?: CODEABLE_CONCEPT;
    encounterId?: string;
    referenceRange?: REFERENCE_RANGE[];
    hasMember?: HasMember[];
    specimenId?: string;
    text: string;
    orgPanel?: any;
    effectiveDateTime?: string;
    effectivePeriod?: PERIOD;
    interpretation?: CODEABLE_CONCEPT[];
    bodySite?: CODEABLE_CONCEPT;
    component?: COMPONENT[];
    category?: CODEABLE_CONCEPT[];
}
export declare class Observation extends ResourceMain implements ResourceMaster {
    toHtml(): Promise<string>;
    getFHIR(options: OBSERVATION): any;
    convertFhirToObject(options: any): OBSERVATION;
    statusArray(): status[];
    bundlify(resource: any): any;
}
export {};
//# sourceMappingURL=Observation.d.ts.map