123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- import numpy as np
- from .. import parser
- from datetime import datetime
- @parser(element='NM1',x12='*', anchor={'41':'submitter','40':'receiver','82':'rendering_provider','85':'billing_provider','87':'pay_to_provider','IL':'patient','PR':'payer','QC':'patient','DN':'referring_provider','77':'provider','2':'billing_provider'}, map={1:'type',3:'name',-1:'id'})
- def NM1 (**_args):
- """
- Expected Element NM1
- ref IL,40,41,82,85,PR ...
- Information about entities (doctors, clearing house, provider). we should be mindful of the references
- """
- # _CODE_INDEX = 1
- # CONTEXT_MAP = {
-
- # '2':{'field':'payer'},
- # 'PR':{'field':'payer'},
- # '41':{'field':'header'},
- # '45':{'field':'ambulance_location'},
- # 'IL':{'field':'patient','map':{'type':2,'first_name':4,'last_name':3}},
- # 'P5':{'field':'plan_sponsor'},
- # '82':{'field':'rendering_provider','map':{'type':2,'first_name':4,'last_name':3}},
- # '85':{'field':'billing_provider'},
-
-
-
- # }
- # _args ['plugin-context'] = {'@ref':CONTEXT_MAP}
- # # _map = {_CODE_INDEX:{'41':'submitter','40':'receiver','PR':'payer'}}
- # _columns = ['type','name','id']
- # _indexes = [1,3,-1]
- # # _info = [{'index':'40','field':'receiver'},{'index':'41','field':'submitter'},{'index':'PR','field':'payer'}]
- # _pointer = _args['parser']
- # _info = _pointer(_columns,_indexes,**_args)
- # self.lastelement = _info
- # return _info
- pass
- @parser(element='N3',x12='837', parent='NM1',map={1:'address_line_1',2:'address_line_2'})
- def N3 (**_args):
- """
- Expected Element N3
- """
- pass
- # _columns = ['address_line_1']
- # return self.parse(_columns,[1,2],**_args)
- @parser(element='N4',x12='*',parent='NM1',map={1:'city',2:'state',3:'zipcode'})
- def N4(**_args):
- """
- Expected Element N4
- """
- # _columns = ['city','state','zip']
- # return self.parse(_columns,[1,2,3],**_args)
- pass
- @parser(element='HI',x12='837', map={1:'type',2:'code'})
- def HI(**_args):
- """
- Expected Element HI
- This function will parse diagnosis codes ICD 9/10
- """
- # _columns = ['code','type']
- # return self.parse(_columns,[2,1],**_args)
- pass
- @parser(element='AMT',x12='837',map={2:'patient_amount',1:'patient_amount_qualifier'})
- def AMT (**_args):
- """
- Expected Element AMT
- """
- # _columns = ['amount','qualifier']
- # return self.parse(_columns,[2,1],**_args)
- pass
- @parser(element='SBR',x12='837',field='subscriber',map={9:'vendor',2:'individual_code',1:'type'})
- def SBR (**_args):
- """
- Expected Element SBR
- """
- # _index = [9,1]
- # _columns = ['vendor','individual_code','type']
- # return self.parse(_columns,[9,2,1],**_args)
- pass
- @parser(element='DMG',x12='837', field='patient',map={2:'dob',3:'gender',1:'format'})
- def DMG (**_args):
- """
- Expected Element DMG, these need to be stored in a patient object
- """
- _data = _args['data']
- _y = _data['dob'][:4]
- _m= _data['dob'][4:6]
- _d = _data['dob'][6:].strip()
- _data['dob'] = datetime(year=int(_y), month=int(_m),day=int(_d))
- return _data
- # _columns = ['dob','gender','format']
- # _info = self.parse(_columns,[2,3,1],**_args)
-
- # return {'patient':_info}
- pass
- @parser(element='DTP', x12='837', field='date',map={3:['end_date','start_date']})
- def DTP (**_args):
- """
- Expected Element DTP
- """
- # _columns = ['to','from','type']
- # return self.parse(_columns,[3],**_args)
- _data = _args['data']
- _data['end_date'] = '-'.join([_data['end_date'][:4],_data['end_date'][4:6],_data['end_date'][6:]])
- _data['start_date'] = '-'.join([_data['start_date'][:4],_data['start_date'][4:6],_data['start_date'][6:]])
- return _data
- pass
- @parser(element='PER',anchor={'IC':'submitter'},map={2:'contact',4:'phone_number',8:'email'})
- def PER (**_args):
- """
- Expected Element PER
- """
- # _CODE_INDEX = 1
- # _map = {_CODE_INDEX:{'IC':'submitter'}} # attribute to store the data in
- # _columns = ['contact_name','phone','email']
- # _info = self.parse (_columns,[2,4,8],**_args)
- #
- # @TODO: Inspect the configuration file for the attribute information
- #
- # return _info
- pass
- @parser(element='CLM',x12='837',map={1:'claim_id',2:'claim_amount',5:'facility_code',5:'facility_qualifier',5:'frequency_code'})
- def CLM (**_args):
- """
- Expected Element CLM
- """
- _data = _args['data']
- _data['claim_amount'] = np.float64(_data['claim_amount']) if _data['claim_amount'] not in ['',None] else ''
- return _data
- # _columns = ['claim_id','claim_amount','facility_code','facility_qualifier','frequency_code']
- # return self.parse(_columns,[1,2,5,5,5],**_args)
- pass
- # @parser(element='REF', field='ref',map={2:'id'})
- def REF (**_args):
- _columns = ['identifier','qualifier','']
- pass
- @parser(element='HI',x12='837',container='diagnosis',map={1:'code',2:'type'})
- def HI (**_args):
- """
- Expected Element HI
- """
- # _columns = ['code','type']
- # return self.parse(_columns,[1,2],**_args)
- _data = _args['data']
- if ':' in _data['code'] :
- _data['type'],_data['code'] = _data['code'].split(':')
- return _data
-
- @parser(element=['SV1','SV3'],x12='837',container='procedures',map={1:['type','code'],2:'amount'})
- def SV1 (**_args):
- """
- Expected Element SV1
- """
- # _row = _args['row'] if type(_args['row']) == list else _args['row'].split('*')
- # _columns = ['type','code','amount','modifier_1','modifier_2','modifier_3','modifier_4','place_of_service','units','measurement']
- # return self.parse(_columns,[1,1,2,1,1,1,1,5,4,3],**_args)
- _data = _args['data']
- if 'type' in _data :
- _data['type'] = _data['type'].split(':')[0]
- _data['code'] = _data['code'].split(':')[1]
- _data['amount']= np.float64(_data['amount'])
- return _data
- pass
- @parser (element='HL',x12='837', field='patient', map={1:'_index',2:'parent_code',3:'level_code',4:'child_code'})
- def HL (**_args) :
- """,
- Expected Element HL
- The expected block is supposed to be unprocessed (to make things simple)
- """
- pass
-
- # _data = _args['data']
- # _data['_index'] = int(_data['_index'])
- # return _data
- # # _row = _args['row'] if type(_args['row']) == list else _args['row'].split('~')
-
- # # _attr = self.elements() #[_name for _name in dir() if not _name.islower() and not _name.startswith('_')]
- # # _pointers = [getattr(_name) for _name in _attr]
- # # _map = dict(zip(_attr,_pointers))
- # _map = self.pointers()
-
- # #
- # # The index here tells us what we are processing i.e index == 1 something about header
- # #
- # _columns = ['_index','parent','code','child']
- # # _args['row'] = _row[0]
-
- # _info = self.parse (_columns,[1,2,3,4],**_args)
- # # _field = 'billing_provider' if _info['_index'] == '1' else 'patient'
- # # _config ={'field':_field}
- # return _info
|