import * as yup from 'yup';
import { FhirCodeableConcept, FhirQuantity, FhirTransactionBundle } from '@tamanu/shared/services/fhirTypes';
import { FhirResource } from './Resource';
import type { InitOptions, Models } from '../../types/model';
import type { LabRequest } from '../../models/LabRequest';
export declare class FhirObservation extends FhirResource {
    basedOn: {
        type: string;
        reference: string;
    }[];
    status: string;
    code: Record<string, any>;
    method?: FhirCodeableConcept;
    valueQuantity?: FhirQuantity;
    valueCodeableConcept?: FhirCodeableConcept;
    valueString?: string;
    referenceRange?: Array<{
        low?: {
            value?: number;
        };
        high?: {
            value?: number;
        };
    }>;
    static initModel(options: InitOptions, models: Models): void;
    static CAN_DO: Set<string>;
    static get INTAKE_SCHEMA(): import("yup/lib/object").OptionalObjectSchema<{
        basedOn: import("yup/lib/array").RequiredArraySchema<import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>, import("yup/lib/types").AnyObject, any[] | undefined>;
        status: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
        code: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        method: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        valueQuantity: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        valueCodeableConcept: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        valueString: yup.StringSchema<string | undefined, import("yup/lib/types").AnyObject, string | undefined>;
        referenceRange: yup.ArraySchema<import("yup/lib/object").OptionalObjectSchema<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }>>, import("yup/lib/types").AnyObject, import("yup/lib/object").TypeOfShape<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }>[] | undefined, import("yup/lib/object").AssertsShape<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }>[] | undefined>;
    }, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<{
        basedOn: import("yup/lib/array").RequiredArraySchema<import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>, import("yup/lib/types").AnyObject, any[] | undefined>;
        status: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
        code: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        method: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        valueQuantity: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        valueCodeableConcept: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        valueString: yup.StringSchema<string | undefined, import("yup/lib/types").AnyObject, string | undefined>;
        referenceRange: yup.ArraySchema<import("yup/lib/object").OptionalObjectSchema<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }>>, import("yup/lib/types").AnyObject, import("yup/lib/object").TypeOfShape<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }>[] | undefined, import("yup/lib/object").AssertsShape<{
            low: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
            high: import("yup/lib/mixed").MixedSchema<any, import("yup/lib/types").AnyObject, any>;
        }>[] | undefined>;
    }>>;
    static hydrateRawResourceFromBundle(bundle: FhirTransactionBundle, rawResource: Record<string, any>): Record<string, any>;
    static hydrateBasedOn(bundle: FhirTransactionBundle, rawResource: Record<string, any>): Record<string, any>;
    pushUpstream(): Promise<any>;
    getLabTestForObservation(labRequest: LabRequest): Promise<any>;
    getLabTestMethodId(): Promise<string | undefined>;
    getValue(): any;
}
//# sourceMappingURL=FhirObservation.d.ts.map