Circle V2 API Docs
    Preparing search index...
    type DryRunFormFillParams = {
        actingUserId: UserId;
        annotationIds?: readonly string[];
        chosenContacts?: Readonly<Record<string, string>>;
        entityId: EntityId;
        formId: FormId;
        includeEmr?: boolean;
        maxAiFields?: number;
        patientId: PatientId;
        renderAnswers?: readonly DryRunSuppliedAnswer[];
        renderPdf?: boolean;
        runnerConfig?: FormFillingConfigOverrides;
        selectedDocumentIds?: readonly PatientChartId[];
        selectedSessionIds?: readonly SessionId[];
        treatmentEpisodeId?: TreatmentEpisodeId;
    }
    Index

    Properties

    actingUserId: UserId

    The acting user: form visibility is per-user, so this is half the authorization key.

    annotationIds?: readonly string[]

    Exactly which AI fields to answer, by annotation id: the chunking lever, walking DryRunFormFillResult.aiFieldIds a slice at a time. Present, maxAiFields is ignored. Ids that are not answerable AI fields are dropped rather than errors — the caller's plan may be one save older than the template. Deterministic fields resolve on EVERY chunk, so the caller dedupes by annotation id.

    chosenContacts?: Readonly<Record<string, string>>

    contact_type_id -> contact_id, as the user chose; authorized exactly as a real fill authorizes it.

    entityId: EntityId

    The caller's organization from authentication: the authorization boundary, never the request body.

    formId: FormId
    includeEmr?: boolean

    Also open the patient's EMR namespace to retrieval.

    maxAiFields?: number

    AI fields to answer, in template order. Clamped to MAX_DRY_RUN_AI_FIELD_CAP.

    patientId: PatientId
    renderAnswers?: readonly DryRunSuppliedAnswer[]

    Render-only: draw these caller-supplied answers onto the template and return the bytes, running no lane — how a chunked session gets ONE PDF carrying every chunk's answers. Untrusted input. Takes precedence over annotationIds; the tRPC layer refuses both together.

    renderPdf?: boolean

    Draw the answers onto the template and return the bytes. On by default: geometry is what is being tested.

    Runner levers, passed in because the caller owns the flag provider and @repo/ai-agents never reads flags.

    selectedDocumentIds?: readonly PatientChartId[]

    The patient's charts the AI lane may read. Empty means EMR-only (or nothing).

    selectedSessionIds?: readonly SessionId[]

    The patient's completed session notes the AI lane may quote, authorized exactly as a real fill authorizes them.

    treatmentEpisodeId?: TreatmentEpisodeId

    Scopes patient-context resolution to one episode.