Skip to content

Instantly share code, notes, and snippets.

@shcallaway
Created July 4, 2021 20:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shcallaway/a0508829d1c7765f569cfac3be7a368b to your computer and use it in GitHub Desktop.
Save shcallaway/a0508829d1c7765f569cfac3be7a368b to your computer and use it in GitHub Desktop.
Parse CPT codes and case info from a SIS Complete CSV export
#!/usr/local/bin/python3
import csv
import re
import argparse
CASES_OUT = 'sis-parser-out-cases.csv'
CPTS_OUT = 'sis-parser-out-cpts.csv'
parser = argparse.ArgumentParser(prog="sis-parser.py", description='Parse cases and CPT codes from a SIS Complete CSV export.')
parser.add_argument('--input', help='CSV file to parse', required=True)
args = parser.parse_args()
cpts = set()
rows = []
with open(args.input, newline='') as data:
reader = csv.DictReader(data)
for row in reader:
rows.append(row)
for row in rows:
# Extract CPTs from Procedures col
procedures = row['Procedures']
row_cpts = re.findall('[0-9]{5}', procedures)
# Add CPTs from this case to set
[cpts.add(cpt) for cpt in row_cpts]
# Add CPTs col
row['cpts'] = ', '.join(row_cpts)
# Write data to a new CSV
with open(CASES_OUT, 'w', newline='') as data:
fieldnames = ['date', 'time', 'physician', 'cpts', 'patient', 'status']
writer = csv.DictWriter(data, fieldnames=fieldnames)
writer.writeheader()
[writer.writerow({
'date': row['\ufeffDateofSurgery'],
'time': row['CaseStartTime'],
'physician': row['Physician'],
'cpts': row['cpts'],
'patient': row['PatientName'],
'status': row['CaseStatus']
}) for row in rows]
# Write CPT codes to their own CSV
with open(CPTS_OUT, 'w', newline='') as data:
fieldnames = ['code']
writer = csv.DictWriter(data, fieldnames=fieldnames)
writer.writeheader()
[writer.writerow({
'code': cpt
}) for cpt in cpts]
print('SUMMARY')
print(f'Rows: {len(rows)}')
print(f'CPTs: {len(cpts)}')
print(f'Wrote data to {CASES_OUT}')
print(f'Wrote CPTs to {CPTS_OUT}')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment