patient_id is often empty.
This table’s columns and relationships are shown in the Hosted Database schema.
claim_id is populated on patient payments only, and is always empty on payer payments. This is by design rather than a gap in the data: one payer payment routinely settles many claims at once, so Elation Billing attributes payer payments to claims through financial_transaction instead. Joining payment to claim on claim_id therefore returns patient payments alone. Use financial_transaction to attribute payer payments to claims.claimmd_era_id is populated on payer payments only, and reaches era_matched_adjustment one-to-many. A single ERA covers every charge the payer adjudicated, so one payment matches an average of roughly 26 adjustment rows and several thousand in the worst case. Aggregate era_matched_adjustment first and join the result, rather than joining row for row, or the payment amounts repeat once per adjustment line and any total built on them is inflated.- Total payments received by practice or date
- Insurance vs patient payments (
pay_type) - Applied vs unapplied payment amounts
- Co-pays (
is_copay) - Claim-level attribution of payer payments, through
financial_transaction - The notes recorded against a payment, and who wrote them, by joining payment_note on
payment_id
Payments by practice and month
Unapplied payment balances
Payments with their ERA adjustment totals
Summarizes the ERA behind each payer payment. The adjustment detail is rolled up to one row per ERA and practice before the join, which keeps the result at one row per payment and leavesamount safe to total. Only adjustment_amount is summed, because it is the one money column that is genuinely per-adjustment-line.
Payer payments attributed to claims
Splits each payer payment across the claims it settled, usingfinancial_transaction as the bridge. This is the route to claim-level attribution for payer payments, since their claim_id is always empty.
Note the type = 'payment' filter. financial_transaction also carries adjustment, allowed, and balance_transfer rows against the same claim, so totaling amount without filtering on type mixes write-offs and contracted-rate entries in with the money actually received, and the result can exceed the payment itself.
patient_name is null wherever financial_transaction.patient_id has no matching patient record. A filter on patient_name excludes those rows.