implement P6 bibliography: col tags, bib sync, generate models, lineage (fix #22, fix #23, fix #24, fix #25)

- dev/scripts/seed_col_tags.py: seed 138 col: tags for core, input_layer,
  and cclf schemas from CMS data dictionaries and Tuva documentation
- src/cli/bib.py: wire sync (apply col: tags as DuckDB column comments),
  tag (list/search tags), query (search items) commands
- src/cli/generate.py: wire models command with --sync/--no-sync flag
  to apply column comments before regenerating enriched Pydantic models
- src/aco/lake/lineage.py: build table-level DAG from pipeline Exprs,
  column-level lineage from Field metadata, export as DOT/Mermaid
- src/api/routes/lineage.py: GET /lineage, /lineage/{table},
  /lineage/export/mermaid, /lineage/export/dot endpoints
- fix import sorting in generated table models (ruff I001)
This commit is contained in:
kert
2026-03-12 17:25:30 -04:00
parent 8fd907a549
commit 816403811d
49 changed files with 1699 additions and 895 deletions

BIN
data/bib.sqlite Normal file

Binary file not shown.

View File

@@ -0,0 +1,275 @@
"""Seed col: tags for core, input_layer, and cclf schemas.
Creates a bib store item for column documentation, then attaches
col:schema.table.column=description tags for high-value tables.
Usage:
uv run python dev/scripts/seed_col_tags.py [--dry-run]
"""
from __future__ import annotations
import argparse
import sys
from bib import connect
from bib.item import Source
from bib.tag import Tag
# ── Known column descriptions from CMS data dictionaries ──────────
# CCLF field descriptions (from CCLF Information Packet)
CCLF_DESCRIPTIONS: dict[str, dict[str, str]] = {
"cclf.cclf1": {
"cur_clm_uniq_id": "Current claim unique identifier",
"clm_line_num": "Claim line number",
"bene_mbi_id": "Beneficiary Medicare Beneficiary Identifier",
"bene_hic_num": "Beneficiary Health Insurance Claim number",
"clm_type_cd": "Claim type code",
"clm_from_dt": "Claim service from date",
"clm_thru_dt": "Claim service through date",
"clm_bill_fac_type_cd": "Claim bill facility type code",
"clm_bill_clsfctn_cd": "Claim bill classification code",
"prvdr_oscar_num": "Provider OSCAR number",
"clm_fed_type_srvc_cd": "Federal type of service code",
"clm_pos_cd": "Claim place of service code",
"clm_line_from_dt": "Claim line service from date",
"clm_line_thru_dt": "Claim line service through date",
"clm_line_hcpcs_cd": "Claim line HCPCS code",
"clm_line_srvc_unit_qty": "Claim line service unit quantity",
"clm_line_cvrd_pd_amt": "Claim line covered paid amount",
"hcpcs_1_mdfr_cd": "First HCPCS modifier code",
"hcpcs_2_mdfr_cd": "Second HCPCS modifier code",
"clm_line_dgns_cd": "Claim line diagnosis code",
"clm_tot_chrg_amt": "Total charge amount for the claim",
},
"cclf.cclf2": {
"cur_clm_uniq_id": "Current claim unique identifier",
"clm_line_num": "Claim line number",
"bene_mbi_id": "Beneficiary Medicare Beneficiary Identifier",
"clm_dgns_1_cd": "Claim diagnosis code 1",
"clm_dgns_2_cd": "Claim diagnosis code 2",
"clm_dgns_3_cd": "Claim diagnosis code 3",
"clm_dgns_4_cd": "Claim diagnosis code 4",
"clm_dgns_5_cd": "Claim diagnosis code 5",
},
"cclf.cclf5": {
"cur_clm_uniq_id": "Current claim unique identifier",
"clm_line_num": "Claim line number",
"bene_mbi_id": "Beneficiary Medicare Beneficiary Identifier",
"clm_from_dt": "Claim service from date",
"clm_thru_dt": "Claim service through date",
"clm_line_hcpcs_cd": "Claim line HCPCS code",
"clm_pos_cd": "Place of service code",
"clm_line_srvc_unit_qty": "Claim line service unit quantity",
"clm_prmry_pyr_cd": "Primary payer code",
"payto_prvdr_npi_num": "Pay-to provider NPI",
"ordrg_prvdr_npi_num": "Ordering provider NPI",
},
"cclf.cclf8": {
"bene_mbi_id": "Beneficiary Medicare Beneficiary Identifier",
"bene_hic_num": "Beneficiary Health Insurance Claim number",
"bene_fips_state_cd": "Beneficiary FIPS state code",
"bene_fips_cnty_cd": "Beneficiary FIPS county code",
"bene_zip_cd": "Beneficiary ZIP code",
"bene_dob": "Beneficiary date of birth",
"bene_sex_cd": "Beneficiary sex code",
"bene_race_cd": "Beneficiary race code",
"bene_mdcr_stus_cd": "Beneficiary Medicare status code",
"bene_dual_stus_cd": "Beneficiary dual eligibility status code",
"bene_death_dt": "Beneficiary date of death",
"bene_entlmt_rsn_curr": "Current entitlement reason code",
},
}
# Core model descriptions (from Tuva data model)
CORE_DESCRIPTIONS: dict[str, dict[str, str]] = {
"core.patient": {
"patient_id": "Unique patient identifier",
"sex": "Patient biological sex",
"birth_date": "Patient date of birth",
"death_date": "Patient date of death",
"death_flag": "Whether patient is deceased",
"race": "Patient race",
"zip_code": "Patient ZIP code",
"state": "Patient state of residence",
"county": "Patient county of residence",
"latitude": "Patient geocoded latitude",
"longitude": "Patient geocoded longitude",
},
"core.encounter": {
"encounter_id": "Unique encounter identifier",
"patient_id": "Patient associated with encounter",
"encounter_type": "Type of encounter (acute inpatient, outpatient, etc.)",
"encounter_start_date": "Encounter admission or start date",
"encounter_end_date": "Encounter discharge or end date",
"admit_source_code": "Source of admission code",
"admit_type_code": "Type of admission code",
"discharge_disposition_code": "Discharge disposition code",
"ms_drg_code": "Medicare Severity DRG code",
"apr_drg_code": "All-Patient Refined DRG code",
"facility_id": "Facility where encounter occurred",
"attending_provider_id": "Attending provider identifier",
"paid_amount": "Total paid amount for encounter",
"charge_amount": "Total charge amount for encounter",
},
"core.medical_claim": {
"claim_id": "Unique claim identifier",
"claim_line_number": "Line number within the claim",
"patient_id": "Patient associated with the claim",
"claim_type": "Type of claim (institutional, professional)",
"claim_start_date": "Claim service start date",
"claim_end_date": "Claim service end date",
"place_of_service_code": "Place of service code",
"hcpcs_code": "HCPCS/CPT procedure code",
"revenue_center_code": "Revenue center code",
"diagnosis_code_1": "Primary diagnosis code (ICD-10)",
"paid_amount": "Amount paid for claim line",
"charge_amount": "Amount charged for claim line",
"billing_npi": "Billing provider NPI",
"rendering_npi": "Rendering provider NPI",
"facility_npi": "Facility NPI",
},
"core.condition": {
"condition_id": "Unique condition identifier",
"patient_id": "Patient with the condition",
"condition_type": "Type of condition record",
"code_type": "Code system (icd-10-cm, snomed-ct)",
"code": "Condition diagnosis code",
"onset_date": "Date condition was first recorded",
"resolved_date": "Date condition was resolved",
"source_model": "Source system that recorded the condition",
},
"core.eligibility": {
"patient_id": "Patient identifier",
"enrollment_start_date": "Enrollment period start date",
"enrollment_end_date": "Enrollment period end date",
"payer": "Insurance payer name",
"payer_type": "Payer category (medicare, medicaid, commercial)",
"plan": "Insurance plan name",
"dual_status_code": "Dual eligibility status code",
"medicare_status_code": "Medicare entitlement status code",
"original_reason_entitlement_code": "Original reason for Medicare entitlement",
},
"core.pharmacy_claim": {
"claim_id": "Unique pharmacy claim identifier",
"patient_id": "Patient identifier",
"dispensing_date": "Date prescription was dispensed",
"ndc_code": "National Drug Code",
"quantity": "Quantity dispensed",
"days_supply": "Number of days supply",
"paid_amount": "Amount paid for prescription",
"prescribing_provider_npi": "Prescribing provider NPI",
"dispensing_provider_npi": "Dispensing pharmacy NPI",
},
}
# Input layer descriptions
INPUT_LAYER_DESCRIPTIONS: dict[str, dict[str, str]] = {
"input_layer.medical_claim": {
"claim_id": "Source claim identifier",
"claim_line_number": "Line number within the claim",
"patient_id": "Patient identifier from source system",
"claim_start_date": "Claim service start date",
"claim_end_date": "Claim service end date",
"hcpcs_code": "HCPCS/CPT procedure code",
"place_of_service_code": "Place of service code",
"diagnosis_code_1": "Primary diagnosis code",
"paid_amount": "Paid amount from source",
},
"input_layer.eligibility": {
"patient_id": "Patient identifier from source system",
"enrollment_start_date": "Coverage start date",
"enrollment_end_date": "Coverage end date",
"payer": "Payer name from source",
"payer_type": "Payer type classification",
},
"input_layer.pharmacy_claim": {
"claim_id": "Source pharmacy claim identifier",
"patient_id": "Patient identifier",
"dispensing_date": "Date prescription was dispensed",
"ndc_code": "National Drug Code from source",
"quantity": "Quantity dispensed",
"days_supply": "Number of days supply",
},
}
def seed_tags(dry_run: bool = False) -> dict[str, int]:
"""Seed col: tags into the bib store.
Returns dict with counts: created, skipped, errors.
"""
store = connect()
# Find or create the documentation item to attach tags to
items = store.list_items(query="column documentation")
if items:
item_key = items[0].key
else:
item = Source(
key="",
title="Column Documentation Tags",
url="",
abstract="Container item for col: namespace tags that document table columns.",
tags=["module:aco"],
)
item_key = store.create(item, tags=["module:aco"], collection="")
print(f"Created documentation item: {item_key}")
# Merge all description dicts
all_descriptions: dict[str, dict[str, str]] = {}
all_descriptions.update(CCLF_DESCRIPTIONS)
all_descriptions.update(CORE_DESCRIPTIONS)
all_descriptions.update(INPUT_LAYER_DESCRIPTIONS)
counts = {"created": 0, "skipped": 0, "errors": 0}
# Get existing col: tags
existing_tags = {t["name"] for t in store.list_tags(namespace="col")}
for table_ref, columns in sorted(all_descriptions.items()):
for col_name, description in sorted(columns.items()):
tag = Tag.col(f"{table_ref}.{col_name}", description)
label = tag.label
if label in existing_tags:
counts["skipped"] += 1
continue
if dry_run:
print(f" would add: {label}")
counts["created"] += 1
continue
try:
store.add_tag(item_key, label)
counts["created"] += 1
except Exception as e:
print(f" ERROR: {label}: {e}", file=sys.stderr)
counts["errors"] += 1
return counts
def main() -> None:
parser = argparse.ArgumentParser(
description="Seed col: tags for column descriptions"
)
parser.add_argument(
"--dry-run", action="store_true", help="Report without creating"
)
args = parser.parse_args()
counts = seed_tags(dry_run=args.dry_run)
verb = "Would create" if args.dry_run else "Created"
print(
f"\n{verb} {counts['created']} tags, "
f"skipped {counts['skipped']}, "
f"errors {counts['errors']}"
)
if __name__ == "__main__":
main()

101
src/aco/lake/lineage.py Normal file
View File

@@ -0,0 +1,101 @@
"""Column-level lineage graph from Expr inputs and Field metadata.
Walks all pipeline Expr objects to build a table-level DAG, then
inspects Field metadata (json_schema_extra.source) for column-level
lineage.
Usage::
from aco.lake.lineage import build_lineage
graph = build_lineage()
graph.table_deps("readmissions.encounter")
graph.column_lineage("readmissions.encounter", "readmission_flag")
graph.to_mermaid()
"""
from __future__ import annotations
import inspect
from typing import Any
from aco.pipe.runner import _param_to_table
class LineageGraph:
"""Table and column lineage graph."""
def __init__(self) -> None:
self.table_edges: dict[str, list[str]] = {} # output -> [inputs]
self.column_sources: dict[str, dict[str, str]] = {} # table -> {col: source}
def table_deps(self, table_ref: str) -> list[str]:
"""Return direct input tables for a given output table."""
return self.table_edges.get(table_ref, [])
def all_tables(self) -> list[str]:
"""Return all tables in the lineage graph."""
tables = set(self.table_edges.keys())
for inputs in self.table_edges.values():
tables.update(inputs)
return sorted(tables)
def column_lineage(self, table_ref: str, column: str) -> str | None:
"""Return source reference for a column, if annotated."""
return self.column_sources.get(table_ref, {}).get(column)
def to_dot(self) -> str:
"""Export lineage as DOT graph."""
lines = ["digraph lineage {", " rankdir=LR;"]
for output, inputs in sorted(self.table_edges.items()):
for inp in inputs:
lines.append(f' "{inp}" -> "{output}";')
lines.append("}")
return "\n".join(lines)
def to_mermaid(self) -> str:
"""Export lineage as Mermaid flowchart."""
lines = ["graph LR"]
for output, inputs in sorted(self.table_edges.items()):
safe_out = output.replace(".", "_")
for inp in inputs:
safe_in = inp.replace(".", "_")
lines.append(f" {safe_in}[{inp}] --> {safe_out}[{output}]")
return "\n".join(lines)
def to_dict(self) -> dict[str, Any]:
"""Serialize to JSON-friendly dict."""
return {
"tables": self.all_tables(),
"edges": self.table_edges,
"column_sources": self.column_sources,
}
def build_lineage() -> LineageGraph:
"""Build lineage graph from all registered pipelines."""
from aco.pipe import registry
graph = LineageGraph()
for pipeline in registry.values():
for expr in pipeline.exprs:
output_name = expr.name
fn = expr.fn
# Table-level: function parameters → input tables
sig = inspect.signature(fn)
inputs = [_param_to_table(p) for p in sig.parameters]
graph.table_edges[output_name] = inputs
# Column-level: Field metadata with source annotation
if hasattr(expr, "output_cls") and expr.output_cls is not None:
col_sources: dict[str, str] = {}
for field_name, field_info in expr.output_cls.model_fields.items():
extra = field_info.json_schema_extra
if isinstance(extra, dict) and "source" in extra:
col_sources[field_name] = extra["source"]
if col_sources:
graph.column_sources[output_name] = col_sources
return graph

View File

@@ -16,7 +16,7 @@ class AhrqMeasuresIntPqi01Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi01Exclusions(SQLTable):
@@ -29,7 +29,7 @@ class AhrqMeasuresIntPqi01Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi01Num(SQLTable):
@@ -42,7 +42,7 @@ class AhrqMeasuresIntPqi01Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi03Denom(SQLTable):
@@ -55,7 +55,7 @@ class AhrqMeasuresIntPqi03Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi03Exclusions(SQLTable):
@@ -68,7 +68,7 @@ class AhrqMeasuresIntPqi03Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi03Num(SQLTable):
@@ -81,7 +81,7 @@ class AhrqMeasuresIntPqi03Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi05Denom(SQLTable):
@@ -94,7 +94,7 @@ class AhrqMeasuresIntPqi05Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi05Exclusions(SQLTable):
@@ -107,7 +107,7 @@ class AhrqMeasuresIntPqi05Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi05Num(SQLTable):
@@ -120,7 +120,7 @@ class AhrqMeasuresIntPqi05Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi07Denom(SQLTable):
@@ -133,7 +133,7 @@ class AhrqMeasuresIntPqi07Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi07Exclusions(SQLTable):
@@ -146,7 +146,7 @@ class AhrqMeasuresIntPqi07Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi07Num(SQLTable):
@@ -159,7 +159,7 @@ class AhrqMeasuresIntPqi07Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi08Denom(SQLTable):
@@ -172,7 +172,7 @@ class AhrqMeasuresIntPqi08Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi08Exclusions(SQLTable):
@@ -185,7 +185,7 @@ class AhrqMeasuresIntPqi08Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi08Num(SQLTable):
@@ -198,7 +198,7 @@ class AhrqMeasuresIntPqi08Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi11Denom(SQLTable):
@@ -211,7 +211,7 @@ class AhrqMeasuresIntPqi11Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi11Exclusions(SQLTable):
@@ -224,7 +224,7 @@ class AhrqMeasuresIntPqi11Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi11Num(SQLTable):
@@ -237,7 +237,7 @@ class AhrqMeasuresIntPqi11Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi12Denom(SQLTable):
@@ -250,7 +250,7 @@ class AhrqMeasuresIntPqi12Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi12Exclusions(SQLTable):
@@ -263,7 +263,7 @@ class AhrqMeasuresIntPqi12Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi12Num(SQLTable):
@@ -276,7 +276,7 @@ class AhrqMeasuresIntPqi12Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi14Denom(SQLTable):
@@ -289,7 +289,7 @@ class AhrqMeasuresIntPqi14Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi14Exclusions(SQLTable):
@@ -302,7 +302,7 @@ class AhrqMeasuresIntPqi14Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi14Num(SQLTable):
@@ -315,7 +315,7 @@ class AhrqMeasuresIntPqi14Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi15Denom(SQLTable):
@@ -328,7 +328,7 @@ class AhrqMeasuresIntPqi15Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi15Exclusions(SQLTable):
@@ -341,7 +341,7 @@ class AhrqMeasuresIntPqi15Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi15Num(SQLTable):
@@ -354,7 +354,7 @@ class AhrqMeasuresIntPqi15Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi16Denom(SQLTable):
@@ -367,7 +367,7 @@ class AhrqMeasuresIntPqi16Denom(SQLTable):
person_id: str | None = None
data_source: str | None = None
age: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi16Exclusions(SQLTable):
@@ -380,7 +380,7 @@ class AhrqMeasuresIntPqi16Exclusions(SQLTable):
data_source: str | None = None
exclusion_reason: str | None = None
exclusion_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqi16Num(SQLTable):
@@ -393,7 +393,7 @@ class AhrqMeasuresIntPqi16Num(SQLTable):
person_id: str | None = None
year_number: int | None = None
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqiSharedExclusionMissingDates(SQLTable):
@@ -404,7 +404,7 @@ class AhrqMeasuresIntPqiSharedExclusionMissingDates(SQLTable):
encounter_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqiSharedExclusionMissingGender(SQLTable):
@@ -415,7 +415,7 @@ class AhrqMeasuresIntPqiSharedExclusionMissingGender(SQLTable):
data_source: str | None = None
person_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqiSharedExclusionMissingPrimaryDx(SQLTable):
@@ -426,7 +426,7 @@ class AhrqMeasuresIntPqiSharedExclusionMissingPrimaryDx(SQLTable):
encounter_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqiSharedExclusionTransfer(SQLTable):
@@ -437,7 +437,7 @@ class AhrqMeasuresIntPqiSharedExclusionTransfer(SQLTable):
encounter_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqiSharedExclusionUngroupableDrg(SQLTable):
@@ -448,7 +448,7 @@ class AhrqMeasuresIntPqiSharedExclusionUngroupableDrg(SQLTable):
encounter_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqiSharedExclusionUnion(SQLTable):
@@ -460,7 +460,7 @@ class AhrqMeasuresIntPqiSharedExclusionUnion(SQLTable):
encounter_id: str | None = None
data_source: str | None = None
exclusion_reason: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresIntPqiSharedExclusionsMissingAge(SQLTable):
@@ -471,7 +471,7 @@ class AhrqMeasuresIntPqiSharedExclusionsMissingAge(SQLTable):
data_source: str | None = None
person_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresStgPqiInpatientEncounter(SQLTable):
@@ -539,7 +539,7 @@ class AhrqMeasuresPqiDenomLong(SQLTable):
person_id: str | None = None
data_source: str | None = None
pqi_number: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresPqiExclusionLong(SQLTable):
@@ -553,7 +553,7 @@ class AhrqMeasuresPqiExclusionLong(SQLTable):
exclusion_reason: str | None = None
exclusion_number: int | None = None
pqi_number: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresPqiNumLong(SQLTable):
@@ -567,7 +567,7 @@ class AhrqMeasuresPqiNumLong(SQLTable):
year_number: int | None = None
encounter_id: str | None = None
pqi_number: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresPqiRate(SQLTable):
@@ -582,7 +582,7 @@ class AhrqMeasuresPqiRate(SQLTable):
denom_count: int | None = None
num_count: int | None = None
rate_per_100_thousand: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class AhrqMeasuresPqiSummary(SQLTable):
@@ -604,4 +604,4 @@ class AhrqMeasuresPqiSummary(SQLTable):
encounter_end_date: date | None = None
length_of_stay: int | None = None
paid_amount: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

View File

@@ -69,7 +69,7 @@ class CcsrDxVerticalPivot(SQLTable):
ccsr_category_rank: int | None = None
is_ip_default_category: int | None = None
is_op_default_category: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CcsrLongConditionCategory(SQLTable):
@@ -94,7 +94,7 @@ class CcsrLongConditionCategory(SQLTable):
is_op_default_category: int | None = None
data_source: str | None = None
dxccsr_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CcsrLongProcedureCategory(SQLTable):
@@ -119,7 +119,7 @@ class CcsrLongProcedureCategory(SQLTable):
qualifier: str | None = None
data_source: str | None = None
prccsr_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CcsrProcedureCategoryMap(SQLTable):
@@ -139,7 +139,7 @@ class CcsrProcedureCategoryMap(SQLTable):
approach: str | None = None
device: str | None = None
qualifier: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CcsrProcedureSummary(SQLTable):
@@ -155,7 +155,7 @@ class CcsrProcedureSummary(SQLTable):
n_occurrences_with_approach: int | None = None
n_total_occurrences: int | None = None
approach_rate: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CcsrSingularConditionCategory(SQLTable):
@@ -176,4 +176,4 @@ class CcsrSingularConditionCategory(SQLTable):
body_system: str | None = None
data_source: str | None = None
dxccsr_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

View File

@@ -18,7 +18,7 @@ class ChronicConditionsIntCmsChronicConditionAll(SQLTable):
condition_category: str | None = None
condition: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ChronicConditionsIntCmsChronicConditionHivAids(SQLTable):
@@ -34,7 +34,7 @@ class ChronicConditionsIntCmsChronicConditionHivAids(SQLTable):
condition_category: str | None = None
condition: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ChronicConditionsIntCmsChronicConditionOud(SQLTable):
@@ -50,7 +50,20 @@ class ChronicConditionsIntCmsChronicConditionOud(SQLTable):
condition_category: str | None = None
condition: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ChronicConditionsValueSetChronicConditionsHierarchy(SQLTable):
"""Schema: chronic_conditions / Table: _value_set_chronic_conditions_hierarchy"""
__schema__ = "chronic_conditions"
__tablename__ = "_value_set_chronic_conditions_hierarchy"
condition_family: str | None = None
condition: str | None = None
icd_10_cm_code: str | None = None
icd_10_cm_description: str | None = None
condition_column_name: str | None = None
class ChronicConditionsValueSetCmsChronicConditionsHierarchy(SQLTable):
@@ -71,17 +84,72 @@ class ChronicConditionsValueSetCmsChronicConditionsHierarchy(SQLTable):
code: str | None = None
class ChronicConditionsValueSetConditionsHierarchy(SQLTable):
"""Schema: chronic_conditions / Table: _value_set_chronic_conditions_hierarchy (upstream)"""
class ChronicConditionsChronicConditionsLong(SQLTable):
"""Schema: chronic_conditions / Table: chronic_conditions_long"""
__schema__ = "chronic_conditions"
__tablename__ = "_value_set_chronic_conditions_hierarchy"
__tablename__ = "chronic_conditions_long"
condition_family: str | None = None
person_id: str | None = None
condition: str | None = None
icd_10_cm_code: str | None = None
icd_10_cm_description: str | None = None
condition_column_name: str | None = None
first_diagnosis_date: date | None = None
last_diagnosis_date: date | None = None
last_run: datetime | None = None
class ChronicConditionsChronicConditionsWide(SQLTable):
"""Schema: chronic_conditions / Table: chronic_conditions_wide"""
__schema__ = "chronic_conditions"
__tablename__ = "chronic_conditions_wide"
person_id: str | None = None
obesity: int | None = None
osteoarthritis: int | None = None
copd: int | None = None
anxiety_disorders: int | None = None
ckd: int | None = None
t2d: int | None = None
cll: int | None = None
dysplipidemias: int | None = None
hypertension: int | None = None
atherosclerosis: int | None = None
dementia: int | None = None
rheumatoid_arthritis: int | None = None
celiac: int | None = None
hip_fracture: int | None = None
immunodeficiencies_and_white_blood_cell_disorders: int | None = None
asthma: int | None = None
t1d: int | None = None
ulcerative_colitis: int | None = None
chrohns: int | None = None
holicobacter: int | None = None
bipolar: int | None = None
heart_failure: int | None = None
tabacco: int | None = None
lyme: int | None = None
breast_cancer: int | None = None
osteoporosis: int | None = None
pulmonary_embolism: int | None = None
schizophrenia: int | None = None
atrial_fibrillation: int | None = None
colorectal_cancer: int | None = None
depression: int | None = None
deep_vein_thrombosis: int | None = None
alzheimer: int | None = None
stroke: int | None = None
myocardial_infraction: int | None = None
opiod_use_disorder: int | None = None
lung_cancer: int | None = None
herpes: int | None = None
rickettsiosis: int | None = None
ms: int | None = None
alchohol: int | None = None
adhd: int | None = None
hiv: int | None = None
ptsd: int | None = None
lupus: int | None = None
last_run: datetime | None = None
class ChronicConditionsCmsChronicConditionsLong(SQLTable):
@@ -97,7 +165,7 @@ class ChronicConditionsCmsChronicConditionsLong(SQLTable):
condition_category: str | None = None
condition: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ChronicConditionsCmsChronicConditionsWide(SQLTable):
@@ -188,72 +256,4 @@ class ChronicConditionsCmsChronicConditionsWide(SQLTable):
int | None
) = None
viral_hepatitis_general: int | None = None
pipeline_last_run: datetime | None = None
class ChronicConditionsLong(SQLTable):
"""Schema: chronic_conditions / Table: chronic_conditions_long (upstream)"""
__schema__ = "chronic_conditions"
__tablename__ = "chronic_conditions_long"
person_id: str | None = None
condition: str | None = None
first_diagnosis_date: date | None = None
last_diagnosis_date: date | None = None
pipeline_last_run: datetime | None = None
class ChronicConditionsWide(SQLTable):
"""Schema: chronic_conditions / Table: chronic_conditions_wide (upstream)"""
__schema__ = "chronic_conditions"
__tablename__ = "chronic_conditions_wide"
person_id: str | None = None
obesity: int | None = None
osteoarthritis: int | None = None
copd: int | None = None
anxiety_disorders: int | None = None
ckd: int | None = None
t2d: int | None = None
cll: int | None = None
dysplipidemias: int | None = None
hypertension: int | None = None
atherosclerosis: int | None = None
dementia: int | None = None
rheumatoid_arthritis: int | None = None
celiac: int | None = None
hip_fracture: int | None = None
immunodeficiencies_and_white_blood_cell_disorders: int | None = None
asthma: int | None = None
t1d: int | None = None
ulcerative_colitis: int | None = None
chrohns: int | None = None
holicobacter: int | None = None
bipolar: int | None = None
heart_failure: int | None = None
tabacco: int | None = None
lyme: int | None = None
breast_cancer: int | None = None
osteoporosis: int | None = None
pulmonary_embolism: int | None = None
schizophrenia: int | None = None
atrial_fibrillation: int | None = None
colorectal_cancer: int | None = None
depression: int | None = None
deep_vein_thrombosis: int | None = None
alzheimer: int | None = None
stroke: int | None = None
myocardial_infraction: int | None = None
opiod_use_disorder: int | None = None
lung_cancer: int | None = None
herpes: int | None = None
rickettsiosis: int | None = None
ms: int | None = None
alchohol: int | None = None
adhd: int | None = None
hiv: int | None = None
ptsd: int | None = None
lupus: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

File diff suppressed because it is too large Load Diff

View File

@@ -32,7 +32,7 @@ class CmsHccIntDemographicFactors(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntDisabledInteractionFactors(SQLTable):
@@ -50,7 +50,7 @@ class CmsHccIntDisabledInteractionFactors(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntDiseaseFactors(SQLTable):
@@ -70,7 +70,7 @@ class CmsHccIntDiseaseFactors(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntDiseaseInteractionFactors(SQLTable):
@@ -90,7 +90,7 @@ class CmsHccIntDiseaseInteractionFactors(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntEligibleConditions(SQLTable):
@@ -107,7 +107,7 @@ class CmsHccIntEligibleConditions(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntEnrollmentInteractionFactors(SQLTable):
@@ -125,7 +125,7 @@ class CmsHccIntEnrollmentInteractionFactors(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntHccCountFactors(SQLTable):
@@ -143,7 +143,7 @@ class CmsHccIntHccCountFactors(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntHccHierarchy(SQLTable):
@@ -159,7 +159,7 @@ class CmsHccIntHccHierarchy(SQLTable):
collection_start_date: date | None = None
collection_end_date: date | None = None
hcc_code: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntHccMapping(SQLTable):
@@ -176,7 +176,7 @@ class CmsHccIntHccMapping(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntMembers(SQLTable):
@@ -201,7 +201,7 @@ class CmsHccIntMembers(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccIntMonthlyCollectionDates(SQLTable):
@@ -402,7 +402,7 @@ class CmsHccPatientRiskFactors(SQLTable):
coefficient: Decimal | None = None
model_version: str | None = None
payment_year: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccPatientRiskFactorsMonthly(SQLTable):
@@ -426,7 +426,7 @@ class CmsHccPatientRiskFactorsMonthly(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccPatientRiskScores(SQLTable):
@@ -445,7 +445,7 @@ class CmsHccPatientRiskScores(SQLTable):
payment_risk_score_weighted_by_months: Decimal | None = None
member_months: int | None = None
payment_year: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccPatientRiskScoresMonthly(SQLTable):
@@ -470,7 +470,7 @@ class CmsHccPatientRiskScoresMonthly(SQLTable):
payment_risk_score: Decimal | None = None
payment_risk_score_weighted_by_months: Decimal | None = None
member_months: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CmsHccPatientRiskScoresMonthlyByFactorType(SQLTable):
@@ -496,4 +496,4 @@ class CmsHccPatientRiskScoresMonthlyByFactorType(SQLTable):
payment_year: int | None = None
collection_start_date: date | None = None
collection_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

View File

@@ -3,6 +3,8 @@ from __future__ import annotations
from datetime import date, datetime
from decimal import Decimal
from pydantic import Field
from aco.table.base import SQLTable
@@ -33,7 +35,7 @@ class CoreStgClaimsCondition(SQLTable):
present_on_admit_code: str | None = None
present_on_admit_description: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
payer: str | None = None
@@ -70,7 +72,7 @@ class CoreStgClaimsEligibility(SQLTable):
data_source: str | None = None
file_date: datetime | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClaimsEncounter(SQLTable):
@@ -123,7 +125,7 @@ class CoreStgClaimsEncounter(SQLTable):
source_model: str | None = None
data_source: str | None = None
encounter_source_type: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClaimsLocation(SQLTable):
@@ -144,7 +146,7 @@ class CoreStgClaimsLocation(SQLTable):
latitude: float | None = None
longitude: float | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClaimsMedicalClaim(SQLTable):
@@ -218,7 +220,7 @@ class CoreStgClaimsMedicalClaim(SQLTable):
file_date: datetime | None = None
ingest_datetime: datetime | None = None
file_name: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClaimsMemberMonths(SQLTable):
@@ -234,7 +236,7 @@ class CoreStgClaimsMemberMonths(SQLTable):
payer: str | None = None
plan: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
payer_attributed_provider: str | None = None
payer_attributed_provider_practice: str | None = None
payer_attributed_provider_organization: str | None = None
@@ -275,7 +277,7 @@ class CoreStgClaimsPatient(SQLTable):
data_source: str | None = None
age: int | None = None
age_group: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClaimsPharmacyClaim(SQLTable):
@@ -315,7 +317,7 @@ class CoreStgClaimsPharmacyClaim(SQLTable):
file_date: datetime | None = None
ingest_datetime: datetime | None = None
file_name: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClaimsPractitioner(SQLTable):
@@ -332,7 +334,7 @@ class CoreStgClaimsPractitioner(SQLTable):
specialty: str | None = None
sub_specialty: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClaimsProcedure(SQLTable):
@@ -361,7 +363,7 @@ class CoreStgClaimsProcedure(SQLTable):
modifier_5: str | None = None
practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalAppointment(SQLTable):
@@ -401,7 +403,7 @@ class CoreStgClinicalAppointment(SQLTable):
normalized_cancellation_reason_code: str | None = None
normalized_cancellation_reason_description: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalCondition(SQLTable):
@@ -431,7 +433,7 @@ class CoreStgClinicalCondition(SQLTable):
present_on_admit_code: str | None = None
present_on_admit_description: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalEncounter(SQLTable):
@@ -484,7 +486,7 @@ class CoreStgClinicalEncounter(SQLTable):
source_model: str | None = None
data_source: str | None = None
encounter_source_type: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalImmunization(SQLTable):
@@ -514,7 +516,7 @@ class CoreStgClinicalImmunization(SQLTable):
location_id: str | None = None
practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalLabResult(SQLTable):
@@ -555,7 +557,7 @@ class CoreStgClinicalLabResult(SQLTable):
specimen: str | None = None
ordering_practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalLocation(SQLTable):
@@ -576,7 +578,7 @@ class CoreStgClinicalLocation(SQLTable):
latitude: float | None = None
longitude: float | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalMedication(SQLTable):
@@ -607,7 +609,7 @@ class CoreStgClinicalMedication(SQLTable):
days_supply: int | None = None
practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalObservation(SQLTable):
@@ -637,7 +639,7 @@ class CoreStgClinicalObservation(SQLTable):
normalized_reference_range_low: str | None = None
normalized_reference_range_high: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalPatient(SQLTable):
@@ -670,7 +672,7 @@ class CoreStgClinicalPatient(SQLTable):
data_source: str | None = None
age: int | None = None
age_group: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalPractitioner(SQLTable):
@@ -687,7 +689,7 @@ class CoreStgClinicalPractitioner(SQLTable):
specialty: str | None = None
sub_specialty: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreStgClinicalProcedure(SQLTable):
@@ -716,7 +718,7 @@ class CoreStgClinicalProcedure(SQLTable):
modifier_5: str | None = None
practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreAppointment(SQLTable):
@@ -757,7 +759,7 @@ class CoreAppointment(SQLTable):
normalized_cancellation_reason_description: str | None = None
mapping_method: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreCondition(SQLTable):
@@ -766,18 +768,28 @@ class CoreCondition(SQLTable):
__schema__ = "core"
__tablename__ = "condition"
condition_id: str | None = None
condition_id: str | None = Field(
default=None, description="Unique condition identifier"
)
payer: str | None = None
person_id: str | None = None
member_id: str | None = None
patient_id: str | None = None
patient_id: str | None = Field(
default=None, description="Patient with the condition"
)
encounter_id: str | None = None
claim_id: str | None = None
recorded_date: date | None = None
onset_date: date | None = None
resolved_date: date | None = None
onset_date: date | None = Field(
default=None, description="Date condition was first recorded"
)
resolved_date: date | None = Field(
default=None, description="Date condition was resolved"
)
status: str | None = None
condition_type: str | None = None
condition_type: str | None = Field(
default=None, description="Type of condition record"
)
source_code_type: str | None = None
source_code: str | None = None
source_description: str | None = None
@@ -789,7 +801,7 @@ class CoreCondition(SQLTable):
present_on_admit_code: str | None = None
present_on_admit_description: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreEligibility(SQLTable):
@@ -804,14 +816,26 @@ class CoreEligibility(SQLTable):
subscriber_id: str | None = None
birth_date: date | None = None
death_date: date | None = None
enrollment_start_date: date | None = None
enrollment_end_date: date | None = None
payer: str | None = None
payer_type: str | None = None
plan: str | None = None
original_reason_entitlement_code: str | None = None
dual_status_code: str | None = None
medicare_status_code: str | None = None
enrollment_start_date: date | None = Field(
default=None, description="Enrollment period start date"
)
enrollment_end_date: date | None = Field(
default=None, description="Enrollment period end date"
)
payer: str | None = Field(default=None, description="Insurance payer name")
payer_type: str | None = Field(
default=None, description="Payer category (medicare, medicaid, commercial)"
)
plan: str | None = Field(default=None, description="Insurance plan name")
original_reason_entitlement_code: str | None = Field(
default=None, description="Original reason for Medicare entitlement"
)
dual_status_code: str | None = Field(
default=None, description="Dual eligibility status code"
)
medicare_status_code: str | None = Field(
default=None, description="Medicare entitlement status code"
)
enrollment_status: str | None = None
hospice_flag: int | None = None
institutional_snp_flag: int | None = None
@@ -825,7 +849,7 @@ class CoreEligibility(SQLTable):
data_source: str | None = None
file_date: datetime | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreEncounter(SQLTable):
@@ -835,22 +859,41 @@ class CoreEncounter(SQLTable):
__tablename__ = "encounter"
_dbt_source_relation: str | None = None
encounter_id: str | None = None
encounter_id: str | None = Field(
default=None, description="Unique encounter identifier"
)
person_id: str | None = None
encounter_type: str | None = None
encounter_type: str | None = Field(
default=None,
description="Type of encounter (acute inpatient, outpatient, etc.)",
)
encounter_group: str | None = None
encounter_start_date: date | None = None
encounter_end_date: date | None = None
encounter_start_date: date | None = Field(
default=None, description="Encounter admission or start date"
)
encounter_end_date: date | None = Field(
default=None, description="Encounter discharge or end date"
)
length_of_stay: int | None = None
admit_source_code: str | None = None
admit_source_code: str | None = Field(
default=None, description="Source of admission code"
)
admit_source_description: str | None = None
admit_type_code: str | None = None
admit_type_code: str | None = Field(
default=None, description="Type of admission code"
)
admit_type_description: str | None = None
discharge_disposition_code: str | None = None
discharge_disposition_code: str | None = Field(
default=None, description="Discharge disposition code"
)
discharge_disposition_description: str | None = None
attending_provider_id: str | None = None
attending_provider_id: str | None = Field(
default=None, description="Attending provider identifier"
)
attending_provider_name: str | None = None
facility_id: str | None = None
facility_id: str | None = Field(
default=None, description="Facility where encounter occurred"
)
facility_name: str | None = None
facility_type: str | None = None
observation_flag: int | None = None
@@ -870,16 +913,20 @@ class CoreEncounter(SQLTable):
drg_code_type: str | None = None
drg_code: str | None = None
drg_description: str | None = None
paid_amount: Decimal | None = None
paid_amount: Decimal | None = Field(
default=None, description="Total paid amount for encounter"
)
allowed_amount: Decimal | None = None
charge_amount: Decimal | None = None
charge_amount: Decimal | None = Field(
default=None, description="Total charge amount for encounter"
)
claim_count: int | None = None
inst_claim_count: int | None = None
prof_claim_count: int | None = None
source_model: str | None = None
data_source: str | None = None
encounter_source_type: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreImmunization(SQLTable):
@@ -910,7 +957,7 @@ class CoreImmunization(SQLTable):
location_id: str | None = None
practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreLabResult(SQLTable):
@@ -952,7 +999,7 @@ class CoreLabResult(SQLTable):
specimen: str | None = None
ordering_practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreLocation(SQLTable):
@@ -973,7 +1020,7 @@ class CoreLocation(SQLTable):
latitude: float | None = None
longitude: float | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreMedicalClaim(SQLTable):
@@ -983,18 +1030,26 @@ class CoreMedicalClaim(SQLTable):
__tablename__ = "medical_claim"
medical_claim_id: str | None = None
claim_id: str | None = None
claim_line_number: int | None = None
claim_id: str | None = Field(default=None, description="Unique claim identifier")
claim_line_number: int | None = Field(
default=None, description="Line number within the claim"
)
encounter_id: str | None = None
encounter_type: str | None = None
encounter_group: str | None = None
claim_type: str | None = None
claim_type: str | None = Field(
default=None, description="Type of claim (institutional, professional)"
)
person_id: str | None = None
member_id: str | None = None
payer: str | None = None
plan: str | None = None
claim_start_date: date | None = None
claim_end_date: date | None = None
claim_start_date: date | None = Field(
default=None, description="Claim service start date"
)
claim_end_date: date | None = Field(
default=None, description="Claim service end date"
)
claim_line_start_date: date | None = None
claim_line_end_date: date | None = None
admission_date: date | None = None
@@ -1008,17 +1063,21 @@ class CoreMedicalClaim(SQLTable):
admit_type_description: str | None = None
discharge_disposition_code: str | None = None
discharge_disposition_description: str | None = None
place_of_service_code: str | None = None
place_of_service_code: str | None = Field(
default=None, description="Place of service code"
)
place_of_service_description: str | None = None
bill_type_code: str | None = None
bill_type_description: str | None = None
drg_code_type: str | None = None
drg_code: str | None = None
drg_description: str | None = None
revenue_center_code: str | None = None
revenue_center_code: str | None = Field(
default=None, description="Revenue center code"
)
revenue_center_description: str | None = None
service_unit_quantity: Decimal | None = None
hcpcs_code: str | None = None
hcpcs_code: str | None = Field(default=None, description="HCPCS/CPT procedure code")
hcpcs_modifier_1: str | None = None
hcpcs_modifier_2: str | None = None
hcpcs_modifier_3: str | None = None
@@ -1033,9 +1092,13 @@ class CoreMedicalClaim(SQLTable):
facility_id: str | None = None
facility_name: str | None = None
paid_date: date | None = None
paid_amount: Decimal | None = None
paid_amount: Decimal | None = Field(
default=None, description="Amount paid for claim line"
)
allowed_amount: Decimal | None = None
charge_amount: Decimal | None = None
charge_amount: Decimal | None = Field(
default=None, description="Amount charged for claim line"
)
coinsurance_amount: Decimal | None = None
copayment_amount: Decimal | None = None
deductible_amount: Decimal | None = None
@@ -1047,7 +1110,7 @@ class CoreMedicalClaim(SQLTable):
file_date: datetime | None = None
ingest_datetime: datetime | None = None
file_name: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreMedication(SQLTable):
@@ -1081,7 +1144,7 @@ class CoreMedication(SQLTable):
days_supply: int | None = None
practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreMemberMonths(SQLTable):
@@ -1097,7 +1160,7 @@ class CoreMemberMonths(SQLTable):
payer: str | None = None
plan: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
payer_attributed_provider: str | None = None
payer_attributed_provider_practice: str | None = None
payer_attributed_provider_organization: str | None = None
@@ -1136,7 +1199,7 @@ class CoreObservation(SQLTable):
normalized_reference_range_low: str | None = None
normalized_reference_range_high: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CorePatient(SQLTable):
@@ -1150,26 +1213,32 @@ class CorePatient(SQLTable):
first_name: str | None = None
middle_name: str | None = None
last_name: str | None = None
sex: str | None = None
race: str | None = None
birth_date: date | None = None
death_date: date | None = None
death_flag: int | None = None
sex: str | None = Field(default=None, description="Patient biological sex")
race: str | None = Field(default=None, description="Patient race")
birth_date: date | None = Field(default=None, description="Patient date of birth")
death_date: date | None = Field(default=None, description="Patient date of death")
death_flag: int | None = Field(
default=None, description="Whether patient is deceased"
)
social_security_number: str | None = None
address: str | None = None
city: str | None = None
state: str | None = None
zip_code: str | None = None
county: str | None = None
latitude: float | None = None
longitude: float | None = None
state: str | None = Field(default=None, description="Patient state of residence")
zip_code: str | None = Field(default=None, description="Patient ZIP code")
county: str | None = Field(default=None, description="Patient county of residence")
latitude: float | None = Field(
default=None, description="Patient geocoded latitude"
)
longitude: float | None = Field(
default=None, description="Patient geocoded longitude"
)
phone: str | None = None
email: str | None = None
ethnicity: str | None = None
data_source: str | None = None
age: int | None = None
age_group: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CorePersonIdCrosswalk(SQLTable):
@@ -1184,7 +1253,7 @@ class CorePersonIdCrosswalk(SQLTable):
payer: str | None = None
plan: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CorePharmacyClaim(SQLTable):
@@ -1194,7 +1263,9 @@ class CorePharmacyClaim(SQLTable):
__tablename__ = "pharmacy_claim"
pharmacy_claim_id: str | None = None
claim_id: str | None = None
claim_id: str | None = Field(
default=None, description="Unique pharmacy claim identifier"
)
claim_line_number: int | None = None
person_id: str | None = None
member_id: str | None = None
@@ -1204,14 +1275,18 @@ class CorePharmacyClaim(SQLTable):
prescribing_provider_name: str | None = None
dispensing_provider_id: str | None = None
dispensing_provider_name: str | None = None
dispensing_date: date | None = None
ndc_code: str | None = None
dispensing_date: date | None = Field(
default=None, description="Date prescription was dispensed"
)
ndc_code: str | None = Field(default=None, description="National Drug Code")
ndc_description: str | None = None
quantity: int | None = None
days_supply: int | None = None
quantity: int | None = Field(default=None, description="Quantity dispensed")
days_supply: int | None = Field(default=None, description="Number of days supply")
refills: int | None = None
paid_date: date | None = None
paid_amount: Decimal | None = None
paid_amount: Decimal | None = Field(
default=None, description="Amount paid for prescription"
)
allowed_amount: Decimal | None = None
charge_amount: Decimal | None = None
coinsurance_amount: Decimal | None = None
@@ -1224,7 +1299,7 @@ class CorePharmacyClaim(SQLTable):
file_date: datetime | None = None
ingest_datetime: datetime | None = None
file_name: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CorePractitioner(SQLTable):
@@ -1241,7 +1316,7 @@ class CorePractitioner(SQLTable):
specialty: str | None = None
sub_specialty: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class CoreProcedure(SQLTable):
@@ -1271,4 +1346,4 @@ class CoreProcedure(SQLTable):
modifier_5: str | None = None
practitioner_id: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

File diff suppressed because it is too large Load Diff

View File

@@ -21,7 +21,7 @@ class FinancialPmpmIntPatientSpendWithServiceCategories(SQLTable):
total_paid: Decimal | None = None
total_allowed: Decimal | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class FinancialPmpmIntServiceCategory1AllowedPivot(SQLTable):
@@ -41,7 +41,7 @@ class FinancialPmpmIntServiceCategory1AllowedPivot(SQLTable):
ancillary_allowed: Decimal | None = None
other_allowed: Decimal | None = None
pharmacy_allowed: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class FinancialPmpmIntServiceCategory1PaidPivot(SQLTable):
@@ -61,7 +61,7 @@ class FinancialPmpmIntServiceCategory1PaidPivot(SQLTable):
ancillary_paid: Decimal | None = None
other_paid: Decimal | None = None
pharmacy_paid: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class FinancialPmpmIntServiceCategory2AllowedPivot(SQLTable):
@@ -104,7 +104,7 @@ class FinancialPmpmIntServiceCategory2AllowedPivot(SQLTable):
skilled_nursing_allowed: Decimal | None = None
telehealth_visit_allowed: Decimal | None = None
urgent_care_allowed: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class FinancialPmpmIntServiceCategory2PaidPivot(SQLTable):
@@ -147,7 +147,7 @@ class FinancialPmpmIntServiceCategory2PaidPivot(SQLTable):
skilled_nursing_paid: Decimal | None = None
telehealth_visit_paid: Decimal | None = None
urgent_care_paid: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class FinancialPmpmPmpmPayer(SQLTable):
@@ -228,7 +228,7 @@ class FinancialPmpmPmpmPayer(SQLTable):
skilled_nursing_allowed: float | None = None
telehealth_visit_allowed: float | None = None
urgent_care_allowed: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class FinancialPmpmPmpmPayerPlan(SQLTable):
@@ -310,7 +310,7 @@ class FinancialPmpmPmpmPayerPlan(SQLTable):
skilled_nursing_allowed: float | None = None
telehealth_visit_allowed: float | None = None
urgent_care_allowed: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class FinancialPmpmPmpmPrep(SQLTable):
@@ -406,4 +406,4 @@ class FinancialPmpmPmpmPrep(SQLTable):
medical_paid: Decimal | None = None
total_allowed: Decimal | None = None
medical_allowed: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

View File

@@ -22,7 +22,7 @@ class HccSuspectingIntAllConditions(SQLTable):
hcc_code: str | None = None
hcc_description: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntAllMedications(SQLTable):
@@ -37,7 +37,7 @@ class HccSuspectingIntAllMedications(SQLTable):
drug_code: str | None = None
code_system: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntComorbiditySuspects(SQLTable):
@@ -62,7 +62,7 @@ class HccSuspectingIntComorbiditySuspects(SQLTable):
reason: str | None = None
contributing_factor: str | None = None
suspect_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntLabSuspects(SQLTable):
@@ -84,7 +84,7 @@ class HccSuspectingIntLabSuspects(SQLTable):
reason: str | None = None
contributing_factor: str | None = None
suspect_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntMedicationSuspects(SQLTable):
@@ -105,7 +105,7 @@ class HccSuspectingIntMedicationSuspects(SQLTable):
reason: str | None = None
contributing_factor: str | None = None
suspect_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntObservationSuspects(SQLTable):
@@ -129,7 +129,7 @@ class HccSuspectingIntObservationSuspects(SQLTable):
reason: str | None = None
contributing_factor: str | None = None
suspect_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntPatientHccHistory(SQLTable):
@@ -154,7 +154,7 @@ class HccSuspectingIntPatientHccHistory(SQLTable):
reason: str | None = None
contributing_factor: str | None = None
suspect_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntPrepConditions(SQLTable):
@@ -171,7 +171,7 @@ class HccSuspectingIntPrepConditions(SQLTable):
code_type: str | None = None
code: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingIntPrepEgfrLabs(SQLTable):
@@ -187,7 +187,7 @@ class HccSuspectingIntPrepEgfrLabs(SQLTable):
code: str | None = None
result_date: date | None = None
result: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingStgCondition(SQLTable):
@@ -332,7 +332,7 @@ class HccSuspectingList(SQLTable):
reason: str | None = None
contributing_factor: str | None = None
suspect_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingListRollup(SQLTable):
@@ -349,7 +349,7 @@ class HccSuspectingListRollup(SQLTable):
reason: str | None = None
contributing_factor: str | None = None
latest_suspect_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class HccSuspectingSummary(SQLTable):
@@ -364,4 +364,4 @@ class HccSuspectingSummary(SQLTable):
patient_birth_date: date | None = None
patient_age: int | None = None
suspecting_gaps: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

View File

@@ -2,6 +2,8 @@ from __future__ import annotations
from datetime import date, datetime
from pydantic import Field
from aco.table.base import SQLTable
@@ -74,7 +76,7 @@ class InputLayerCondition(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerEligibility(SQLTable):
@@ -91,10 +93,16 @@ class InputLayerEligibility(SQLTable):
birth_date: date | None = None
death_date: date | None = None
death_flag: int | None = None
enrollment_start_date: date | None = None
enrollment_end_date: date | None = None
payer: str | None = None
payer_type: str | None = None
enrollment_start_date: date | None = Field(
default=None, description="Coverage start date"
)
enrollment_end_date: date | None = Field(
default=None, description="Coverage end date"
)
payer: str | None = Field(default=None, description="Payer name from source")
payer_type: str | None = Field(
default=None, description="Payer type classification"
)
plan: str | None = None
original_reason_entitlement_code: str | None = None
dual_status_code: str | None = None
@@ -159,7 +167,7 @@ class InputLayerEncounter(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerImmunization(SQLTable):
@@ -262,7 +270,7 @@ class InputLayerInputLayerCondition(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerInputLayerEligibility(SQLTable):
@@ -347,7 +355,7 @@ class InputLayerInputLayerEncounter(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerInputLayerImmunization(SQLTable):
@@ -441,7 +449,7 @@ class InputLayerInputLayerLocation(SQLTable):
latitude: float | None = None
longitude: float | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerInputLayerMedicalClaim(SQLTable):
@@ -630,7 +638,7 @@ class InputLayerInputLayerMedication(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerInputLayerObservation(SQLTable):
@@ -695,7 +703,7 @@ class InputLayerInputLayerPatient(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerInputLayerPharmacyClaim(SQLTable):
@@ -745,7 +753,7 @@ class InputLayerInputLayerPractitioner(SQLTable):
specialty: str | None = None
sub_specialty: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerInputLayerProcedure(SQLTable):
@@ -775,7 +783,7 @@ class InputLayerInputLayerProcedure(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerInputLayerProviderAttribution(SQLTable):
@@ -860,7 +868,7 @@ class InputLayerLocation(SQLTable):
latitude: float | None = None
longitude: float | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerMedicalClaim(SQLTable):
@@ -869,15 +877,21 @@ class InputLayerMedicalClaim(SQLTable):
__schema__ = "input_layer"
__tablename__ = "medical_claim"
claim_id: str | None = None
claim_line_number: int | None = None
claim_id: str | None = Field(default=None, description="Source claim identifier")
claim_line_number: int | None = Field(
default=None, description="Line number within the claim"
)
claim_type: str | None = None
person_id: str | None = None
member_id: str | None = None
payer: str | None = None
plan: str | None = None
claim_start_date: date | None = None
claim_end_date: date | None = None
claim_start_date: date | None = Field(
default=None, description="Claim service start date"
)
claim_end_date: date | None = Field(
default=None, description="Claim service end date"
)
claim_line_start_date: date | None = None
claim_line_end_date: date | None = None
admission_date: date | None = None
@@ -885,13 +899,15 @@ class InputLayerMedicalClaim(SQLTable):
admit_source_code: str | None = None
admit_type_code: str | None = None
discharge_disposition_code: str | None = None
place_of_service_code: str | None = None
place_of_service_code: str | None = Field(
default=None, description="Place of service code"
)
bill_type_code: str | None = None
drg_code_type: str | None = None
drg_code: str | None = None
revenue_center_code: str | None = None
service_unit_quantity: int | None = None
hcpcs_code: str | None = None
hcpcs_code: str | None = Field(default=None, description="HCPCS/CPT procedure code")
hcpcs_modifier_1: str | None = None
hcpcs_modifier_2: str | None = None
hcpcs_modifier_3: str | None = None
@@ -903,7 +919,9 @@ class InputLayerMedicalClaim(SQLTable):
billing_tin: str | None = None
facility_npi: str | None = None
paid_date: date | None = None
paid_amount: float | None = None
paid_amount: float | None = Field(
default=None, description="Paid amount from source"
)
allowed_amount: float | None = None
charge_amount: float | None = None
coinsurance_amount: float | None = None
@@ -911,7 +929,9 @@ class InputLayerMedicalClaim(SQLTable):
deductible_amount: float | None = None
total_cost_amount: float | None = None
diagnosis_code_type: str | None = None
diagnosis_code_1: str | None = None
diagnosis_code_1: str | None = Field(
default=None, description="Primary diagnosis code"
)
diagnosis_code_2: str | None = None
diagnosis_code_3: str | None = None
diagnosis_code_4: str | None = None
@@ -1049,7 +1069,7 @@ class InputLayerMedication(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerObservation(SQLTable):
@@ -1114,7 +1134,7 @@ class InputLayerPatient(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerPharmacyClaim(SQLTable):
@@ -1123,7 +1143,9 @@ class InputLayerPharmacyClaim(SQLTable):
__schema__ = "input_layer"
__tablename__ = "pharmacy_claim"
claim_id: str | None = None
claim_id: str | None = Field(
default=None, description="Source pharmacy claim identifier"
)
claim_line_number: int | None = None
person_id: str | None = None
member_id: str | None = None
@@ -1131,10 +1153,14 @@ class InputLayerPharmacyClaim(SQLTable):
plan: str | None = None
prescribing_provider_npi: str | None = None
dispensing_provider_npi: str | None = None
dispensing_date: date | None = None
ndc_code: str | None = None
quantity: int | None = None
days_supply: int | None = None
dispensing_date: date | None = Field(
default=None, description="Date prescription was dispensed"
)
ndc_code: str | None = Field(
default=None, description="National Drug Code from source"
)
quantity: int | None = Field(default=None, description="Quantity dispensed")
days_supply: int | None = Field(default=None, description="Number of days supply")
refills: int | None = None
paid_date: date | None = None
paid_amount: float | None = None
@@ -1164,7 +1190,7 @@ class InputLayerPractitioner(SQLTable):
specialty: str | None = None
sub_specialty: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerProcedure(SQLTable):
@@ -1194,7 +1220,7 @@ class InputLayerProcedure(SQLTable):
data_source: str | None = None
file_name: str | None = None
ingest_datetime: datetime | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class InputLayerProviderAttribution(SQLTable):

View File

@@ -580,7 +580,7 @@ class MainHccSuspectingListAll(SQLTable):
contributing_factor: str | None = None
suspect_date: date | None = None
current_year_billed: bool | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class MainJobRunResults(SQLTable):

View File

@@ -5,11 +5,11 @@ from datetime import datetime
from aco.table.base import SQLTable
class MetadataPipelineInvocations(SQLTable):
"""Schema: metadata / Table: pipeline_invocations"""
class MetadataInvocations(SQLTable):
"""Schema: metadata / Table: invocations"""
__schema__ = "metadata"
__tablename__ = "pipeline_invocations"
__tablename__ = "invocations"
invocation_id: str | None = None
project_name: str | None = None

135
src/aco/table/pfs.py Normal file
View File

@@ -0,0 +1,135 @@
from __future__ import annotations
from aco.table.base import SQLTable
class PfsCarrierLocality(SQLTable):
"""Schema: pfs / Table: carrier_locality"""
__schema__ = "pfs"
__tablename__ = "carrier_locality"
year: int | None = None
mac: str | None = None
locality: str | None = None
hcpcs: str | None = None
mod: str | None = None
non_fac_fee: float | None = None
fac_fee: float | None = None
non_fac_limiting_charge: float | None = None
fac_limiting_charge: float | None = None
class PfsClinicalLabor(SQLTable):
"""Schema: pfs / Table: clinical_labor"""
__schema__ = "pfs"
__tablename__ = "clinical_labor"
hcpcs: str | None = None
activity_code: str | None = None
activity_description: str | None = None
rate_per_minute: float | None = None
year: int | None = None
class PfsGpci(SQLTable):
"""Schema: pfs / Table: gpci"""
__schema__ = "pfs"
__tablename__ = "gpci"
mac: str | None = None
locality: str | None = None
locality_name: str | None = None
work_gpci: float | None = None
pe_gpci: float | None = None
mp_gpci: float | None = None
year: int | None = None
state: str | None = None
class PfsMedicalEquipment(SQLTable):
"""Schema: pfs / Table: medical_equipment"""
__schema__ = "pfs"
__tablename__ = "medical_equipment"
hcpcs: str | None = None
equipment_code: str | None = None
equipment_description: str | None = None
nf_minutes: float | None = None
f_minutes: float | None = None
unit_price: float | None = None
useful_life: float | None = None
year: int | None = None
minutes_per_year: float | None = None
class PfsMedicalSupply(SQLTable):
"""Schema: pfs / Table: medical_supply"""
__schema__ = "pfs"
__tablename__ = "medical_supply"
hcpcs: str | None = None
supply_code: str | None = None
supply_description: str | None = None
nf_quantity: float | None = None
f_quantity: float | None = None
unit_price: float | None = None
year: int | None = None
class PfsPhysicianWorkTime(SQLTable):
"""Schema: pfs / Table: physician_work_time"""
__schema__ = "pfs"
__tablename__ = "physician_work_time"
hcpcs: str | None = None
pre_eval_time: float | None = None
pre_positioning_time: float | None = None
pre_scrub_dress_wait: float | None = None
intra_service_time: float | None = None
post_immediate_time: float | None = None
total_time: float | None = None
year: int | None = None
class PfsRvu(SQLTable):
"""Schema: pfs / Table: rvu"""
__schema__ = "pfs"
__tablename__ = "rvu"
hcpcs: str | None = None
mod: str | None = None
status_code: str | None = None
description: str | None = None
work_rvu: float | None = None
non_fac_pe_rvu: float | None = None
fac_pe_rvu: float | None = None
mp_rvu: float | None = None
non_fac_total: float | None = None
fac_total: float | None = None
glob_days: str | None = None
year: int | None = None
not_used_for_medicare: str | None = None
class PfsZipCarrierLocality(SQLTable):
"""Schema: pfs / Table: zip_carrier_locality"""
__schema__ = "pfs"
__tablename__ = "zip_carrier_locality"
state: str | None = None
zip_code: str | None = None
carrier: str | None = None
locality: str | None = None
rural_indicator: str | None = None
plus_four_flag: str | None = None
part_b_indicator: str | None = None
year: int | None = None
quarter: int | None = None

View File

@@ -13,7 +13,7 @@ class PharmacyIntBrandWithGenericAvailable(SQLTable):
__tablename__ = "_int_brand_with_generic_available"
brand_with_generic_available: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class PharmacyIntClaimsCurrentCost(SQLTable):
@@ -33,7 +33,7 @@ class PharmacyIntClaimsCurrentCost(SQLTable):
cost_per_claim: float | None = None
total_units: int | None = None
cost_per_unit: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class PharmacyIntGenericCost(SQLTable):
@@ -46,7 +46,7 @@ class PharmacyIntGenericCost(SQLTable):
data_source: str | None = None
prescribed_atleast_one_generic_history: int | None = None
generic_average_cost_per_unit: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class PharmacyIntGenericCostByNdc(SQLTable):
@@ -63,7 +63,7 @@ class PharmacyIntGenericCostByNdc(SQLTable):
total_units: int | None = None
cost_per_unit: float | None = None
prescribed_atleast_one_generic_history: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class PharmacyBrandGenericOpportunity(SQLTable):
@@ -86,7 +86,7 @@ class PharmacyBrandGenericOpportunity(SQLTable):
generic_average_cost_per_unit: float | None = None
brand_less_generic_cost_per_unit: float | None = None
generic_available_total_opportunity: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class PharmacyGenericAvailableList(SQLTable):
@@ -108,7 +108,7 @@ class PharmacyGenericAvailableList(SQLTable):
generic_prescribed_history: int | None = None
generic_cost_per_unit: float | None = None
generic_cost_at_units: float | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class PharmacyPharmacyClaimExpanded(SQLTable):

View File

@@ -169,7 +169,7 @@ class ProviderAttributionAssignedBeneficiariesCurrent(SQLTable):
lookback_start_date: date | None = None
lookback_end_date: date | None = None
attribution_key: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ProviderAttributionAssignedBeneficiariesYearly(SQLTable):
@@ -190,7 +190,7 @@ class ProviderAttributionAssignedBeneficiariesYearly(SQLTable):
lookback_start_date: date | None = None
lookback_end_date: date | None = None
attribution_key: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ProviderAttributionProviderRanking(SQLTable):
@@ -214,4 +214,4 @@ class ProviderAttributionProviderRanking(SQLTable):
lookback_end_date: date | None = None
ranking: int | None = None
attribution_key: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

View File

@@ -37,7 +37,7 @@ class QualityMeasuresIntAdhDiabetesDenominator(SQLTable):
measure_name: str | None = None
measure_version: str | None = None
denominator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhDiabetesExclusions(SQLTable):
@@ -50,7 +50,7 @@ class QualityMeasuresIntAdhDiabetesExclusions(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhDiabetesLong(SQLTable):
@@ -72,7 +72,7 @@ class QualityMeasuresIntAdhDiabetesLong(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhDiabetesNumerator(SQLTable):
@@ -86,7 +86,7 @@ class QualityMeasuresIntAdhDiabetesNumerator(SQLTable):
evidence_value: str | None = None
adherence: Decimal | None = None
numerator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhStatinsPerformancePeriod(SQLTable):
@@ -119,7 +119,7 @@ class QualityMeasuresIntAdhStatinsDenominator(SQLTable):
measure_name: str | None = None
measure_version: str | None = None
denominator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhStatinsExclusions(SQLTable):
@@ -132,7 +132,7 @@ class QualityMeasuresIntAdhStatinsExclusions(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhStatinsLong(SQLTable):
@@ -154,7 +154,7 @@ class QualityMeasuresIntAdhStatinsLong(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhStatinsNumerator(SQLTable):
@@ -168,7 +168,7 @@ class QualityMeasuresIntAdhStatinsNumerator(SQLTable):
evidence_value: str | None = None
adherence: Decimal | None = None
numerator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhrasPerformancePeriod(SQLTable):
@@ -201,7 +201,7 @@ class QualityMeasuresIntAdhrasDenominator(SQLTable):
measure_name: str | None = None
measure_version: str | None = None
denominator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhrasExclusions(SQLTable):
@@ -214,7 +214,7 @@ class QualityMeasuresIntAdhrasExclusions(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhrasLong(SQLTable):
@@ -236,7 +236,7 @@ class QualityMeasuresIntAdhrasLong(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntAdhrasNumerator(SQLTable):
@@ -250,7 +250,7 @@ class QualityMeasuresIntAdhrasNumerator(SQLTable):
evidence_value: str | None = None
adherence: Decimal | None = None
numerator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm130PerformancePeriod(SQLTable):
@@ -282,7 +282,7 @@ class QualityMeasuresIntCqm130Denominator(SQLTable):
measure_name: str | None = None
measure_version: str | None = None
denominator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm130Exclusions(SQLTable):
@@ -295,7 +295,7 @@ class QualityMeasuresIntCqm130Exclusions(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm130Long(SQLTable):
@@ -317,7 +317,7 @@ class QualityMeasuresIntCqm130Long(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm130Numerator(SQLTable):
@@ -335,7 +335,7 @@ class QualityMeasuresIntCqm130Numerator(SQLTable):
evidence_date: date | None = None
evidence_value: str | None = None
numerator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm438PerformancePeriod(SQLTable):
@@ -365,7 +365,7 @@ class QualityMeasuresIntCqm438Denominator(SQLTable):
measure_name: str | None = None
measure_version: str | None = None
denominator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm438DenominatorCriteria1(SQLTable):
@@ -380,7 +380,7 @@ class QualityMeasuresIntCqm438DenominatorCriteria1(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm438DenominatorCriteria2(SQLTable):
@@ -395,7 +395,7 @@ class QualityMeasuresIntCqm438DenominatorCriteria2(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm438DenominatorCriteria3(SQLTable):
@@ -410,7 +410,7 @@ class QualityMeasuresIntCqm438DenominatorCriteria3(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm438Exclusions(SQLTable):
@@ -423,7 +423,7 @@ class QualityMeasuresIntCqm438Exclusions(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm438Long(SQLTable):
@@ -445,7 +445,7 @@ class QualityMeasuresIntCqm438Long(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntCqm438Numerator(SQLTable):
@@ -463,7 +463,7 @@ class QualityMeasuresIntCqm438Numerator(SQLTable):
evidence_date: date | None = None
evidence_value: str | None = None
numerator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntNqf0420PerformancePeriod(SQLTable):
@@ -493,7 +493,7 @@ class QualityMeasuresIntNqf0420Denominator(SQLTable):
measure_name: str | None = None
measure_version: str | None = None
denominator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntNqf0420Exclusions(SQLTable):
@@ -506,7 +506,7 @@ class QualityMeasuresIntNqf0420Exclusions(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntNqf0420Long(SQLTable):
@@ -528,7 +528,7 @@ class QualityMeasuresIntNqf0420Long(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntNqf0420Numerator(SQLTable):
@@ -546,7 +546,7 @@ class QualityMeasuresIntNqf0420Numerator(SQLTable):
evidence_date: date | None = None
evidence_value: str | None = None
numerator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSharedExclusionsAdvancedIllness(SQLTable):
@@ -563,7 +563,7 @@ class QualityMeasuresIntSharedExclusionsAdvancedIllness(SQLTable):
claim_end_date: date | None = None
procedure_date: date | None = None
patient_type: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSharedExclusionsDementia(SQLTable):
@@ -578,7 +578,7 @@ class QualityMeasuresIntSharedExclusionsDementia(SQLTable):
exclusion_type: str | None = None
dispensing_date: date | None = None
paid_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSharedExclusionsFrailty(SQLTable):
@@ -590,7 +590,7 @@ class QualityMeasuresIntSharedExclusionsFrailty(SQLTable):
person_id: str | None = None
exclusion_date: date | None = None
exclusion_reason: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSharedExclusionsHospicePalliative(SQLTable):
@@ -603,7 +603,7 @@ class QualityMeasuresIntSharedExclusionsHospicePalliative(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_type: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSharedExclusionsInstitutionalSnp(SQLTable):
@@ -616,7 +616,7 @@ class QualityMeasuresIntSharedExclusionsInstitutionalSnp(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_type: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSupdPerformancePeriod(SQLTable):
@@ -646,7 +646,7 @@ class QualityMeasuresIntSupdDenominator(SQLTable):
measure_name: str | None = None
measure_version: str | None = None
denominator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSupdExclusions(SQLTable):
@@ -659,7 +659,7 @@ class QualityMeasuresIntSupdExclusions(SQLTable):
exclusion_date: date | None = None
exclusion_reason: str | None = None
exclusion_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSupdLong(SQLTable):
@@ -681,7 +681,7 @@ class QualityMeasuresIntSupdLong(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresIntSupdNumerator(SQLTable):
@@ -694,7 +694,7 @@ class QualityMeasuresIntSupdNumerator(SQLTable):
evidence_date: date | None = None
evidence_value: str | None = None
numerator_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgCondition(SQLTable):
@@ -711,7 +711,7 @@ class QualityMeasuresStgCondition(SQLTable):
source_code: str | None = None
normalized_code_type: str | None = None
normalized_code: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgEncounter(SQLTable):
@@ -727,7 +727,7 @@ class QualityMeasuresStgEncounter(SQLTable):
length_of_stay: int | None = None
encounter_start_date: date | None = None
encounter_end_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgLabResult(SQLTable):
@@ -761,7 +761,7 @@ class QualityMeasuresStgMedicalClaim(SQLTable):
hcpcs_modifier_3: str | None = None
hcpcs_modifier_4: str | None = None
hcpcs_modifier_5: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgMedication(SQLTable):
@@ -778,7 +778,7 @@ class QualityMeasuresStgMedication(SQLTable):
source_code: str | None = None
ndc_code: str | None = None
rxnorm_code: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgObservation(SQLTable):
@@ -796,7 +796,7 @@ class QualityMeasuresStgObservation(SQLTable):
normalized_code_type: str | None = None
normalized_code: str | None = None
normalized_description: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgPatient(SQLTable):
@@ -809,7 +809,7 @@ class QualityMeasuresStgPatient(SQLTable):
sex: str | None = None
birth_date: date | None = None
death_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgPharmacyClaim(SQLTable):
@@ -823,7 +823,7 @@ class QualityMeasuresStgPharmacyClaim(SQLTable):
ndc_code: str | None = None
days_supply: int | None = None
paid_date: date | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresStgProcedure(SQLTable):
@@ -844,7 +844,7 @@ class QualityMeasuresStgProcedure(SQLTable):
modifier_3: str | None = None
modifier_4: str | None = None
modifier_5: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresValueSetCodes(SQLTable):
@@ -899,7 +899,7 @@ class QualityMeasuresSummaryCounts(SQLTable):
numerator_sum: int | None = None
exclusion_sum: int | None = None
performance_rate: Decimal | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresSummaryLong(SQLTable):
@@ -922,7 +922,7 @@ class QualityMeasuresSummaryLong(SQLTable):
measure_id: str | None = None
measure_name: str | None = None
measure_version: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class QualityMeasuresSummaryWide(SQLTable):
@@ -939,4 +939,4 @@ class QualityMeasuresSummaryWide(SQLTable):
cqm_438: int | None = None
nqf_0420: int | None = None
supd: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

View File

@@ -24,7 +24,7 @@ class ReadmissionsIntEncounter(SQLTable):
primary_diagnosis_code: str | None = None
encounter_source_type: str | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntEncounterDataQuality(SQLTable):
@@ -47,7 +47,7 @@ class ReadmissionsIntEncounterDataQuality(SQLTable):
overlaps_with_another_encounter_flag: int | None = None
missing_drg_flag: int | None = None
invalid_drg_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntEncounterOverlap(SQLTable):
@@ -78,7 +78,7 @@ class ReadmissionsIntEncounterSpecialtyCohort(SQLTable):
encounter_id: str | None = None
specialty_cohort: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntEncounterWithCcs(SQLTable):
@@ -99,7 +99,7 @@ class ReadmissionsIntEncounterWithCcs(SQLTable):
primary_diagnosis_code: str | None = None
valid_primary_diagnosis_code_flag: int | None = None
ccs_diagnosis_category: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntExclusion(SQLTable):
@@ -109,7 +109,7 @@ class ReadmissionsIntExclusion(SQLTable):
__tablename__ = "_int_exclusion"
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntIndexAdmission(SQLTable):
@@ -119,7 +119,7 @@ class ReadmissionsIntIndexAdmission(SQLTable):
__tablename__ = "_int_index_admission"
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntIndexDischargeRequirement(SQLTable):
@@ -129,7 +129,7 @@ class ReadmissionsIntIndexDischargeRequirement(SQLTable):
__tablename__ = "_int_index_discharge_requirement"
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntIndexTimeRequirement(SQLTable):
@@ -139,7 +139,7 @@ class ReadmissionsIntIndexTimeRequirement(SQLTable):
__tablename__ = "_int_index_time_requirement"
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntPlannedEncounter(SQLTable):
@@ -149,7 +149,7 @@ class ReadmissionsIntPlannedEncounter(SQLTable):
__tablename__ = "_int_planned_encounter"
encounter_id: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntProcedureCcs(SQLTable):
@@ -162,7 +162,7 @@ class ReadmissionsIntProcedureCcs(SQLTable):
procedure_code: str | None = None
valid_icd_10_pcs_flag: int | None = None
ccs_procedure_category: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsIntReadmissionCrude(SQLTable):
@@ -178,7 +178,7 @@ class ReadmissionsIntReadmissionCrude(SQLTable):
had_readmission_flag: int | None = None
days_to_readmit: int | None = None
readmit_30_flag: int | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsValueSetAcuteDiagnosisCcs(SQLTable):
@@ -334,7 +334,7 @@ class ReadmissionsEncounterAugmented(SQLTable):
missing_drg_flag: int | None = None
invalid_drg_flag: int | None = None
data_source: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None
class ReadmissionsReadmissionSummary(SQLTable):
@@ -375,4 +375,4 @@ class ReadmissionsReadmissionSummary(SQLTable):
readmission_specialty_cohort: str | None = None
readmission_died_flag: int | None = None
readmission_diagnosis_ccs: str | None = None
pipeline_last_run: datetime | None = None
last_run: datetime | None = None

65
src/api/routes/lineage.py Normal file
View File

@@ -0,0 +1,65 @@
"""Lineage endpoints — table and column dependency graph."""
from __future__ import annotations
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
router = APIRouter(prefix="/lineage", tags=["lineage"])
class LineageResponse(BaseModel):
tables: list[str]
edges: dict[str, list[str]]
column_sources: dict[str, dict[str, str]]
class TableLineageResponse(BaseModel):
table: str
inputs: list[str]
column_sources: dict[str, str]
@router.get("", response_model=LineageResponse)
def get_lineage() -> LineageResponse:
"""Return the full table-level lineage graph."""
from aco.lake.lineage import build_lineage
graph = build_lineage()
data = graph.to_dict()
return LineageResponse(**data)
@router.get("/export/mermaid")
def export_mermaid() -> dict[str, str]:
"""Export lineage as Mermaid flowchart."""
from aco.lake.lineage import build_lineage
graph = build_lineage()
return {"format": "mermaid", "content": graph.to_mermaid()}
@router.get("/export/dot")
def export_dot() -> dict[str, str]:
"""Export lineage as DOT graph."""
from aco.lake.lineage import build_lineage
graph = build_lineage()
return {"format": "dot", "content": graph.to_dot()}
@router.get("/{table_ref:path}", response_model=TableLineageResponse)
def get_table_lineage(table_ref: str) -> TableLineageResponse:
"""Return lineage for a specific table."""
from aco.lake.lineage import build_lineage
graph = build_lineage()
if table_ref not in graph.table_edges:
raise HTTPException(status_code=404, detail=f"Table '{table_ref}' not found.")
return TableLineageResponse(
table=table_ref,
inputs=graph.table_deps(table_ref),
column_sources=graph.column_sources.get(table_ref, {}),
)

View File

@@ -11,7 +11,7 @@ from __future__ import annotations
from fastapi import FastAPI
from api.routes import auth, bib, health, pipelines, schema
from api.routes import auth, bib, health, lineage, pipelines, schema
app = FastAPI(
title="stack",
@@ -24,3 +24,4 @@ app.include_router(health.router)
app.include_router(pipelines.router)
app.include_router(bib.router)
app.include_router(schema.router)
app.include_router(lineage.router)

View File

@@ -8,17 +8,50 @@ app = typer.Typer(no_args_is_help=True)
@app.command()
def sync() -> None:
def sync(
dry_run: bool = typer.Option(False, "--dry-run", help="Report without applying."),
) -> None:
"""Apply col: tags as DuckDB column comments."""
typer.echo("bib sync [stub]")
import duckdb
from bib import connect
from bib.meta import apply_column_comments, collect_column_comments
from conf import path
store = connect()
comments = collect_column_comments(store)
if not comments:
typer.echo("No col: tags found. Run seed_col_tags.py first.")
return
if dry_run:
for ref, desc in sorted(comments.items()):
typer.echo(f" {ref} = {desc}")
typer.echo(f"Would apply {len(comments)} column comments.")
return
con = duckdb.connect(str(path("db.aco")), read_only=False)
stmts = apply_column_comments(con, store)
con.close()
typer.echo(f"Applied {len(stmts)} column comments.")
@app.command()
def tag(
pattern: str = typer.Argument("", help="Tag pattern to search."),
pattern: str = typer.Argument("", help="Tag namespace or pattern to filter."),
) -> None:
"""List or search bibliography tags."""
typer.echo(f"bib tag: pattern={pattern!r} [stub]")
from bib import connect
store = connect()
tags = store.list_tags(namespace=pattern)
for t in tags:
typer.echo(f" {t['name']} ({t['count']} items)")
typer.echo(f"{len(tags)} tags found.")
@app.command()
@@ -26,4 +59,15 @@ def query(
term: str = typer.Argument(help="Search term."),
) -> None:
"""Search the bibliography store."""
typer.echo(f"bib query: term={term!r} [stub]")
from bib import connect
store = connect()
items = store.list_items(query=term)
for item in items[:20]:
tags_str = ", ".join(item.tags[:3]) if item.tags else ""
typer.echo(f" {item.key}: {item.title[:60]} [{tags_str}]")
if len(items) > 20:
typer.echo(f" ... and {len(items) - 20} more")
typer.echo(f"{len(items)} items found.")

View File

@@ -8,6 +8,53 @@ app = typer.Typer(no_args_is_help=True)
@app.command()
def models() -> None:
def models(
sync_first: bool = typer.Option(
True, "--sync/--no-sync", help="Run bib sync before generating."
),
) -> None:
"""Regenerate Pydantic table models from DuckDB schemas."""
typer.echo("generate models [stub]")
from pathlib import Path
import duckdb
from conf import cfg, path
if sync_first:
typer.echo("Syncing column comments from bib store...")
from bib import connect
from bib.meta import apply_column_comments, collect_column_comments
store = connect()
comments = collect_column_comments(store)
if comments:
con = duckdb.connect(str(path("db.aco")), read_only=False)
stmts = apply_column_comments(con, store)
con.close()
typer.echo(f" Applied {len(stmts)} column comments.")
from dev.scripts.generate_models import (
generate_schema_module,
get_schemas,
get_tables,
)
db_path = str(path("db.aco"))
out_dir = Path(str(path("generate.table_out")))
base_import = cfg.generate.base_import
con = duckdb.connect(db_path, read_only=True)
schemas = get_schemas(con)
total_tables = 0
for schema in schemas:
safe_name = schema.replace("-", "_")
module_path = out_dir / f"{safe_name}.py"
code = generate_schema_module(con, schema, base_import)
module_path.write_text(code)
table_count = len(get_tables(con, schema))
total_tables += table_count
typer.echo(f" {module_path.name} ({table_count} tables)")
con.close()
typer.echo(f"Generated {len(schemas)} modules, {total_tables} tables.")

View File

@@ -131,3 +131,38 @@ class TestSchema:
def test_missing_table(self, client) -> None:
r = client.get("/schema/nonexistent_table")
assert r.status_code == 404
class TestLineage:
def test_full_graph(self, client) -> None:
r = client.get("/lineage")
assert r.status_code == 200
data = r.json()
assert "tables" in data
assert "edges" in data
assert len(data["tables"]) > 0
def test_table_lineage(self, client) -> None:
r = client.get("/lineage/readmissions._int_encounter")
assert r.status_code == 200
data = r.json()
assert data["table"] == "readmissions._int_encounter"
assert "inputs" in data
def test_table_not_found(self, client) -> None:
r = client.get("/lineage/nonexistent.table")
assert r.status_code == 404
def test_export_mermaid(self, client) -> None:
r = client.get("/lineage/export/mermaid")
assert r.status_code == 200
data = r.json()
assert data["format"] == "mermaid"
assert "graph LR" in data["content"]
def test_export_dot(self, client) -> None:
r = client.get("/lineage/export/dot")
assert r.status_code == 200
data = r.json()
assert data["format"] == "dot"
assert "digraph" in data["content"]

View File

@@ -59,27 +59,27 @@ class TestLoad:
class TestGenerate:
def test_generate_models(self) -> None:
result = runner.invoke(app, ["generate", "models"])
def test_generate_models_help(self) -> None:
result = runner.invoke(app, ["generate", "models", "--help"])
assert result.exit_code == 0
assert "generate models" in result.output
assert "sync" in result.output
class TestBib:
def test_bib_sync(self) -> None:
result = runner.invoke(app, ["bib", "sync"])
def test_bib_sync_help(self) -> None:
result = runner.invoke(app, ["bib", "sync", "--help"])
assert result.exit_code == 0
assert "bib sync" in result.output
assert "dry-run" in result.output
def test_bib_tag(self) -> None:
result = runner.invoke(app, ["bib", "tag"])
assert result.exit_code == 0
assert "bib tag" in result.output
assert "tags found" in result.output
def test_bib_query(self) -> None:
result = runner.invoke(app, ["bib", "query", "pfs"])
assert result.exit_code == 0
assert "bib query" in result.output
assert "items found" in result.output
class TestLake: