import { IIdentifier, IElement, IPeriod, IReference, ICodeableConcept, IContactPoint, IPractitionerRoleAvailableTime, IPractitionerRoleNotAvailable } from 'fhirtypes/dist/r4';
import { PractitionerRole } from '../../models';
import { DomainResourceBuilder, IBuildable } from '../base';
import { ExtractUnderscoreKeys } from '../../../core/commons/utils';
type PrimitiveExtensionFields = ExtractUnderscoreKeys<PractitionerRole>;
/**
 * @description Interface for chaining the building of a PractitionerRole
 * @interface IPractitionerRoleBuilder
 * @extends {IBuildable<PractitionerRole>}
 */
interface IPractitionerRoleBuilder extends IBuildable<PractitionerRole> {
    addIdentifier(value: IIdentifier): this;
    setActive(value: boolean): this;
    setPeriod(value: IPeriod): this;
    setPractitioner(value: IReference): this;
    setOrganization(value: IReference): this;
    addCode(value: ICodeableConcept): this;
    addSpecialty(value: ICodeableConcept): this;
    addLocation(value: IReference): this;
    addHealthcareService(value: IReference): this;
    addTelecom(value: IContactPoint): this;
    addAvailableTime(value: IPractitionerRoleAvailableTime): this;
    addNotAvailable(value: IPractitionerRoleNotAvailable): this;
    setAvailabilityExceptions(value: string): this;
    addEndpoint(value: IReference): this;
}
/**
 * @version R4 (v4.0.1)
 * @summary FHIR® Specification by HL7®
 * @description Class for building a PractitionerRole
 * @class PractitionerRoleBuilder
 * @extends {DomainResourceBuilder}
 * @implements {IPractitionerRoleBuilder}
 * @author Roberto Araneda Espinoza
 */
export declare class PractitionerRoleBuilder extends DomainResourceBuilder implements IPractitionerRoleBuilder {
    private readonly practitionerRole;
    constructor();
    /**
     * @description Sets the resource type to PractitionerRole
     * @param json - the json to parse
     * @returns {this}
     */
    fromJSON(json: unknown): this;
    /**
     * @description Adds a primitive extension to the element
     * @param param - the field to add the extension to
     * @param extension - the extension to add
     * @returns {this}
     * @example addPrimitiveExtension('_value', { value: 'test' })
     */
    addPrimitiveExtension(param: PrimitiveExtensionFields, extension: IElement): this;
    /**
     * @description Builds the model
     * @returns {PractitionerRole}
     */
    build(): PractitionerRole;
    /**
     * @description Adds a value to the identifier array
     * @description Business Identifiers that are specific to a role/location.
     * @param value - the value to add
     * @returns {this}
     */
    addIdentifier(value: IIdentifier): this;
    /**
     * @description Sets the active value
     * @description Whether this practitioner role record is in active use.
     * @param value - the value to set
     * @returns {this}
     */
    setActive(value: boolean): this;
    /**
     * @description Sets the period value
     * @description The period during which the person is authorized to act as a practitioner in these role(s) for the organization.
     * @param value - the value to set
     * @returns {this}
     */
    setPeriod(value: IPeriod): this;
    /**
     * @description Sets the practitioner value
     * @description Practitioner that is able to provide the defined services for the organization.
     * @param value - the value to set
     * @returns {this}
     */
    setPractitioner(value: IReference): this;
    /**
     * @description Sets the organization value
     * @description The organization where the Practitioner performs the roles associated.
     * @param value - the value to set
     * @returns {this}
     */
    setOrganization(value: IReference): this;
    /**
     * @description Adds a value to the code array
     * @description Roles which this practitioner is authorized to perform for the organization.
     * @param value - the value to add
     * @returns {this}
     */
    addCode(value: ICodeableConcept): this;
    /**
     * @description Adds a value to the specialty array
     * @description Specific specialty of the practitioner.
     * @param value - the value to add
     * @returns {this}
     */
    addSpecialty(value: ICodeableConcept): this;
    /**
     * @description Adds a value to the location array
     * @description The location(s) at which this practitioner provides care.
     * @param value - the value to add
     * @returns {this}
     */
    addLocation(value: IReference): this;
    /**
     * @description Adds a value to the healthcareService array
     * @description The list of healthcare services that this worker provides for this role's Organization/Location(s).
     * @param value - the value to add
     * @returns {this}
     */
    addHealthcareService(value: IReference): this;
    /**
     * @description Adds a value to the telecom array
     * @description Contact details that are specific to the role/location/service.
     * @param value - the value to add
     * @returns {this}
     */
    addTelecom(value: IContactPoint): this;
    /**
     * @description Adds a value to the availableTime array
     * @description A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.
     * @param value - the value to add
     * @returns {this}
     */
    addAvailableTime(value: IPractitionerRoleAvailableTime): this;
    /**
     * @description Adds a value to the notAvailable array
     * @description The practitioner is not available or performing this role during this period of time due to the provided reason.
     * @param value - the value to add
     * @returns {this}
     */
    addNotAvailable(value: IPractitionerRoleNotAvailable): this;
    /**
     * @description Sets the availabilityExceptions value
     * @description A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
     * @param value - the value to set
     * @returns {this}
     */
    setAvailabilityExceptions(value: string): this;
    /**
     * @description Adds a value to the endpoint array
     * @description Technical endpoints providing access to services operated for the practitioner with this role.
     * @param value - the value to add
     * @returns {this}
     */
    addEndpoint(value: IReference): this;
}
export {};
