Skip to content

Prior Authorization

Overview

Some procedures require prior authorization from the insurance payer before they can be performed. This workflow checks clinical necessity and submits the authorization request.

Prior Auth Evaluation

Contract

evaluate_prior_auth

Evaluate whether a procedure requires prior authorization and if so, request it. Steps: 1. Fetch patient record and insurance coverage 2. Check clinical guidelines for medical necessity 3. If required, submit prior auth request to payer

Inputs
ParameterTypeDefault
patient_idstr
procedure_codestr
Output
returnPriorAuthResult
PriorAuthResult Final prior authorization evaluation result.
ParameterTypeDefault
status *str
reasonstr | NoneNone
auth_idstr | NoneNone
valid_fromstr | NoneNone
valid_untilstr | NoneNone
approved_unitsint | NoneNone
clinical_guidelinestr | NoneNone

Execution Flow

Sequence diagram — evaluate_prior_auth

sequenceDiagram
    participant evaluate_prior_auth
    participant CheckClinicalGuidelines as ClinicalDB / CheckClinicalGuidelines
    participant FetchPatientRecord as EHR / FetchPatientRecord
    participant SubmitPriorAuth as InsurancePayer / SubmitPriorAuth
    participant VerifyInsuranceCoverage as InsurancePayer / VerifyInsuranceCoverage
    evaluate_prior_auth->>+FetchPatientRecord: patient_id
    FetchPatientRecord-->>-evaluate_prior_auth: response
    evaluate_prior_auth->>+VerifyInsuranceCoverage: patient.member_id, procedure_code
    VerifyInsuranceCoverage-->>-evaluate_prior_auth: response
    evaluate_prior_auth->>+CheckClinicalGuidelines: procedure_code, patient.conditions
    CheckClinicalGuidelines-->>-evaluate_prior_auth: response
    evaluate_prior_auth->>+SubmitPriorAuth: {'patient_id': patient_id, 'member_id': patient.member_id, 'procedure_code': procedure_code, 'clinical_justification': clinical.guideline, 'evidence_level': clinical.evidence_level}
    SubmitPriorAuth-->>-evaluate_prior_auth: response

Source Code

def evaluate_prior_auth(patient_id: str, procedure_code: str) -> PriorAuthResult:
    """Evaluate whether a procedure requires prior authorization and if so, request it.

    Steps:
    1. Fetch patient record and insurance coverage
    2. Check clinical guidelines for medical necessity
    3. If required, submit prior auth request to payer
    """
    patient = FetchPatientRecord().call(patient_id)
    coverage = VerifyInsuranceCoverage().call(patient.member_id, procedure_code)

    if not coverage.active:
        return PriorAuthResult(
            status="DENIED",
            reason="Insurance not active",
        )

    clinical = CheckClinicalGuidelines().call(procedure_code, patient.conditions)

    if not clinical.medically_necessary:
        return PriorAuthResult(
            status="DENIED",
            reason="Procedure not deemed medically necessary",
            clinical_guideline=clinical.guideline,
        )

    auth_result = SubmitPriorAuth().call({
        "patient_id": patient_id,
        "member_id": patient.member_id,
        "procedure_code": procedure_code,
        "clinical_justification": clinical.guideline,
        "evidence_level": clinical.evidence_level,
    })

    return PriorAuthResult(
        status=auth_result.status.upper(),
        auth_id=auth_result.auth_id,
        valid_from=auth_result.valid_from,
        valid_until=auth_result.valid_until,
        approved_units=auth_result.approved_units,
        clinical_guideline=clinical.guideline,
    )

Try it Live

Playground — evaluate_prior_auth

Evaluate whether a procedure requires prior authorization and if so, request it. Steps: 1. Fetch patient record and insurance coverage 2. Check clinical guidelines for medical necessity 3. If required, submit prior auth request to payer

View source code
def evaluate_prior_auth(patient_id: str, procedure_code: str) -> PriorAuthResult:
    """Evaluate whether a procedure requires prior authorization and if so, request it.

    Steps:
    1. Fetch patient record and insurance coverage
    2. Check clinical guidelines for medical necessity
    3. If required, submit prior auth request to payer
    """
    patient = FetchPatientRecord().call(patient_id)
    coverage = VerifyInsuranceCoverage().call(patient.member_id, procedure_code)

    if not coverage.active:
        return PriorAuthResult(
            status="DENIED",
            reason="Insurance not active",
        )

    clinical = CheckClinicalGuidelines().call(procedure_code, patient.conditions)

    if not clinical.medically_necessary:
        return PriorAuthResult(
            status="DENIED",
            reason="Procedure not deemed medically necessary",
            clinical_guideline=clinical.guideline,
        )

    auth_result = SubmitPriorAuth().call({
        "patient_id": patient_id,
        "member_id": patient.member_id,
        "procedure_code": procedure_code,
        "clinical_justification": clinical.guideline,
        "evidence_level": clinical.evidence_level,
    })

    return PriorAuthResult(
        status=auth_result.status.upper(),
        auth_id=auth_result.auth_id,
        valid_from=auth_result.valid_from,
        valid_until=auth_result.valid_until,
        approved_units=auth_result.approved_units,
        clinical_guideline=clinical.guideline,
    )
Mock configuration
Test cases
  • No test cases saved yet.

External Services

Insurance Payer — Prior Auth Submission

class SubmitPriorAuth(ExternalService):
    """Submit a prior authorization request to the payer (Blackbox)."""

    component_name = "InsurancePayer"

    def execute(self, auth_request: dict) -> PriorAuthApproval:
        pass  # type: ignore[return-value]

    def mock(self, auth_request: dict) -> MockResponse:
        return MockResponse(data=PriorAuthApproval(
            auth_id="PA-2024-78901",
            status="approved",
            valid_from="2024-01-15",
            valid_until="2024-04-15",
            approved_units=12,
        ))

Clinical Guidelines Database

class CheckClinicalGuidelines(ExternalService):
    """Check clinical necessity against evidence-based guidelines (Blackbox)."""

    component_name = "ClinicalDB"

    def execute(self, procedure_code: str, conditions: list) -> ClinicalGuideline:
        pass  # type: ignore[return-value]

    def mock(self, procedure_code: str, conditions: list) -> MockResponse:
        return MockResponse(data=ClinicalGuideline(
            medically_necessary=True,
            guideline="AHA-2023-HBP-MGMT",
            evidence_level="A",
            notes="Recommended for patients with uncontrolled hypertension",
        ))