Current section
Files
Jump to
Current section
Files
lib/medplum/workflows/billing.ex
defmodule Medplum.Workflows.Billing do
@moduledoc """
Billing and claim workflow helpers.
"""
alias Medplum.Client
alias Medplum.Resources.Account
alias Medplum.Resources.ChargeItem
alias Medplum.Resources.ChargeItemDefinition
alias Medplum.Resources.Claim
alias Medplum.Resources.ClaimResponse
alias Medplum.Resources.CoverageEligibilityRequest
alias Medplum.Resources.CoverageEligibilityResponse
@spec claims_for_patient(Client.t(), String.t(), map()) :: Medplum.result()
def claims_for_patient(%Client{} = client, patient, params \\ %{}) do
Claim.search_by_patient(client, patient, params)
end
@spec claims_for_encounter(Client.t(), String.t(), map()) :: Medplum.result()
def claims_for_encounter(%Client{} = client, encounter, params \\ %{}) do
Claim.search_by_encounter(client, encounter, params)
end
@spec claims_for_status(Client.t(), String.t(), map()) :: Medplum.result()
def claims_for_status(%Client{} = client, status, params \\ %{}) do
Claim.search_by_status(client, status, params)
end
@spec claim_responses_for_claim(Client.t(), String.t(), map()) :: Medplum.result()
def claim_responses_for_claim(%Client{} = client, claim, params \\ %{}) do
ClaimResponse.search_by_claim(client, claim, params)
end
@spec charge_items_for_account(Client.t(), String.t(), map()) :: Medplum.result()
def charge_items_for_account(%Client{} = client, account, params \\ %{}) do
ChargeItem.search_by_account(client, account, params)
end
@spec charge_items_for_encounter(Client.t(), String.t(), map()) :: Medplum.result()
def charge_items_for_encounter(%Client{} = client, encounter, params \\ %{}) do
ChargeItem.search_by_encounter(client, encounter, params)
end
@spec accounts_for_patient(Client.t(), String.t(), map()) :: Medplum.result()
def accounts_for_patient(%Client{} = client, patient, params \\ %{}) do
Account.search_by_patient(client, patient, params)
end
@spec eligibility_requests_for_patient(Client.t(), String.t(), map()) :: Medplum.result()
def eligibility_requests_for_patient(%Client{} = client, patient, params \\ %{}) do
CoverageEligibilityRequest.search_by_patient(client, patient, params)
end
@spec eligibility_responses_for_patient(Client.t(), String.t(), map()) :: Medplum.result()
def eligibility_responses_for_patient(%Client{} = client, patient, params \\ %{}) do
CoverageEligibilityResponse.search_by_patient(client, patient, params)
end
@spec export_claim(Client.t(), String.t()) :: Medplum.result() | {:ok, Medplum.async_result()}
def export_claim(%Client{} = client, claim_id) when is_binary(claim_id) do
Medplum.operation(client, {"Claim", claim_id}, "export", %{}, method: :get)
end
@spec export_claim(Client.t(), map(), keyword()) ::
Medplum.result() | {:ok, Medplum.async_result()}
def export_claim(%Client{} = client, params, opts) when is_map(params) and is_list(opts) do
Medplum.operation(client, "Claim", "export", params, Keyword.put_new(opts, :method, :post))
end
@spec submit_claim_to_stedi(Client.t(), String.t(), map()) ::
Medplum.result() | {:ok, Medplum.async_result()}
def submit_claim_to_stedi(%Client{} = client, claim_id, params \\ %{})
when is_binary(claim_id) and is_map(params) do
Medplum.operation(client, {"Claim", claim_id}, "stedi-submit-claim", params, method: :post)
end
@spec submit_claim_to_candid(Client.t(), String.t(), map()) ::
Medplum.result() | {:ok, Medplum.async_result()}
def submit_claim_to_candid(%Client{} = client, claim_id, params \\ %{})
when is_binary(claim_id) and is_map(params) do
Medplum.operation(client, {"Claim", claim_id}, "candid-submit-claim", params, method: :post)
end
@spec apply_charge_item_definition(Client.t(), String.t(), map()) ::
Medplum.result() | {:ok, Medplum.async_result()}
def apply_charge_item_definition(%Client{} = client, definition_id, params)
when is_binary(definition_id) and is_map(params) do
ChargeItemDefinition.apply_definition(client, definition_id, params)
end
end