Circle V2 API Docs
    Preparing search index...

    Clones ONE patient's chart-review subtree from the SOURCE database (the app's default db connection) into the persistent EVAL Supabase branch, ids PRESERVED, out-of-subtree FKs nulled and secrets scrubbed. Strictly read-from-source / write-to-branch, in three phases (see the helpers for the mechanics): read + validate the subtree, write it to the branch and episode- stamp the charts (when the patient has episodes), then copy the patient's Pinecone vectors into the eval_ namespaces. The result is one runnable patient on the branch.

    Runs as a background job (the copy can outlast a serverless request): enqueued via enqueueClonePatientToEvalService, executed by the clone-patient-to-eval queue route. The write path is insert-only and idempotent, so a retried attempt resumes whatever the failed one didn't reach. The result isn't persisted to job_executions (the UI polls status only) — the counts land in this job's structured logs.

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    config: JobConfig = ...
    serviceName: "ClonePatientToEvalJobbable"

    Stable, human-readable name for the service. Must be set explicitly on each subclass because this.constructor.name gets mangled by minification in production builds, which breaks tracing/observability span names.

    Accessors

    • get logger(): BaseLogger

      Returns BaseLogger

    • get name(): string

      Returns string

    Methods

    • Derive the queue retentionSeconds from the effective dedup TTL. The queue overloads retentionSeconds — it's BOTH the message lifetime AND the idempotency dedup window (min(retentionSeconds, 24h)). So:

      • take the intended dedup window (ttlHours·3600), capped at 24h (the window can't exceed it);
      • but never go below the message's worst-case time-to-complete (delaySeconds + every retry), else a short TTL would expire the message mid-retry — and the queue hard-rejects delaySeconds > retentionSeconds. ttlHours <= 0 means "no dedup" → undefined: the idempotency key is dropped (see performLater), so there's no dedup window to bound — this just leaves the queue's default message lifetime in place.

      Parameters

      • ttlHours: number
      • delaySeconds: number

      Returns number | undefined

    • Derive a deduplication key from the params. Return null to skip deduplication (every call enqueues).

      Parameters

      Returns string

    • Run the job with status tracking. Used by the queue handler. Errors propagate (not caught by safe()) so the RetryHandler can decide.

      parentSpanContext (the enqueuer's span, recovered from the queue envelope) is attached as a span LINK and the run span is started as a new trace root, so each job runs in its own trace rather than collapsing a fan-out into one unbounded trace.

      Parameters

      Returns Promise<void>

    • Optional hook for subclasses to attach extra non-PII span attributes derived from params. The returned attributes appear on the service.${serviceName} span (and, for jobs, on job.enqueue.* and job.run.* spans too).

      Safe ID-like keys on params (e.g. patientId, templateIds, limit, cursor) are already auto-extracted via toSpanAttributes("service.input", params) — you don't need to enumerate them here. Use this hook for derived/computed attributes (counts, flags, computed names) or for fields you've explicitly verified safe but that aren't in the global allowlist. Hook output overrides auto-extracted attributes on key collision.

      Safe by default: returns {} when not overridden. Only declare keys you've confirmed are non-PII. Never include emails, names, dob, free-text, etc.

      Parameters

      Returns Attributes

    • Optional hook for subclasses to attach extra non-PII span attributes derived from the successful service result. Only called when run resolves successfully; on error, the span is marked via markSpanError instead.

      Safe by default: returns {} when not overridden. Only declare keys you've confirmed are non-PII (e.g. counts, status flags, computed summaries). Never include emails, names, dob, free-text, etc.

      Parameters

      Returns Attributes