{"version":3,"sources":["../src/domain.ts","../src/canonical-json.ts","../src/signing.ts","../src/policy.ts","../src/payer-agent.ts"],"names":["_signature","unsigned","Effect","nodeSign","nodeVerify","base"],"mappings":"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","file":"payer-agent.mjs","sourcesContent":["import { Data, Effect, Schema } from \"effect\";\n\nconst NonEmptyStringSchema = Schema.String.pipe(Schema.nonEmptyString());\n\nconst isIsoDateString = (value: string): boolean => {\n  const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n  if (!match) {\n    return false;\n  }\n\n  const [, year, month, day] = match;\n  const parsed = new Date(`${value}T00:00:00.000Z`);\n  return (\n    parsed.getUTCFullYear() === Number(year) &&\n    parsed.getUTCMonth() + 1 === Number(month) &&\n    parsed.getUTCDate() === Number(day)\n  );\n};\n\nconst IsoDateStringSchema = Schema.String.pipe(\n  Schema.filter(\n    (value) => isIsoDateString(value) || \"must be a valid ISO date string\"\n  )\n);\n\nconst UnitsSchema = Schema.Number.pipe(Schema.int(), Schema.positive());\nconst NpiSchema = Schema.String.pipe(Schema.pattern(/^\\d{10}$/));\nconst TinSchema = Schema.String.pipe(Schema.pattern(/^\\d{2}-\\d{7}$/));\n\nexport const SupportingInfoSchema = Schema.Struct({\n  id: NonEmptyStringSchema,\n  value: NonEmptyStringSchema,\n  source: Schema.Literal(\"chart\", \"patient\", \"payer\", \"external\")\n});\n\nexport type SupportingInfo = typeof SupportingInfoSchema.Type;\n\nexport const SupportingInfoListSchema = Schema.Array(SupportingInfoSchema);\n\nexport const decodeSupportingInfoList = (\n  input: unknown\n): Effect.Effect<ReadonlyArray<SupportingInfo>, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(SupportingInfoListSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-evidence\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-evidence\",\n          detail\n        })\n      )\n    )\n  );\n\nexport const DocumentationRequirementSchema = Schema.Struct({\n  id: NonEmptyStringSchema,\n  description: NonEmptyStringSchema,\n  questionnaire: NonEmptyStringSchema\n});\n\nexport type DocumentationRequirement =\n  typeof DocumentationRequirementSchema.Type;\n\nexport const AuthorizationRequestSchema = Schema.Struct({\n  patient: Schema.Struct({\n    memberId: NonEmptyStringSchema,\n    dob: IsoDateStringSchema\n  }),\n  provider: Schema.Struct({\n    npi: NpiSchema,\n    tin: TinSchema\n  }),\n  service: Schema.Struct({\n    code: NonEmptyStringSchema,\n    codeSystem: NonEmptyStringSchema,\n    diagnosis: Schema.Array(NonEmptyStringSchema),\n    placeOfService: NonEmptyStringSchema,\n    requestedStart: IsoDateStringSchema,\n    units: UnitsSchema,\n    urgency: Schema.Literal(\"standard\", \"expedited\")\n  }),\n  supportingInfo: Schema.Array(SupportingInfoSchema)\n});\n\nexport type AuthorizationRequest = typeof AuthorizationRequestSchema.Type;\n\nexport type ProtocolErrorKind =\n  | \"validation\"\n  | \"transport\"\n  | \"workflow\"\n  | \"payer\";\n\nexport type ProtocolErrorReason =\n  | \"invalid-request\"\n  | \"invalid-evidence\"\n  | \"invalid-determination\"\n  | \"invalid-terminal-determination\"\n  | \"invalid-resume-token\"\n  | \"invalid-subscription-event\"\n  | \"unknown-subscription\"\n  | \"subscription-timeout\"\n  | \"evidence-required\"\n  | \"evidence-missing-requirements\"\n  | \"evidence-collection-failed\"\n  | \"max-steps-exceeded\"\n  | \"policy-evaluation-failed\"\n  | \"policy-review-failed\"\n  | \"http-error\"\n  | \"http-timeout\"\n  | \"http-request-failed\"\n  | \"missing-base-url\"\n  | \"smart-auth-configuration-invalid\"\n  | \"smart-configuration-failed\"\n  | \"smart-token-request-failed\"\n  | \"smart-token-response-invalid\"\n  | \"transport-authorize-failed\"\n  | \"transport-resume-failed\"\n  | \"transport-await-failed\"\n  | \"transport-audit-failed\"\n  | \"transport-verify-failed\"\n  | \"transport-capabilities-failed\"\n  | (string & {});\n\n/**\n * Structured protocol failure raised by the SDK and Effect services.\n *\n * @example\n * try {\n *   await client.request(request);\n * } catch (error) {\n *   if (error instanceof ProtocolError && error.kind === \"validation\") {\n *     console.error(error.reason, error.detail);\n *   }\n * }\n */\nexport class ProtocolError extends Data.TaggedError(\"ProtocolError\")<{\n  readonly reason: ProtocolErrorReason;\n  readonly kind?: ProtocolErrorKind;\n  readonly detail?: unknown;\n  readonly requestId?: string;\n}> {\n  override get message(): string {\n    const kind = this.kind ? `${this.kind}: ` : \"\";\n    return `${kind}${this.reason}`;\n  }\n}\n\nexport const decodeAuthorizationRequest = (\n  input: unknown\n): Effect.Effect<AuthorizationRequest, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(AuthorizationRequestSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-request\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-request\",\n          detail\n        })\n      )\n    )\n  );\n\nexport type DeterminationStatus =\n  | \"approved\"\n  | \"denied\"\n  | \"info-needed\"\n  | \"pended\"\n  | \"error\";\n\nexport type NextAction =\n  | \"none\"\n  | \"attach-evidence\"\n  | \"await-payer\"\n  | \"appeal\"\n  | \"contact-payer\";\n\nexport type PendingReason =\n  | \"human-review\"\n  | \"payer-processing\"\n  | \"external-records\";\n\nexport type DeterminationBy = \"rules\" | \"clinical-reviewer\" | null;\n\nexport interface SignatureReceipt {\n  readonly alg: \"EdDSA\";\n  readonly format: \"detached-json\";\n  readonly keyId: string;\n  readonly issuedAt: string;\n  readonly requestHash: string;\n  readonly payloadHash: string;\n  readonly nonce: string;\n  readonly signature: string;\n}\n\nexport interface X278Capabilities {\n  readonly protocol: \"x278\";\n  readonly implementation: string;\n  readonly endpoints: {\n    readonly authorize: string;\n    readonly resume: string;\n    readonly awaitDetermination: string;\n    readonly auditLog?: string;\n    readonly verify?: string;\n  };\n  readonly signing?: {\n    readonly alg: SignatureReceipt[\"alg\"];\n    readonly publicKeyPem?: string;\n  };\n}\n\nexport const SignatureReceiptSchema = Schema.Struct({\n  alg: Schema.Literal(\"EdDSA\"),\n  format: Schema.Literal(\"detached-json\"),\n  keyId: Schema.String,\n  issuedAt: Schema.String,\n  requestHash: Schema.String,\n  payloadHash: Schema.String,\n  nonce: Schema.String,\n  signature: Schema.String\n});\n\nexport interface DeterminationBase {\n  readonly authId: string;\n  readonly status: DeterminationStatus;\n  readonly nextAction: NextAction;\n  readonly ruleSetVersion: string;\n  readonly expiresAt: string | null;\n  readonly determinationBy: DeterminationBy;\n}\n\nexport interface ApprovedDetermination extends DeterminationBase {\n  readonly status: \"approved\";\n  readonly nextAction: \"none\";\n  readonly authNumber: string;\n  readonly approvedUnits: number;\n  readonly validFrom: string;\n  readonly validThrough: string;\n  readonly determinationBy: \"rules\" | \"clinical-reviewer\";\n  readonly signature: SignatureReceipt;\n}\n\nexport const ApprovedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"approved\"),\n  nextAction: Schema.Literal(\"none\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Literal(\"rules\", \"clinical-reviewer\"),\n  authNumber: Schema.String,\n  approvedUnits: UnitsSchema,\n  validFrom: IsoDateStringSchema,\n  validThrough: IsoDateStringSchema,\n  signature: SignatureReceiptSchema\n});\n\nexport type UnsignedApprovedDetermination = Omit<\n  ApprovedDetermination,\n  \"signature\"\n>;\n\nexport interface DeniedDetermination extends DeterminationBase {\n  readonly status: \"denied\";\n  readonly nextAction: \"appeal\";\n  readonly reasonCode: string;\n  readonly reasonText: string;\n  readonly appealPath: string;\n  readonly determinationBy: \"rules\" | \"clinical-reviewer\";\n  readonly signature: SignatureReceipt;\n}\n\nexport const DeniedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"denied\"),\n  nextAction: Schema.Literal(\"appeal\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Literal(\"rules\", \"clinical-reviewer\"),\n  reasonCode: Schema.String,\n  reasonText: Schema.String,\n  appealPath: Schema.String,\n  signature: SignatureReceiptSchema\n});\n\nexport type UnsignedDeniedDetermination = Omit<DeniedDetermination, \"signature\">;\n\nexport type UnsignedTerminalDetermination =\n  | UnsignedApprovedDetermination\n  | UnsignedDeniedDetermination;\n\nexport interface InfoNeededDetermination extends DeterminationBase {\n  readonly status: \"info-needed\";\n  readonly nextAction: \"attach-evidence\";\n  readonly documentationRequired: ReadonlyArray<DocumentationRequirement>;\n  readonly resumeToken: string;\n  readonly determinationBy: null;\n}\n\nexport const InfoNeededDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"info-needed\"),\n  nextAction: Schema.Literal(\"attach-evidence\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Null,\n  documentationRequired: Schema.Array(DocumentationRequirementSchema),\n  resumeToken: Schema.String\n});\n\nexport interface PendedDetermination extends DeterminationBase {\n  readonly status: \"pended\";\n  readonly nextAction: \"await-payer\";\n  readonly pendingReason: PendingReason;\n  readonly subscription: string;\n  readonly determinationBy: \"clinical-reviewer\" | null;\n}\n\nexport const PendedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"pended\"),\n  nextAction: Schema.Literal(\"await-payer\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.NullOr(Schema.Literal(\"clinical-reviewer\")),\n  pendingReason: Schema.Literal(\n    \"human-review\",\n    \"payer-processing\",\n    \"external-records\"\n  ),\n  subscription: Schema.String\n});\n\nexport interface ErrorDetermination extends DeterminationBase {\n  readonly status: \"error\";\n  readonly nextAction: \"contact-payer\";\n  readonly reasonCode: string;\n  readonly reasonText: string;\n  readonly determinationBy: null;\n}\n\nexport const ErrorDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"error\"),\n  nextAction: Schema.Literal(\"contact-payer\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Null,\n  reasonCode: Schema.String,\n  reasonText: Schema.String\n});\n\nexport type TerminalDetermination =\n  | ApprovedDetermination\n  | DeniedDetermination;\n\nexport type NonTerminalDetermination =\n  | InfoNeededDetermination\n  | PendedDetermination;\n\nexport type Determination =\n  | TerminalDetermination\n  | NonTerminalDetermination\n  | ErrorDetermination;\n\nexport const TerminalDeterminationSchema = Schema.Union(\n  ApprovedDeterminationSchema,\n  DeniedDeterminationSchema\n);\n\nexport const DeterminationSchema = Schema.Union(\n  ApprovedDeterminationSchema,\n  DeniedDeterminationSchema,\n  InfoNeededDeterminationSchema,\n  PendedDeterminationSchema,\n  ErrorDeterminationSchema\n);\n\nexport const decodeDetermination = (\n  input: unknown\n): Effect.Effect<Determination, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(DeterminationSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-determination\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-determination\",\n          detail\n        })\n      )\n    )\n  );\n\nexport const decodeTerminalDetermination = (\n  input: unknown\n): Effect.Effect<TerminalDetermination, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(TerminalDeterminationSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-terminal-determination\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-terminal-determination\",\n          detail\n        })\n      )\n    )\n  );\n\nexport interface AuditRecord {\n  readonly authId: string;\n  readonly status: TerminalDetermination[\"status\"];\n  readonly requestHash: string;\n  readonly determinationHash: string;\n  readonly signatureKeyId: string;\n  readonly appendedAt: string;\n}\n","export const canonicalize = (value: unknown): string => {\n  if (value === null || typeof value !== \"object\") {\n    return JSON.stringify(value);\n  }\n\n  if (Array.isArray(value)) {\n    return `[${value.map((item) => canonicalize(item)).join(\",\")}]`;\n  }\n\n  const record = value as Record<string, unknown>;\n  return `{${Object.keys(record)\n    .filter((key) => record[key] !== undefined)\n    .sort()\n    .map((key) => `${JSON.stringify(key)}:${canonicalize(record[key])}`)\n    .join(\",\")}}`;\n};\n","import {\n  createHash,\n  generateKeyPairSync,\n  sign as nodeSign,\n  verify as nodeVerify\n} from \"node:crypto\";\nimport { Effect } from \"effect\";\nimport { canonicalize } from \"./canonical-json.js\";\nimport type {\n  AuthorizationRequest,\n  SignatureReceipt,\n  TerminalDetermination,\n  UnsignedTerminalDetermination\n} from \"./domain.js\";\n\nexport interface PayerKeyPair {\n  readonly keyId: string;\n  readonly privateKey: unknown;\n  readonly publicKeyPem: string;\n}\n\nexport const sha256 = (value: string): string =>\n  createHash(\"sha256\").update(value).digest(\"hex\");\n\nexport const requestHash = (request: AuthorizationRequest): string =>\n  sha256(canonicalize(request));\n\nconst withoutSignature = (\n  determination: TerminalDetermination\n): UnsignedTerminalDetermination => {\n  if (determination.status === \"approved\") {\n    const { signature: _signature, ...unsigned } = determination;\n    return unsigned;\n  }\n\n  const { signature: _signature, ...unsigned } = determination;\n  return unsigned;\n};\n\nconst signedPayload = (\n  request: AuthorizationRequest,\n  determination: UnsignedTerminalDetermination,\n  receipt: Pick<SignatureReceipt, \"issuedAt\" | \"keyId\" | \"nonce\">\n) =>\n  canonicalize({\n    determination,\n    issuedAt: receipt.issuedAt,\n    keyId: receipt.keyId,\n    nonce: receipt.nonce,\n    requestHash: requestHash(request)\n  });\n\nexport const generatePayerKeyPair = (keyId: string): PayerKeyPair => {\n  const { privateKey, publicKey } = generateKeyPairSync(\"ed25519\");\n  return {\n    keyId,\n    privateKey,\n    publicKeyPem: publicKey.export({ format: \"pem\", type: \"spki\" }) as string\n  };\n};\n\nexport const signDetermination = (\n  request: AuthorizationRequest,\n  determination: UnsignedTerminalDetermination,\n  keyPair: PayerKeyPair\n): Effect.Effect<SignatureReceipt> =>\n  Effect.sync(() => {\n    const receiptBase = {\n      issuedAt: new Date().toISOString(),\n      keyId: keyPair.keyId,\n      nonce: crypto.randomUUID()\n    };\n    const payload = signedPayload(request, determination, receiptBase);\n    const signature = nodeSign(\n      null,\n      Buffer.from(payload),\n      keyPair.privateKey as Parameters<typeof nodeSign>[2]\n    );\n\n    return {\n      alg: \"EdDSA\",\n      format: \"detached-json\",\n      ...receiptBase,\n      requestHash: requestHash(request),\n      payloadHash: sha256(payload),\n      signature: signature.toString(\"base64url\")\n    };\n  });\n\nexport const verifyDetermination = (\n  request: AuthorizationRequest,\n  determination: TerminalDetermination,\n  publicKeyPem: string\n): boolean => {\n  const unsigned = withoutSignature(determination);\n  const payload = signedPayload(request, unsigned, determination.signature);\n\n  if (requestHash(request) !== determination.signature.requestHash) {\n    return false;\n  }\n\n  if (sha256(payload) !== determination.signature.payloadHash) {\n    return false;\n  }\n\n  return nodeVerify(\n    null,\n    Buffer.from(payload),\n    publicKeyPem,\n    Buffer.from(determination.signature.signature, \"base64url\")\n  );\n};\n\nexport const determinationHash = (\n  determination: TerminalDetermination\n): string => sha256(canonicalize(determination));\n","import { Effect } from \"effect\";\nimport type {\n  AuthorizationRequest,\n  DocumentationRequirement,\n  InfoNeededDetermination,\n  PendedDetermination,\n  UnsignedApprovedDetermination,\n  UnsignedTerminalDetermination\n} from \"./domain.js\";\nimport { ProtocolError } from \"./domain.js\";\n\nexport type X278PolicyDecision =\n  | UnsignedTerminalDetermination\n  | InfoNeededDetermination\n  | PendedDetermination;\n\nexport interface X278PolicyEvaluationContext {\n  readonly authId: string;\n  readonly ruleSetVersion: string;\n  readonly now: Date;\n  readonly authNumber: (authId: string) => string;\n  readonly addDays: (date: string, days: number) => string;\n  readonly daysFromNow: (days: number) => string;\n  readonly questionnaireUrl: (id: string) => string;\n  readonly createResumeToken: () => string;\n  readonly createSubscription: (authId: string) => string;\n}\n\nexport interface X278PolicyReviewContext extends X278PolicyEvaluationContext {\n  readonly subscription: string;\n}\n\nexport interface X278PolicyAdapter {\n  readonly ruleSetVersion: string;\n  readonly evaluate: (\n    request: AuthorizationRequest,\n    context: X278PolicyEvaluationContext\n  ) =>\n    | X278PolicyDecision\n    | Promise<X278PolicyDecision>\n    | Effect.Effect<X278PolicyDecision, ProtocolError>;\n  readonly review?: (\n    request: AuthorizationRequest,\n    context: X278PolicyReviewContext\n  ) =>\n    | UnsignedTerminalDetermination\n    | Promise<UnsignedTerminalDetermination>\n    | Effect.Effect<UnsignedTerminalDetermination, ProtocolError>;\n}\n\nconst defaultRuleSetVersion = \"backwork/reference-medical-policy@2026.1\";\n\nconst daysFrom = (base: Date, days: number): string =>\n  new Date(base.getTime() + days * 24 * 60 * 60 * 1000).toISOString();\n\nconst addDays = (date: string, days: number): string => {\n  const parsed = new Date(`${date}T00:00:00.000Z`);\n  parsed.setUTCDate(parsed.getUTCDate() + days);\n  return parsed.toISOString().slice(0, 10);\n};\n\nconst defaultAuthNumber = (authId: string): string =>\n  `BW-${authId.slice(0, 8).toUpperCase()}`;\n\nconst defaultQuestionnaireUrl = (id: string): string =>\n  `https://backwork.example/fhir/Questionnaire/${id}`;\n\nconst referenceRequirements: ReadonlyArray<DocumentationRequirement> = [\n  {\n    id: \"conservative-tx-6wk\",\n    description: \"Evidence of at least six weeks of conservative treatment\",\n    questionnaire: defaultQuestionnaireUrl(\"conservative-tx-6wk\")\n  },\n  {\n    id: \"weight-bearing-xray\",\n    description: \"Recent weight-bearing knee x-ray report\",\n    questionnaire: defaultQuestionnaireUrl(\"weight-bearing-xray\")\n  }\n];\n\nconst missingRequirements = (\n  request: AuthorizationRequest,\n  requirements: ReadonlyArray<DocumentationRequirement>\n): ReadonlyArray<DocumentationRequirement> => {\n  const supplied = new Set(request.supportingInfo.map((item) => item.id));\n  return requirements.filter((requirement) => !supplied.has(requirement.id));\n};\n\nconst base = (authId: string, ruleSetVersion: string) => ({\n  authId,\n  ruleSetVersion,\n  expiresAt: null\n});\n\nexport const createPolicyEvaluationContext = (\n  authId: string,\n  ruleSetVersion: string,\n  now: Date = new Date()\n): X278PolicyEvaluationContext => ({\n  authId,\n  ruleSetVersion,\n  now,\n  authNumber: defaultAuthNumber,\n  addDays,\n  daysFromNow: (days) => daysFrom(now, days),\n  questionnaireUrl: defaultQuestionnaireUrl,\n  createResumeToken: () => `rt_${crypto.randomUUID()}`,\n  createSubscription: (id) => `x278://subscription/${id}`\n});\n\nexport const createReferencePolicyAdapter = (\n  ruleSetVersion = defaultRuleSetVersion\n): X278PolicyAdapter => ({\n  ruleSetVersion,\n  evaluate: (request, context) => {\n    if (request.service.code === \"99999\") {\n      return {\n        ...base(context.authId, context.ruleSetVersion),\n        status: \"denied\",\n        nextAction: \"appeal\",\n        determinationBy: \"rules\",\n        reasonCode: \"not-covered\",\n        reasonText:\n          \"The requested service is not covered by the reference policy.\",\n        appealPath: \"https://backwork.example/appeals\"\n      };\n    }\n\n    if (request.service.code === \"63650\") {\n      return {\n        ...base(context.authId, context.ruleSetVersion),\n        status: \"pended\",\n        nextAction: \"await-payer\",\n        pendingReason: \"human-review\",\n        subscription: context.createSubscription(context.authId),\n        expiresAt: context.daysFromNow(7),\n        determinationBy: \"clinical-reviewer\"\n      };\n    }\n\n    if (request.service.code === \"27447\") {\n      const missing = missingRequirements(request, referenceRequirements);\n      if (missing.length > 0) {\n        return {\n          ...base(context.authId, context.ruleSetVersion),\n          status: \"info-needed\",\n          nextAction: \"attach-evidence\",\n          documentationRequired: missing,\n          resumeToken: context.createResumeToken(),\n          expiresAt: context.daysFromNow(7),\n          determinationBy: null\n        };\n      }\n    }\n\n    return {\n      ...base(context.authId, context.ruleSetVersion),\n      status: \"approved\",\n      nextAction: \"none\",\n      authNumber: context.authNumber(context.authId),\n      approvedUnits: request.service.units,\n      validFrom: request.service.requestedStart,\n      validThrough: context.addDays(request.service.requestedStart, 90),\n      determinationBy: \"rules\"\n    };\n  },\n  review: (request, context): UnsignedApprovedDetermination => ({\n    ...base(context.authId, context.ruleSetVersion),\n    status: \"approved\",\n    nextAction: \"none\",\n    authNumber: context.authNumber(context.authId),\n    approvedUnits: request.service.units,\n    validFrom: request.service.requestedStart,\n    validThrough: context.addDays(request.service.requestedStart, 90),\n    determinationBy: \"clinical-reviewer\"\n  })\n});\n\nexport const resolvePolicyDecision = <A>(\n  result: A | Promise<A> | Effect.Effect<A, ProtocolError>,\n  reason: \"policy-evaluation-failed\" | \"policy-review-failed\"\n): Effect.Effect<A, ProtocolError> => {\n  if (Effect.isEffect(result)) {\n    return result;\n  }\n\n  if (result instanceof Promise) {\n    return Effect.tryPromise({\n      try: () => result,\n      catch: (detail) =>\n        detail instanceof ProtocolError\n          ? detail\n          : new ProtocolError({ kind: \"payer\", reason, detail })\n    });\n  }\n\n  return Effect.succeed(result);\n};\n","import { Context, Effect, Layer, Ref } from \"effect\";\nimport type {\n  AuditRecord,\n  AuthorizationRequest,\n  Determination,\n  SupportingInfo,\n  TerminalDetermination,\n  UnsignedTerminalDetermination\n} from \"./domain.js\";\nimport {\n  ProtocolError,\n  decodeAuthorizationRequest,\n  decodeSupportingInfoList\n} from \"./domain.js\";\nimport {\n  determinationHash,\n  generatePayerKeyPair,\n  requestHash,\n  signDetermination,\n  verifyDetermination\n} from \"./signing.js\";\nimport {\n  type X278PolicyAdapter,\n  type X278PolicyDecision,\n  createPolicyEvaluationContext,\n  createReferencePolicyAdapter,\n  resolvePolicyDecision\n} from \"./policy.js\";\n\ninterface PendingAuth {\n  readonly request: AuthorizationRequest;\n  readonly resumeToken: string;\n}\n\ninterface PendedAuth {\n  readonly request: AuthorizationRequest;\n  readonly authId: string;\n}\n\ninterface PayerState {\n  readonly pending: Map<string, PendingAuth>;\n  readonly pended: Map<string, PendedAuth>;\n  readonly audit: Array<AuditRecord>;\n}\n\nexport interface PayerAgentService {\n  readonly authorize: (\n    request: unknown\n  ) => Effect.Effect<Determination, ProtocolError>;\n  readonly resume: (\n    authId: string,\n    resumeToken: string,\n    evidence: unknown\n  ) => Effect.Effect<Determination, ProtocolError>;\n  readonly awaitDetermination: (\n    subscription: string\n  ) => Effect.Effect<TerminalDetermination, ProtocolError>;\n  readonly auditLog: Effect.Effect<ReadonlyArray<AuditRecord>>;\n  readonly publicKeyPem: string;\n  readonly verify: (\n    request: AuthorizationRequest,\n    determination: TerminalDetermination\n  ) => Effect.Effect<boolean>;\n}\n\nexport class PayerAgent extends Context.Tag(\"PayerAgent\")<\n  PayerAgent,\n  PayerAgentService\n>() {}\n\nexport interface PayerAgentOptions {\n  readonly policy?: X278PolicyAdapter;\n  readonly keyId?: string;\n}\n\nconst mergeEvidence = (\n  request: AuthorizationRequest,\n  evidence: ReadonlyArray<SupportingInfo>\n): AuthorizationRequest => ({\n  ...request,\n  supportingInfo: [...request.supportingInfo, ...evidence]\n});\n\nconst attachSignature = (\n  determination: UnsignedTerminalDetermination,\n  signature: TerminalDetermination[\"signature\"]\n): TerminalDetermination => {\n  if (determination.status === \"approved\") {\n    return { ...determination, signature };\n  }\n\n  return { ...determination, signature };\n};\n\nexport const makePayerAgent = (\n  options: PayerAgentOptions = {}\n): Effect.Effect<PayerAgentService> =>\n  Effect.gen(function* () {\n    const policy = options.policy ?? createReferencePolicyAdapter();\n    const stateRef = yield* Ref.make<PayerState>({\n      pending: new Map(),\n      pended: new Map(),\n      audit: []\n    });\n    const keyPair = generatePayerKeyPair(\n      options.keyId ?? \"did:web:backwork.example#x278-dev\"\n    );\n\n    const appendAudit = (\n      request: AuthorizationRequest,\n      determination: TerminalDetermination\n    ) =>\n      Effect.gen(function* () {\n        const state = yield* Ref.get(stateRef);\n        state.audit.push({\n          authId: determination.authId,\n          status: determination.status,\n          requestHash: requestHash(request),\n          determinationHash: determinationHash(determination),\n          signatureKeyId: determination.signature.keyId,\n          appendedAt: new Date().toISOString()\n        });\n      });\n\n    const signAndRecord = (\n      request: AuthorizationRequest,\n      determination: UnsignedTerminalDetermination\n    ): Effect.Effect<TerminalDetermination> =>\n      signDetermination(request, determination, keyPair).pipe(\n        Effect.map((signature) => attachSignature(determination, signature)),\n        Effect.tap((signed) => appendAudit(request, signed))\n      );\n\n    const materialize = (\n      request: AuthorizationRequest,\n      determination: X278PolicyDecision\n    ): Effect.Effect<Determination> => {\n      if (\n        determination.status === \"approved\" ||\n        determination.status === \"denied\"\n      ) {\n        return signAndRecord(request, determination);\n      }\n\n      return Effect.succeed(determination);\n    };\n\n    const authorize = (raw: unknown) =>\n      Effect.gen(function* () {\n        const request = yield* decodeAuthorizationRequest(raw);\n        const authId = crypto.randomUUID().replaceAll(\"-\", \"\");\n        const context = createPolicyEvaluationContext(\n          authId,\n          policy.ruleSetVersion\n        );\n        const result = yield* resolvePolicyDecision(\n          policy.evaluate(request, context),\n          \"policy-evaluation-failed\"\n        );\n        const state = yield* Ref.get(stateRef);\n\n        if (result.status === \"info-needed\") {\n          state.pending.set(authId, {\n            request,\n            resumeToken: result.resumeToken\n          });\n        }\n\n        if (result.status === \"pended\") {\n          state.pended.set(result.subscription, { authId, request });\n        }\n\n        return yield* materialize(request, result);\n      });\n\n    const resume = (\n      authId: string,\n      resumeToken: string,\n      evidence: unknown\n    ) =>\n      Effect.gen(function* () {\n        const state = yield* Ref.get(stateRef);\n        const pending = state.pending.get(authId);\n\n        if (!pending || pending.resumeToken !== resumeToken) {\n          return yield* Effect.fail(\n            new ProtocolError({\n              kind: \"payer\",\n              reason: \"invalid-resume-token\"\n            })\n          );\n        }\n\n        const decodedEvidence = yield* decodeSupportingInfoList(evidence);\n        const request = mergeEvidence(pending.request, decodedEvidence);\n        const context = createPolicyEvaluationContext(\n          authId,\n          policy.ruleSetVersion\n        );\n        const result = yield* resolvePolicyDecision(\n          policy.evaluate(request, context),\n          \"policy-evaluation-failed\"\n        );\n\n        if (result.status !== \"info-needed\") {\n          state.pending.delete(authId);\n        } else {\n          state.pending.set(authId, {\n            request,\n            resumeToken: result.resumeToken\n          });\n        }\n\n        return yield* materialize(request, result);\n      });\n\n    const awaitDetermination = (subscription: string) =>\n      Effect.gen(function* () {\n        const state = yield* Ref.get(stateRef);\n        const pended = state.pended.get(subscription);\n\n        if (!pended) {\n          return yield* Effect.fail(\n            new ProtocolError({\n              kind: \"payer\",\n              reason: \"unknown-subscription\"\n            })\n          );\n        }\n\n        state.pended.delete(subscription);\n\n        const context = {\n          ...createPolicyEvaluationContext(\n            pended.authId,\n            policy.ruleSetVersion\n          ),\n          subscription\n        };\n        const determination = yield* resolvePolicyDecision(\n          policy.review\n            ? policy.review(pended.request, context)\n            : createReferencePolicyAdapter(policy.ruleSetVersion).review!(\n                pended.request,\n                context\n              ),\n          \"policy-review-failed\"\n        );\n\n        return yield* signAndRecord(pended.request, determination);\n      });\n\n    return {\n      authorize,\n      resume,\n      awaitDetermination,\n      auditLog: Ref.get(stateRef).pipe(Effect.map((state) => [...state.audit])),\n      publicKeyPem: keyPair.publicKeyPem,\n      verify: (request, determination) =>\n        Effect.sync(() =>\n          verifyDetermination(request, determination, keyPair.publicKeyPem)\n        )\n    };\n  });\n\nexport const makeReferencePayerAgent: Effect.Effect<PayerAgentService> =\n  makePayerAgent();\n\nexport const PayerAgentLive = Layer.effect(PayerAgent, makeReferencePayerAgent);\n"]}