medicafe 0.250819.1__tar.gz → 0.250819.2__tar.gz

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.
Files changed (79) hide show
  1. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/__init__.py +1 -1
  2. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/__init__.py +1 -1
  3. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_837p_encoder_library.py +28 -20
  4. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/__init__.py +1 -1
  5. {medicafe-0.250819.1 → medicafe-0.250819.2}/PKG-INFO +1 -1
  6. {medicafe-0.250819.1 → medicafe-0.250819.2}/medicafe.egg-info/PKG-INFO +1 -1
  7. {medicafe-0.250819.1 → medicafe-0.250819.2}/setup.py +1 -1
  8. {medicafe-0.250819.1 → medicafe-0.250819.2}/LICENSE +0 -0
  9. {medicafe-0.250819.1 → medicafe-0.250819.2}/MANIFEST.in +0 -0
  10. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot.bat +0 -0
  11. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot.py +0 -0
  12. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_Charges.py +0 -0
  13. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_Crosswalk_Library.py +0 -0
  14. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_Crosswalk_Utils.py +0 -0
  15. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_Post.py +0 -0
  16. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_Preprocessor.py +0 -0
  17. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_Preprocessor_lib.py +0 -0
  18. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_UI.py +0 -0
  19. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_dataformat_library.py +0 -0
  20. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_docx_decoder.py +0 -0
  21. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/MediBot_smart_import.py +0 -0
  22. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/get_medicafe_version.py +0 -0
  23. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/update_json.py +0 -0
  24. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediBot/update_medicafe.py +0 -0
  25. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/MediLink_ConfigLoader.py +0 -0
  26. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/__main__.py +0 -0
  27. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/api_core.py +0 -0
  28. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/api_core_backup.py +0 -0
  29. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/api_factory.py +0 -0
  30. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/api_utils.py +0 -0
  31. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/core_utils.py +0 -0
  32. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/graphql_utils.py +0 -0
  33. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/logging_config.py +0 -0
  34. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/logging_demo.py +0 -0
  35. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/migration_helpers.py +0 -0
  36. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/smart_import.py +0 -0
  37. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediCafe/submission_index.py +0 -0
  38. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/InsuranceTypeService.py +0 -0
  39. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_837p_cob_library.py +0 -0
  40. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_837p_encoder.py +0 -0
  41. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_837p_utilities.py +0 -0
  42. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_API_Generator.py +0 -0
  43. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Azure.py +0 -0
  44. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_ClaimStatus.py +0 -0
  45. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_DataMgmt.py +0 -0
  46. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Decoder.py +0 -0
  47. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Deductible.py +0 -0
  48. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Deductible_Validator.py +0 -0
  49. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Display_Utils.py +0 -0
  50. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Down.py +0 -0
  51. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Gmail.py +0 -0
  52. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Mailer.py +0 -0
  53. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Parser.py +0 -0
  54. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_PatientProcessor.py +0 -0
  55. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Scan.py +0 -0
  56. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Scheduler.py +0 -0
  57. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_UI.py +0 -0
  58. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_Up.py +0 -0
  59. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_insurance_utils.py +0 -0
  60. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_main.py +0 -0
  61. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/MediLink_smart_import.py +0 -0
  62. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/Soumit_api.py +0 -0
  63. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/gmail_http_utils.py +0 -0
  64. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/gmail_oauth_utils.py +0 -0
  65. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/insurance_type_integration_test.py +0 -0
  66. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/openssl.cnf +0 -0
  67. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/test.py +0 -0
  68. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/test_cob_library.py +0 -0
  69. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/test_timing.py +0 -0
  70. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/test_validation.py +0 -0
  71. {medicafe-0.250819.1 → medicafe-0.250819.2}/MediLink/webapp.html +0 -0
  72. {medicafe-0.250819.1 → medicafe-0.250819.2}/README.md +0 -0
  73. {medicafe-0.250819.1 → medicafe-0.250819.2}/medicafe.egg-info/SOURCES.txt +0 -0
  74. {medicafe-0.250819.1 → medicafe-0.250819.2}/medicafe.egg-info/dependency_links.txt +0 -0
  75. {medicafe-0.250819.1 → medicafe-0.250819.2}/medicafe.egg-info/entry_points.txt +0 -0
  76. {medicafe-0.250819.1 → medicafe-0.250819.2}/medicafe.egg-info/not-zip-safe +0 -0
  77. {medicafe-0.250819.1 → medicafe-0.250819.2}/medicafe.egg-info/requires.txt +0 -0
  78. {medicafe-0.250819.1 → medicafe-0.250819.2}/medicafe.egg-info/top_level.txt +0 -0
  79. {medicafe-0.250819.1 → medicafe-0.250819.2}/setup.cfg +0 -0
@@ -19,7 +19,7 @@ Smart Import Integration:
19
19
  medibot_main = get_components('medibot_main')
20
20
  """
21
21
 
22
- __version__ = "0.250819.1"
22
+ __version__ = "0.250819.2"
23
23
  __author__ = "Daniel Vidaud"
24
24
  __email__ = "daniel@personalizedtransformation.com"
25
25
 
@@ -27,7 +27,7 @@ Smart Import System:
27
27
  api_suite = get_api_access()
28
28
  """
29
29
 
30
- __version__ = "0.250819.1"
30
+ __version__ = "0.250819.2"
31
31
  __author__ = "Daniel Vidaud"
32
32
  __email__ = "daniel@personalizedtransformation.com"
33
33
 
@@ -201,8 +201,8 @@ def create_nm1_billing_provider_segment(config, endpoint):
201
201
  # Resolve required values with TestMode-aware enforcement
202
202
  billing_provider_lastname = legacy_require_config_value(
203
203
  [config, endpoint_config],
204
- 'billing_provider_lastname',
205
- config.get('default_billing_provider_name', 'DEFAULT NAME'),
204
+ ['billing_provider_lastname', 'default_billing_provider_name'],
205
+ 'DEFAULT NAME',
206
206
  '2010AA Billing Provider Last Name',
207
207
  config,
208
208
  endpoint
@@ -210,12 +210,12 @@ def create_nm1_billing_provider_segment(config, endpoint):
210
210
  billing_provider_firstname = config.get('billing_provider_firstname', '')
211
211
  billing_provider_npi = legacy_require_config_value(
212
212
  [endpoint_config, config],
213
- 'billing_provider_npi',
214
- config.get('default_billing_provider_npi', 'DEFAULT NPI'),
213
+ ['billing_provider_npi', 'default_billing_provider_npi'],
214
+ 'DEFAULT NPI',
215
215
  '2010AA Billing Provider NPI',
216
216
  config,
217
217
  endpoint
218
- )
218
+ ) # BUG This is stupid. The NPI is the same. Maybe the first and last name registration might vary by endpoint, but the NPI wont.
219
219
 
220
220
  # Determine billing_entity_type_qualifier based on the presence of billing_provider_firstname
221
221
  billing_entity_type_qualifier = '1' if billing_provider_firstname else '2'
@@ -1528,20 +1528,27 @@ DEFAULT_PLACEHOLDER_VALUES = set([
1528
1528
  'NO STATE', 'NO ZIP', 'NO TAX ID', 'NONE'
1529
1529
  ])
1530
1530
 
1531
- def _get_value_from_sources(source_dicts, key):
1532
- for d in source_dicts:
1533
- try:
1534
- if isinstance(d, dict) and key in d:
1535
- val = d.get(key)
1536
- if val not in [None, '']:
1537
- return val
1538
- except Exception:
1539
- pass
1531
+ string_types = (str,)
1532
+
1533
+ def _get_value_from_sources(source_dicts, keys):
1534
+ # Accept a single key or an ordered list/tuple of keys; scan in priority order
1535
+ if not isinstance(keys, (list, tuple)):
1536
+ keys = [keys]
1537
+ for key in keys:
1538
+ for d in source_dicts:
1539
+ try:
1540
+ if isinstance(d, dict) and key in d:
1541
+ val = d.get(key)
1542
+ if val not in [None, '']:
1543
+ return val
1544
+ except Exception:
1545
+ pass
1540
1546
  return None
1541
1547
 
1542
1548
  def legacy_require_config_value(source_dicts, key, default_value, context_label, config, endpoint=None, allow_default_in_test=True):
1543
1549
  """
1544
1550
  Fetch a configuration value from one or more dicts.
1551
+ - `key` may be a string or a list/tuple of keys to try in order (primary, secondary, ...).
1545
1552
  - If found and equals a known placeholder, allow only in TestMode.
1546
1553
  - If missing, allow default only in TestMode (when allow_default_in_test is True).
1547
1554
  - Otherwise raise ValueError to prevent generating malformed 837p.
@@ -1549,18 +1556,19 @@ def legacy_require_config_value(source_dicts, key, default_value, context_label,
1549
1556
  TODO Eventually we should get this functionality into configloader in MediCafe so that we can use it in other places.
1550
1557
  """
1551
1558
  value = _get_value_from_sources(source_dicts, key)
1559
+ key_label = key if isinstance(key, string_types) else "/".join([k for k in key if isinstance(k, string_types)])
1552
1560
  # Found a value
1553
1561
  if value not in [None, '']:
1554
1562
  if isinstance(value, str) and value in DEFAULT_PLACEHOLDER_VALUES:
1555
1563
  if _is_test_mode(config):
1556
1564
  try:
1557
- MediLink_ConfigLoader.log("TEST MODE: Placeholder used for {} -> {}".format(key, value), level="WARNING")
1565
+ MediLink_ConfigLoader.log("TEST MODE: Placeholder used for {} -> {}".format(key_label, value), level="WARNING")
1558
1566
  except Exception:
1559
1567
  pass
1560
- print("TEST MODE: Using placeholder '{}' for {} ({})".format(value, key, context_label))
1568
+ print("TEST MODE: Using placeholder '{}' for {} ({})".format(value, key_label, context_label))
1561
1569
  return value
1562
1570
  else:
1563
- msg = "Missing real value for '{}' in {}. Found placeholder '{}'. Endpoint: {}".format(key, context_label, value, (endpoint or ''))
1571
+ msg = "Missing real value for '{}' in {}. Found placeholder '{}'. Endpoint: {}".format(key_label, context_label, value, (endpoint or ''))
1564
1572
  try:
1565
1573
  MediLink_ConfigLoader.log(msg, level="CRITICAL")
1566
1574
  except Exception:
@@ -1570,12 +1578,12 @@ def legacy_require_config_value(source_dicts, key, default_value, context_label,
1570
1578
  # Missing value entirely
1571
1579
  if allow_default_in_test and _is_test_mode(config):
1572
1580
  try:
1573
- MediLink_ConfigLoader.log("TEST MODE: Default used for {} -> {}".format(key, default_value), level="WARNING")
1581
+ MediLink_ConfigLoader.log("TEST MODE: Default used for {} -> {}".format(key_label, default_value), level="WARNING")
1574
1582
  except Exception:
1575
1583
  pass
1576
- print("TEST MODE: Using default '{}' for {} ({})".format(default_value, key, context_label))
1584
+ print("TEST MODE: Using default '{}' for {} ({})".format(default_value, key_label, context_label))
1577
1585
  return default_value
1578
- msg = "Required configuration '{}' missing for {}. Endpoint: {}".format(key, context_label, (endpoint or ''))
1586
+ msg = "Required configuration '{}' missing for {}. Endpoint: {}".format(key_label, context_label, (endpoint or ''))
1579
1587
  try:
1580
1588
  MediLink_ConfigLoader.log(msg, level="CRITICAL")
1581
1589
  except Exception:
@@ -22,7 +22,7 @@ Smart Import Integration:
22
22
  datamgmt = get_components('medilink_datamgmt')
23
23
  """
24
24
 
25
- __version__ = "0.250819.1"
25
+ __version__ = "0.250819.2"
26
26
  __author__ = "Daniel Vidaud"
27
27
  __email__ = "daniel@personalizedtransformation.com"
28
28
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: medicafe
3
- Version: 0.250819.1
3
+ Version: 0.250819.2
4
4
  Summary: MediCafe
5
5
  Home-page: https://github.com/katanada2/MediCafe
6
6
  Author: Daniel Vidaud
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: medicafe
3
- Version: 0.250819.1
3
+ Version: 0.250819.2
4
4
  Summary: MediCafe
5
5
  Home-page: https://github.com/katanada2/MediCafe
6
6
  Author: Daniel Vidaud
@@ -54,7 +54,7 @@ if long_description_text is None:
54
54
 
55
55
  setup(
56
56
  name='medicafe',
57
- version="0.250819.1",
57
+ version="0.250819.2",
58
58
  description='MediCafe',
59
59
  long_description=long_description_text,
60
60
  long_description_content_type='text/markdown',
File without changes
File without changes
File without changes
File without changes