Circle V2 API Docs
    Preparing search index...

    Module @repo/services

    @repo/services

    Domain service classes for business logic orchestration. Services extend BaseService from @repo/base-service, so their perform() methods return Safe<T> results. The package currently includes services for chart review and other domain operations.

    Use a service when logic should be decoupled from tRPC (or other transports): the same orchestration can be called from a router, a script, a job, or tests without importing @repo/trpc.

    Services are a good fit when you want to:

    • Compose repos and other services (e.g. load rows, group them, score them) in one place instead of growing procedure handlers.
    • Reuse behavior across entrypoints without copy-pasting.
    • Test in isolation by mocking @repo/db (or peers) and calling perform() or the functionify export, without spinning up tRPC.

    tRPC procedures should stay thin: validate input, call the service, map Safe errors to TRPCError (or similar), and return result.data.

    %%{init:{"theme":"dark"}}%% graph TD services["@repo/services"] base_service["@repo/base-service"] safe["@repo/safe"] db["@repo/db"] typescript_config["@repo/typescript-config"] vitest_config["@repo/vitest-config"] services --> base_service services --> safe services --> db services -.-> typescript_config services -.-> vitest_config
    %%{init:{"theme":"default"}}%% graph TD services["@repo/services"] base_service["@repo/base-service"] safe["@repo/safe"] db["@repo/db"] typescript_config["@repo/typescript-config"] vitest_config["@repo/vitest-config"] services --> base_service services --> safe services --> db services -.-> typescript_config services -.-> vitest_config
    graph TD
      services["@repo/services"]
      base_service["@repo/base-service"]
      safe["@repo/safe"]
      db["@repo/db"]
      typescript_config["@repo/typescript-config"]
      vitest_config["@repo/vitest-config"]
      services --> base_service
      services --> safe
      services --> db
      services -.-> typescript_config
      services -.-> vitest_config
    import { listRecentPatientReviewRunsService } from "@repo/services/chart-review/listRecentPatientReviewRuns.service";
    import { runChartReviewService } from "@repo/services/chart-review/runChartReview.service";

    const recent = await listRecentPatientReviewRunsService({ patientId: "123" });
    if (recent.error) {
    // handle error
    }

    const chartReview = await runChartReviewService({ patientId: "123", templateId: 1 });
    if (chartReview.error) {
    // handle error
    }
    Script Description
    test Run Vitest with coverage
    test:watch Run Vitest in watch mode
    check-types Typecheck with tsc --noEmit

    Modules

    chart-review/auditRunScoring
    chart-review/auditRunScoring.service
    chart-review/auditRunScoring.service.test
    chart-review/bulkArchivePreview
    chart-review/bulkArchivePreview.service
    chart-review/enqueueChartReviewRuns
    chart-review/enqueueChartReviewRuns.service
    chart-review/enqueueChartReviewRuns.service.test
    chart-review/enqueueTriggeredChartReview
    chart-review/enqueueTriggeredChartReview.service
    chart-review/enqueueTriggeredChartReview.service.test
    chart-review/listPatientAuditRuns
    chart-review/listPatientAuditRuns.service
    chart-review/listPatientAuditRuns.service.test
    chart-review/listRecentPatientReviewRuns
    chart-review/listRecentPatientReviewRuns.service
    chart-review/listRecentPatientReviewRuns.service.test
    chart-review/resolveAuditRunSync
    chart-review/resolveAuditRunSync.service
    chart-review/resolveAuditRunSync.service.test
    chart-review/triggerPatientChartReview
    chart-review/triggerPatientChartReview.service
    chart-review/triggerPatientChartReview.service.test
    chart-review/triggerSessionValidations
    chart-review/triggerSessionValidations.service
    chart-review/triggerSessionValidations.service.test
    errors
    files/file-url-signer
    integrations
    integrations/syncActiveIntegrations
    integrations/syncActiveIntegrations
    integrations/syncAndRun
    integrations/syncAndRun
    integrations/syncEpisode
    integrations/syncEpisode
    integrations/syncEpisodeProgramStays
    integrations/syncEpisodeProgramStays
    integrations/syncFacilityLevelsOfCare
    integrations/syncFacilityLevelsOfCare
    integrations/syncFacilityPrograms
    integrations/syncFacilityPrograms
    integrations/syncIntegrationEpisodes
    integrations/syncIntegrationEpisodes
    integrations/syncPatientEpisodes
    integrations/syncPatientEpisodes
    integrations/updateFacilityWithIntegration
    integrations/updateFacilityWithIntegration
    inviteUser
    note-generation
    note-generation/createResponseFormat
    note-generation/createResponseFormat.test
    note-generation/formatStructuredResponse
    note-generation/formatStructuredResponse.test
    note-generation/generateNote
    note-generation/generateNote.service
    note-generation/generateNote.service.test
    note-generation/index
    note-generation/legacyTemplateConverters
    note-generation/lib/codeTypesFromTemplate
    note-generation/lib/loadNoteTemplate
    note-generation/modifyNote
    note-generation/modifyNote.service
    note-generation/modifyNote.service.test
    note-generation/prompts
    note-generation/prompts.test
    note-generation/sanitize
    note-generation/sanitize.test
    note-generation/sectionKey
    org-members/removeOrgMember
    org-members/updateOrgMember
    patient-charts
    patient-charts/index
    patient-charts/trigger-extend-ingestion
    patient-charts/trigger-extend-ingestion.service
    patient-charts/trigger-extend-ingestion.service.test
    patients/executePatientMerge
    patients/executePatientMerge.service
    patients/executePatientMerge.service.test
    patients/mergePatients
    patients/mergePatients.service
    patients/mergePatients.service.test
    patients/migratePatientPineconeVectors
    patients/migratePatientPineconeVectors.service
    patients/migratePatientPineconeVectors.service.test
    patients/patientMergePinecone.helpers
    patients/patientMergePinecone.helpers.test
    patients/resolvePatientMergeDirection
    resendInvite
    sendInviteEmail
    session-codes
    session-codes/generateSessionCodes
    session-codes/generateSessionCodes.service
    session-codes/generateSessionCodes.service.test
    session-codes/index
    session-codes/regenerateSessionCodes
    session-codes/regenerateSessionCodes.service
    session-codes/regenerateSessionCodes.service.test
    session-notes
    session-notes/generateAudioNote
    session-notes/generateAudioNote.service
    session-notes/generateTextNote.jobbable
    session-notes/index
    session-notes/processAssemblyAIWebhook
    session-notes/processAssemblyAIWebhook.service
    session-notes/processTextNote
    session-notes/processTextNote.service
    session-notes/processTextNote.service.test
    session-notes/regenerateNote
    session-notes/regenerateNote.service
    session-notes/regenerateNote.service.test
    session-notes/saveGeneratedSessionNote
    session-notes/saveGeneratedSessionNote.service
    session-notes/saveGeneratedSessionNote.service.test
    session-notes/updateSessionAiNote
    session-notes/updateSessionAiNote.service
    session-notes/updateSessionAiNote.service.test
    superadmin/endImpersonation
    superadmin/endImpersonation
    superadmin/getCurrentImpersonation
    superadmin/getCurrentImpersonation
    superadmin/startImpersonation
    superadmin/startImpersonation
    triggers/filterReadyTriggers.helpers
    triggers/filterReadyTriggers.helpers.test
    triggers/getReadyChartReviewJobs
    triggers/getReadyChartReviewJobs.service
    triggers/getReadyChartReviewJobs.service.test
    triggers/trigger-keys.helpers
    triggers/trigger-keys.helpers.test