def create_progress_note(soap=None, episode_id=None, encounter_id=None, link_obj=None): """Create clinical narrative entries. <soap> must be a dict, the keys being SOAP categories (including U and None=admin) and the values being text (possibly multi-line) Existing but empty ('' or None) categories are skipped. """ if soap is None: return True if not gmSoapDefs.are_valid_soap_cats(soap.keys(), allow_upper = True): raise ValueError('invalid SOAP category in <soap> dictionary: %s', soap) if link_obj is None: link_obj = gmPG2.get_connection(readonly = False) conn_rollback = link_obj.rollback conn_commit = link_obj.commit conn_close = link_obj.close else: conn_rollback = lambda x:x conn_commit = lambda x:x conn_close = lambda x:x instances = {} for cat in soap: val = soap[cat] if val is None: continue if ''.join([ v.strip() for v in val ]) == '': continue instance = create_narrative_item ( narrative = '\n'.join([ v.strip() for v in val ]), soap_cat = cat, episode_id = episode_id, encounter_id = encounter_id, link_obj = link_obj ) if instance is None: continue instances[cat] = instance conn_commit() conn_close() return instances