medicafe 0.240613.0__py3-none-any.whl → 0.240716.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of medicafe might be problematic. Click here for more details.

@@ -1,29 +1,30 @@
1
1
  # MediLink_Parser.py
2
+
2
3
  def parse_era_content(content):
3
4
  extracted_data = []
4
5
  normalized_content = content.replace('~\n', '~')
5
6
  lines = normalized_content.split('~')
6
-
7
+
7
8
  record = {}
8
9
  check_eft, payer_address = None, None
9
10
  allowed_amount, write_off, patient_responsibility, adjustment_amount = 0, 0, 0, 0
10
11
  is_payer_section = False
11
-
12
+
12
13
  for line in lines:
13
14
  segments = line.split('*')
14
-
15
+
15
16
  if segments[0] == 'TRN' and len(segments) > 2:
16
17
  check_eft = segments[2]
17
-
18
+
18
19
  if segments[0] == 'N1':
19
20
  if segments[1] == 'PR':
20
21
  is_payer_section = True
21
22
  elif segments[1] == 'PE':
22
23
  is_payer_section = False
23
-
24
+
24
25
  if is_payer_section and segments[0] == 'N3' and len(segments) > 1:
25
26
  payer_address = segments[1]
26
-
27
+
27
28
  if segments[0] == 'CLP' and len(segments) >= 5:
28
29
  if record:
29
30
  if adjustment_amount == 0 and (write_off > 0 or patient_responsibility > 0):
@@ -34,12 +35,12 @@ def parse_era_content(content):
34
35
  'Allowed Amount': allowed_amount,
35
36
  'Write Off': write_off,
36
37
  'Patient Responsibility': patient_responsibility,
37
- 'Adjustment Amount': adjustment_amount,
38
+ 'Adjustment Amount': adjustment_amount,
38
39
  })
39
40
  extracted_data.append(record)
40
-
41
+
41
42
  allowed_amount, write_off, patient_responsibility, adjustment_amount = 0, 0, 0, 0
42
-
43
+
43
44
  record = {
44
45
  'Check EFT': check_eft,
45
46
  'Chart Number': segments[1],
@@ -47,7 +48,7 @@ def parse_era_content(content):
47
48
  'Amount Paid': segments[4],
48
49
  'Charge': segments[3],
49
50
  }
50
-
51
+
51
52
  elif segments[0] == 'CAS':
52
53
  if segments[1] == 'CO':
53
54
  write_off += float(segments[3])
@@ -55,13 +56,13 @@ def parse_era_content(content):
55
56
  patient_responsibility += float(segments[3])
56
57
  elif segments[1] == 'OA':
57
58
  adjustment_amount += float(segments[3])
58
-
59
+
59
60
  elif segments[0] == 'AMT' and segments[1] == 'B6':
60
61
  allowed_amount += float(segments[2])
61
-
62
+
62
63
  elif segments[0] == 'DTM' and (segments[1] == '232' or segments[1] == '472'):
63
64
  record['Date of Service'] = segments[2]
64
-
65
+
65
66
  if record:
66
67
  if adjustment_amount == 0 and (write_off > 0 or patient_responsibility > 0):
67
68
  adjustment_amount = write_off + patient_responsibility
@@ -69,10 +70,14 @@ def parse_era_content(content):
69
70
  'Allowed Amount': allowed_amount,
70
71
  'Write Off': write_off,
71
72
  'Patient Responsibility': patient_responsibility,
72
- 'Adjustment Amount': adjustment_amount,
73
+ 'Adjustment Amount': adjustment_amount,
73
74
  })
74
75
  extracted_data.append(record)
75
-
76
+
77
+ print("Parsed ERA Content:")
78
+ for data in extracted_data:
79
+ print(data)
80
+
76
81
  return extracted_data
77
82
 
78
83
  def parse_277_content(content):
@@ -87,25 +92,102 @@ def parse_277_content(content):
87
92
  current_record = {}
88
93
  elif parts[0] == 'NM1':
89
94
  if parts[1] == 'QC':
90
- current_record['Last'] = parts[3]
91
- current_record['First'] = parts[4]
95
+ current_record['Patient'] = parts[3] + ' ' + parts[4]
92
96
  elif parts[1] == '41':
93
97
  current_record['Clearing House'] = parts[3]
98
+ elif parts[1] == 'PR':
99
+ current_record['Payer'] = parts[3]
94
100
  elif parts[0] == 'TRN':
95
- current_record['Claim Status Tracking #'] = parts[2]
101
+ current_record['Claim #'] = parts[2]
96
102
  elif parts[0] == 'STC':
97
103
  current_record['Status'] = parts[1]
98
- current_record['Acknowledged Amt'] = parts[4]
104
+ if len(parts) > 4:
105
+ current_record['Paid'] = parts[4]
99
106
  elif parts[0] == 'DTP':
100
107
  if parts[1] == '472':
101
- current_record['Date of Service'] = parts[3]
108
+ current_record['Serv.'] = parts[3]
102
109
  elif parts[1] == '050':
103
- current_record['Received Date'] = parts[3]
110
+ current_record['Proc.'] = parts[3]
104
111
  elif parts[0] == 'AMT':
105
112
  if parts[1] == 'YU':
106
- current_record['Billed Amt'] = parts[2]
107
-
113
+ current_record['Charged'] = parts[2]
114
+
108
115
  if current_record:
109
116
  records.append(current_record)
110
-
117
+
118
+ print("Parsed 277 Content:")
119
+ for record in records:
120
+ print(record)
121
+
111
122
  return records
123
+
124
+ def parse_277IBR_content(content):
125
+ return parse_277_content(content)
126
+
127
+ def parse_277EBR_content(content):
128
+ return parse_277_content(content)
129
+
130
+ def parse_dpt_content(content):
131
+ extracted_data = []
132
+ lines = content.splitlines()
133
+ record = {}
134
+ for line in lines:
135
+ if 'Patient Account Number:' in line:
136
+ if record:
137
+ extracted_data.append(record)
138
+ record = {}
139
+ parts = line.split(':')
140
+ if len(parts) == 2:
141
+ key, value = parts[0].strip(), parts[1].strip()
142
+ record[key] = value
143
+ if record:
144
+ extracted_data.append(record)
145
+
146
+ print("Parsed DPT Content:")
147
+ for data in extracted_data:
148
+ print(data)
149
+
150
+ return extracted_data
151
+
152
+ def parse_ebt_content(content):
153
+ extracted_data = []
154
+ lines = content.splitlines()
155
+ record = {}
156
+ for line in lines:
157
+ if 'Patient Name:' in line and record:
158
+ extracted_data.append(record)
159
+ record = {}
160
+ parts = line.split(':')
161
+ if len(parts) == 2:
162
+ key, value = parts[0].strip(), parts[1].strip()
163
+ record[key] = value
164
+ if record:
165
+ extracted_data.append(record)
166
+
167
+ print("Parsed EBT Content:")
168
+ for data in extracted_data:
169
+ print(data)
170
+
171
+ return extracted_data
172
+
173
+ def parse_ibt_content(content):
174
+ extracted_data = []
175
+ lines = content.splitlines()
176
+ record = {}
177
+ for line in lines:
178
+ if 'Submitter Batch ID:' in line:
179
+ if record:
180
+ extracted_data.append(record)
181
+ record = {}
182
+ parts = line.split(':')
183
+ if len(parts) == 2:
184
+ key, value = parts[0].strip(), parts[1].strip()
185
+ record[key] = value
186
+ if record:
187
+ extracted_data.append(record)
188
+
189
+ print("Parsed IBT Content:")
190
+ for data in extracted_data:
191
+ print(data)
192
+
193
+ return extracted_data
MediLink/MediLink_UI.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from datetime import datetime
2
2
  import os
3
+ import MediLink_ConfigLoader
3
4
 
4
5
  def display_welcome():
5
6
  print("\n" + "-" * 60)
@@ -76,32 +77,9 @@ def get_new_endpoint_choice():
76
77
  # Function to display full list of insurance options
77
78
  def display_insurance_options(insurance_options=None):
78
79
 
79
- # Define insurance options with codes and descriptions
80
- insurance_options = {
81
- "11": "Other Non-Federal Programs",
82
- "12": "Preferred Provider Organization (PPO)",
83
- "13": "Point of Service (POS)",
84
- "14": "Exclusive Provider Organization (EPO)",
85
- "15": "Indemnity Insurance",
86
- "16": "Health Maintenance Organization (HMO) Medicare Risk",
87
- "17": "Dental Maintenance Organization",
88
- "AM": "Automobile Medical",
89
- "BL": "Blue Cross/Blue Shield",
90
- "CH": "Champus",
91
- "CI": "Commercial Insurance Co.",
92
- "DS": "Disability",
93
- "FI": "Federal Employees Program",
94
- "HM": "Health Maintenance Organization",
95
- "LM": "Liability Medical",
96
- "MA": "Medicare Part A",
97
- "MB": "Medicare Part B",
98
- "MC": "Medicaid",
99
- "OF": "Other Federal Program",
100
- "TV": "Title V",
101
- "VA": "Veterans Affairs Plan",
102
- "WC": "Workers Compensation Health Claim",
103
- "ZZ": "Mutually Defined"
104
- }
80
+ # Retrieve insurance options with codes and descriptions
81
+ config, _ = MediLink_ConfigLoader.load_configuration()
82
+ insurance_options = config['MediLink_Config'].get('insurance_options')
105
83
 
106
84
  print("\nInsurance Type Options:")
107
85
  for code, description in sorted(insurance_options.items()):
MediLink/MediLink_Up.py CHANGED
@@ -71,7 +71,8 @@ def submit_claims(detailed_patient_data_grouped_by_endpoint, config):
71
71
 
72
72
  print("No files were converted for transmission to {0}.".format(endpoint))
73
73
  else:
74
- print("No internet connection detected.")
74
+ print("Error: No internet connection detected.")
75
+ log("Error: No internet connection detected.", level="ERROR")
75
76
  try_again = input("Do you want to try again? (Y/N): ").strip().lower()
76
77
  if try_again != 'y':
77
78
  print("Exiting transmission process. Please try again later.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: medicafe
3
- Version: 0.240613.0
3
+ Version: 0.240716.2
4
4
  Summary: MediCafe
5
5
  Home-page: https://github.com/katanada2
6
6
  Author: Daniel Vidaud
@@ -16,6 +16,7 @@ Requires-Dist: pandas ==0.20.0
16
16
  Requires-Dist: tqdm ==4.14.0
17
17
  Requires-Dist: lxml ==4.2.0
18
18
  Requires-Dist: python-docx
19
+ Requires-Dist: PyYAML ==5.2
19
20
 
20
21
 
21
22
  # Project Overview: MediCafe
@@ -1,43 +1,47 @@
1
- MediBot/MediBot.bat,sha256=9RK-ID3T2xPz3cDEeTlv7nhMy_GhbGYtbD4vutGOSeE,6153
1
+ MediBot/MediBot.bat,sha256=B_iUMQro6kPrTbGOePsTvOq3N9nXn5fE7xnkt4jfSrE,7032
2
2
  MediBot/MediBot.py,sha256=X7ZU-xYsnw7xL7nBZTDudhSXdsnEavcHORE4hPM4L58,16704
3
3
  MediBot/MediBot_Charges.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- MediBot/MediBot_Crosswalk_Library.py,sha256=PRsPtoGOwpHvqYnLl_ABTMNkKJlFHtqjgldWxnXQmQI,14669
4
+ MediBot/MediBot_Crosswalk_Library.py,sha256=RxwihSpPtTlnDbPiQ1VWnPVVdjYA-L69OPWREXMTGiQ,14862
5
5
  MediBot/MediBot_Post.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  MediBot/MediBot_Preprocessor.py,sha256=OI9rfDF01OLuLFZoSzIceO3r5fkKEFN7tynXPIceoo4,11941
7
7
  MediBot/MediBot_Preprocessor_lib.py,sha256=aU5VWwLqDxka8DGLkrji6C9rYMzoqjxLScZ64Ya-0ok,24170
8
8
  MediBot/MediBot_UI.py,sha256=_CS9BV3882mNp-UmMUPKZOsDI3ZGxft5mcr36-Nq1FQ,10318
9
9
  MediBot/MediBot_dataformat_library.py,sha256=AVRAl4oDHR6nq2bBiJf2YABrdtnfiQYdYzV0BMvL7U0,8346
10
- MediBot/MediBot_docx_decoder.py,sha256=y2OOjRPWKYn5LnCX3lngNQtGkOOEE6VDaeqvkkIc5ec,13341
10
+ MediBot/MediBot_docx_decoder.py,sha256=nO5N8qPsZoiFzicSJ5mbBfjaqGinxgh_VzjLhEsj95U,13712
11
11
  MediBot/MediPost.py,sha256=C1hZJFr65rN6F_dckjdBxFC0vL2CoqY9W3YFqU5HXtE,336
12
12
  MediBot/PDF_to_CSV_Cleaner.py,sha256=ZZphmq-5K04DkrZNlcwNAIoZPOD_ROWvS3PMkKFxeiM,8799
13
13
  MediBot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  MediBot/update_json.py,sha256=eAu3BPYtlGlwVGZdTUmrqq4qLTVcplt-6EnzcGCheG0,1557
15
15
  MediBot/update_medicafe.py,sha256=CYxRHNXb-ZwGELWSXJA90foMwac_GBdXhD9hwClUjpA,2249
16
- MediLink/MediLink.py,sha256=X95f6h3s5zgfPrmVO7jCIU8OHmxbiqiUB_XVQI5oVf8,19616
16
+ MediLink/MediLink.py,sha256=GRMe3OiskBGVpHDGIrTmY4_t2pc5J_pznHt5Z5mU8X8,18054
17
17
  MediLink/MediLink_277_decoder.py,sha256=Z3hQK2j-YzdXjov6aDlDRc7M_auFBnl3se4OF5q6_04,4358
18
18
  MediLink/MediLink_837p_encoder.py,sha256=onrbzk-6QG97oHRn-AvDtcsYyQ-OpqZJE4KWjgPTwxQ,23550
19
- MediLink/MediLink_837p_encoder_library.py,sha256=RdXsG-k_plNE4vMgFel7L00nwq3pG67iWCpJGXlUtjs,42676
20
- MediLink/MediLink_API_v2.py,sha256=P--ud2ENGsqnB8JLQQ_eiEJw8KGSlIO2eQKz0DfXeNo,7670
19
+ MediLink/MediLink_837p_encoder_library.py,sha256=_K162u1spMWZg-7HMebEU2yciGx_1T6lX7FW02Ek3fA,41831
20
+ MediLink/MediLink_API_Generator.py,sha256=AvKJOoQKl2_dJG517chsVAjBKqEEIEz_c12OL03J428,10387
21
+ MediLink/MediLink_API_v2.py,sha256=mcIgLnXPS_NaUBrkKJ8mxCUaQ0AuQUeU1vG6DoplbVY,7733
22
+ MediLink/MediLink_API_v3.py,sha256=8X-5ldKnAJzfE2R0nywa6xYq6C7kqJ3lLDCyqXg9FP4,15911
21
23
  MediLink/MediLink_APIs.py,sha256=_EFNjBFwtZsEJM771xa6g-zQCCRrebIHj73ElVVZ8Fs,6229
22
- MediLink/MediLink_ConfigLoader.py,sha256=rrZmy1_d8-2qx_G7pCph-zhlQq_6c6jorYl47J0DxYo,3914
24
+ MediLink/MediLink_ClaimStatus.py,sha256=s6Ll46yU2-jJueF-3jqVyJ53s1Qll1MONkX2vm1alLY,8655
25
+ MediLink/MediLink_ConfigLoader.py,sha256=p1Fkm-KeRR1vcIS-7K6RUP7g1B7HrgO_KbjmwwNCX4A,4161
23
26
  MediLink/MediLink_DataMgmt.py,sha256=y8nNe25mj2ajUmPo7508q_T1vxkYiKzwdRit0oX8V9s,20344
24
- MediLink/MediLink_Decoder.py,sha256=F_cCYhLwhQj72YgFpSuo1FNcxRrHWbaY2iVpD_fypxc,2418
25
- MediLink/MediLink_Down.py,sha256=ND0_QPhKXTqN8JYqbzwZbfxvn3X-iqFHn4SCm4EXkug,5916
27
+ MediLink/MediLink_Decoder.py,sha256=L4b3OnVERhgP68T4Lvty9MJNXutPAjXRPBjYpzSj2ZM,7139
28
+ MediLink/MediLink_Deductible.py,sha256=3uCUluPx6sHsU7tj9wM62PZK_WY8VOPFlXG3Iccgiy4,8520
29
+ MediLink/MediLink_Down.py,sha256=1SIzPLSI4w4Prb2u0FXsf1Bd6Nksb0tMv0N8w1aWzyE,7110
26
30
  MediLink/MediLink_ERA_decoder.py,sha256=MiOtDcXnmevPfHAahIlTLlUc14VcQWAor9Xa7clA2Ts,8710
27
31
  MediLink/MediLink_Gmail.py,sha256=FV13-umZIouhetnwkGOBgFQYl5FTyOs__SpjaycUxKk,21195
28
32
  MediLink/MediLink_Mailer.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- MediLink/MediLink_Parser.py,sha256=U1hMkhTObNHk_4AXNnCAonnnPYaCiz9L0epP6a0KH2k,4271
33
+ MediLink/MediLink_Parser.py,sha256=p2RlCut84hESXjR7tyCZ9O-gUbsUQeYqRp1bXhKbxu4,6322
30
34
  MediLink/MediLink_Scan.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
35
  MediLink/MediLink_Scheduler.py,sha256=UJvxhDvHraqra2_TlQVlGeh5jRFrrfK6nCVUHnKOEMY,38
32
36
  MediLink/MediLink_StatusCheck.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- MediLink/MediLink_UI.py,sha256=k_Kz5tB2NC2CIZLd3JRWCu5IJfGUAr14Iw4kY6sECZo,6979
34
- MediLink/MediLink_Up.py,sha256=02KS_pRZxFd-dZek-YzYfph409BBRfNKCouAWph9op8,18460
37
+ MediLink/MediLink_UI.py,sha256=kAtWApyvaE1qMOy5Vzszy3zPBI25wT29jG1XkIWnAAs,6164
38
+ MediLink/MediLink_Up.py,sha256=tKkMaz0FvbIXCJ9eQ2LXp6r4_Ou4yDaqRtekfZE6bF0,18546
35
39
  MediLink/MediLink_batch.bat,sha256=nqL5QwCLyRQFSPdv6kgtcV_cpky7FXSOWVl6OxjRXb4,118
36
40
  MediLink/Soumit_api.py,sha256=5JfOecK98ZC6NpZklZW2AkOzkjvrbYxpJpZNH3rFxDw,497
37
41
  MediLink/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
42
  MediLink/test.py,sha256=kSvvJRL_3fWuNS3_x4hToOnUljGLoeEw6SUTHQWQRJk,3108
39
- medicafe-0.240613.0.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
40
- medicafe-0.240613.0.dist-info/METADATA,sha256=v1DwnPeliwkBR2b7dA6YEdRGu_LEUAjwGZvINtuVpbM,4596
41
- medicafe-0.240613.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
42
- medicafe-0.240613.0.dist-info/top_level.txt,sha256=3uOwR4q_SP8Gufk2uCHoKngAgbtdOwQC6Qjl7ViBa_c,17
43
- medicafe-0.240613.0.dist-info/RECORD,,
43
+ medicafe-0.240716.2.dist-info/LICENSE,sha256=65lb-vVujdQK7uMH3RRJSMwUW-WMrMEsc5sOaUn2xUk,1096
44
+ medicafe-0.240716.2.dist-info/METADATA,sha256=edgBR0DGETtGim21JGQ13iz2K-kqqJwl41hXGAYJxRQ,4625
45
+ medicafe-0.240716.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
46
+ medicafe-0.240716.2.dist-info/top_level.txt,sha256=3uOwR4q_SP8Gufk2uCHoKngAgbtdOwQC6Qjl7ViBa_c,17
47
+ medicafe-0.240716.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5