diff --git a/.github/workflows/lint_sqlfluff.yml b/.github/workflows/lint_sqlfluff.yml index 0986785b..d6e1c3f0 100644 --- a/.github/workflows/lint_sqlfluff.yml +++ b/.github/workflows/lint_sqlfluff.yml @@ -1,11 +1,17 @@ name: SQLFluff +# Lints changed mimic-iv/concepts/*.sql on pull requests and posts GitHub +# annotations. Fork PRs skip Annotate — GITHUB_TOKEN cannot create check runs +# from forks (Resource not accessible by integration / 403). on: - pull_request jobs: lint-mimic-iv: runs-on: ubuntu-latest + permissions: + contents: read + checks: write steps: - name: checkout uses: actions/checkout@v7 @@ -35,8 +41,14 @@ jobs: shell: bash run: sqlfluff lint --format github-annotation --annotation-level failure --nofail ${{ steps.get_files_to_lint.outputs.lintees }} > annotations.json - name: Annotate + # Same-repo PRs only: fork tokens get 403 creating check runs, and + # ignore-unauthorized-error does not treat that as unauthorized. + if: > + steps.get_files_to_lint.outputs.lintees != '' && + github.event.pull_request.head.repo.full_name == github.repository uses: yuzutech/annotations-action@v0.6.0 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" title: "SQLFluff Lint" - input: "./annotations.json" \ No newline at end of file + input: "./annotations.json" + ignore-unauthorized-error: true diff --git a/mimic-iv/concepts/measurement/complete_blood_count.sql b/mimic-iv/concepts/measurement/complete_blood_count.sql index 4e754a1d..50e3f32a 100644 --- a/mimic-iv/concepts/measurement/complete_blood_count.sql +++ b/mimic-iv/concepts/measurement/complete_blood_count.sql @@ -8,7 +8,11 @@ SELECT , MAX(CASE WHEN itemid = 51221 THEN valuenum ELSE NULL END) AS hematocrit , MAX(CASE WHEN itemid = 51222 THEN valuenum ELSE NULL END) AS hemoglobin , MAX(CASE WHEN itemid = 51248 THEN valuenum ELSE NULL END) AS mch - , MAX(CASE WHEN itemid = 51249 THEN valuenum ELSE NULL END) AS mchc + , MAX( + CASE + WHEN itemid = 51249 AND valueuom = 'g/dL' THEN valuenum ELSE NULL + END + ) AS mchc , MAX(CASE WHEN itemid = 51250 THEN valuenum ELSE NULL END) AS mcv , MAX(CASE WHEN itemid = 51265 THEN valuenum ELSE NULL END) AS platelet , MAX(CASE WHEN itemid = 51279 THEN valuenum ELSE NULL END) AS rbc @@ -30,6 +34,8 @@ WHERE le.itemid IN , 51301 -- WBC ) AND valuenum IS NOT NULL + -- MCHC (51249) is sometimes recorded with valueuom '%' in error; keep g/dL only + AND (itemid != 51249 OR valueuom = 'g/dL') -- lab values cannot be 0 and cannot be negative AND valuenum > 0 GROUP BY le.specimen_id diff --git a/mimic-iv/concepts/measurement/inflammation.sql b/mimic-iv/concepts/measurement/inflammation.sql index c41066db..1a64d10a 100644 --- a/mimic-iv/concepts/measurement/inflammation.sql +++ b/mimic-iv/concepts/measurement/inflammation.sql @@ -4,7 +4,11 @@ SELECT , MAX(charttime) AS charttime , le.specimen_id -- convert from itemid into a meaningful column - , MAX(CASE WHEN itemid = 50889 THEN valuenum ELSE NULL END) AS crp + , MAX( + CASE + WHEN itemid = 50889 AND valueuom = 'mg/L' THEN valuenum ELSE NULL + END + ) AS crp FROM `physionet-data.mimiciv_hosp.labevents` le WHERE le.itemid IN ( @@ -12,6 +16,8 @@ WHERE le.itemid IN 50889 -- crp ) AND valuenum IS NOT NULL + -- CRP (50889) rows with missing valueuom are excluded; mg/L is the expected unit + AND (itemid != 50889 OR valueuom = 'mg/L') -- lab values cannot be 0 and cannot be negative AND valuenum > 0 GROUP BY le.specimen_id diff --git a/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql b/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql index 6dfabe26..18f16e7d 100644 --- a/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql +++ b/mimic-iv/concepts_duckdb/measurement/complete_blood_count.sql @@ -8,7 +8,7 @@ SELECT MAX(CASE WHEN itemid = 51221 THEN valuenum ELSE NULL END) AS hematocrit, MAX(CASE WHEN itemid = 51222 THEN valuenum ELSE NULL END) AS hemoglobin, MAX(CASE WHEN itemid = 51248 THEN valuenum ELSE NULL END) AS mch, - MAX(CASE WHEN itemid = 51249 THEN valuenum ELSE NULL END) AS mchc, + MAX(CASE WHEN itemid = 51249 AND valueuom = 'g/dL' THEN valuenum ELSE NULL END) AS mchc, MAX(CASE WHEN itemid = 51250 THEN valuenum ELSE NULL END) AS mcv, MAX(CASE WHEN itemid = 51265 THEN valuenum ELSE NULL END) AS platelet, MAX(CASE WHEN itemid = 51279 THEN valuenum ELSE NULL END) AS rbc, @@ -19,6 +19,9 @@ FROM mimiciv_hosp.labevents AS le WHERE le.itemid IN (51221, 51222, 51248, 51249, 51250, 51265, 51279, 51277, 52159, 51301) AND NOT valuenum IS NULL + AND ( + itemid <> 51249 OR valueuom = 'g/dL' + ) AND valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file diff --git a/mimic-iv/concepts_duckdb/measurement/inflammation.sql b/mimic-iv/concepts_duckdb/measurement/inflammation.sql index 6557801c..18a2c739 100644 --- a/mimic-iv/concepts_duckdb/measurement/inflammation.sql +++ b/mimic-iv/concepts_duckdb/measurement/inflammation.sql @@ -5,9 +5,14 @@ SELECT MAX(hadm_id) AS hadm_id, MAX(charttime) AS charttime, le.specimen_id, - MAX(CASE WHEN itemid = 50889 THEN valuenum ELSE NULL END) AS crp + MAX(CASE WHEN itemid = 50889 AND valueuom = 'mg/L' THEN valuenum ELSE NULL END) AS crp FROM mimiciv_hosp.labevents AS le WHERE - le.itemid IN (50889) AND NOT valuenum IS NULL AND valuenum > 0 + le.itemid IN (50889) + AND NOT valuenum IS NULL + AND ( + itemid <> 50889 OR valueuom = 'mg/L' + ) + AND valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file diff --git a/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql b/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql index 3c408cfe..5a815758 100644 --- a/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql +++ b/mimic-iv/concepts_postgres/measurement/complete_blood_count.sql @@ -9,7 +9,7 @@ SELECT MAX(CASE WHEN itemid = 51221 THEN valuenum ELSE NULL END) AS hematocrit, MAX(CASE WHEN itemid = 51222 THEN valuenum ELSE NULL END) AS hemoglobin, MAX(CASE WHEN itemid = 51248 THEN valuenum ELSE NULL END) AS mch, - MAX(CASE WHEN itemid = 51249 THEN valuenum ELSE NULL END) AS mchc, + MAX(CASE WHEN itemid = 51249 AND valueuom = 'g/dL' THEN valuenum ELSE NULL END) AS mchc, MAX(CASE WHEN itemid = 51250 THEN valuenum ELSE NULL END) AS mcv, MAX(CASE WHEN itemid = 51265 THEN valuenum ELSE NULL END) AS platelet, MAX(CASE WHEN itemid = 51279 THEN valuenum ELSE NULL END) AS rbc, @@ -31,6 +31,9 @@ WHERE 51301 /* WBC */ ) AND NOT valuenum IS NULL + AND /* MCHC (51249) is sometimes recorded with valueuom '%' in error; keep g/dL only */ ( + itemid <> 51249 OR valueuom = 'g/dL' + ) AND /* lab values cannot be 0 and cannot be negative */ valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file diff --git a/mimic-iv/concepts_postgres/measurement/inflammation.sql b/mimic-iv/concepts_postgres/measurement/inflammation.sql index 4f7f0bc2..263ae093 100644 --- a/mimic-iv/concepts_postgres/measurement/inflammation.sql +++ b/mimic-iv/concepts_postgres/measurement/inflammation.sql @@ -5,11 +5,14 @@ SELECT MAX(hadm_id) AS hadm_id, MAX(charttime) AS charttime, le.specimen_id, /* convert from itemid into a meaningful column */ - MAX(CASE WHEN itemid = 50889 THEN valuenum ELSE NULL END) AS crp + MAX(CASE WHEN itemid = 50889 AND valueuom = 'mg/L' THEN valuenum ELSE NULL END) AS crp FROM mimiciv_hosp.labevents AS le WHERE le.itemid IN (50889 /* 51652 -- high sensitivity CRP */ /* crp */) AND NOT valuenum IS NULL + AND /* CRP (50889) rows with missing valueuom are excluded; mg/L is the expected unit */ ( + itemid <> 50889 OR valueuom = 'mg/L' + ) AND /* lab values cannot be 0 and cannot be negative */ valuenum > 0 GROUP BY le.specimen_id \ No newline at end of file