Add support for multi-page main menu
This commit is contained in:
parent
9fe732e0e1
commit
d261d5200e
@ -26,5 +26,11 @@ async def cmd_listclinics(proc):
|
||||
proc.sendline('^')
|
||||
break
|
||||
proc.sendline('^Patient information AND OE/RR')
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
|
@ -74,7 +74,13 @@ async def cmd_reports(proc, mrn, alpha, omega):
|
||||
else:
|
||||
print(repr(before))
|
||||
assert False
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
text = re.sub(r'\r\n\s+>> CONTINUATION OF .+? <<(?:(?:\r\n)|(?:\s+page \d+))', '', '\r\n'.join(pages))
|
||||
positions = [m.start() for m in re.finditer(r'(?:(?:[ ]+----MICROBIOLOGY----[ ]+page \d+\r\n\r\n)|(?:[ ]+))Reporting Lab:', text)]
|
||||
|
@ -39,7 +39,13 @@ async def cmd_entries(proc, mrn, alpha, omega):
|
||||
proc.sendline(response)
|
||||
if prompt.index == 0 or prompt.index == 1:
|
||||
pages.append(re.sub(r'^\x1b\[H\x1b\[J\x1b\[2J\x1b\[H\r\n[^\r\n]+? Cumulative Vitals\/Measurements Report[ ]+Page \d+\r\n\r\n-{10,}\r\n(?:\d{2}\/\d{2}\/\d{2} \(continued\)\r\n\r\n)?|\r\n\r\n\*\*\*[^\r\n]+\r\n\r\n[^\r\n]+?VAF 10-7987j\r\nUnit:[^\r\n]+\r\nDivision:[^\r\n]+(?:\r\n)?$', '', prompt.before))
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
for m_date in re.finditer(r'^(?P<date>\d{2}\/\d{2}\/\d{2})\r\n(?P<body>.*?\r\n)(?:(?=\d{2}\/)|\r\n|$)', '\r\n'.join(pages), re.DOTALL|re.MULTILINE):
|
||||
g_date = m_date.group('date')
|
||||
|
@ -68,5 +68,11 @@ async def cmd_reports(proc, mrn, alpha, omega):
|
||||
case _: assert False
|
||||
proc.sendline('^')
|
||||
proc.sendline('^Patient information AND OE/RR')
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
|
@ -77,7 +77,13 @@ async def cmd_entries(proc, mrn, alpha, omega):
|
||||
break
|
||||
case _: assert False
|
||||
proc.sendline('^Patient information AND OE/RR')
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
prev = None
|
||||
for m in re.finditer(r'\b\d{2}/\d{2}/\d{2}.*?\r\n\r\n', '\r\n'.join(pages).replace('\x1b[1m', '').replace('\x1b[m', ''), re.DOTALL):
|
||||
|
@ -25,7 +25,13 @@ async def cmd_lookup_patient(proc, query):
|
||||
res.append(prompt.before[:-24] if prompt.index == 0 and prompt.before.endswith('\r\nENTER \'^\' TO STOP, OR \r\n') else prompt.before)
|
||||
if 0 < prompt.index < 4:
|
||||
single = True
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
if single:
|
||||
return [re.search(r'[ ]{2}(?P<name>.+?)[ ]{2}(?:\((?P<alias>[^\)]*?)\))?[ ]{6}(?P<dob>\S+)[ ]{4}(?P<ssn>\S+(?:P \*\*Pseudo SSN\*\*)?)[ ]{5}(?P<yesno>\S+)[ ]{5}(?P<type>.+?)[ ]{6}(?P<no>[^\r\n]*)', res[0].replace('\r\n', '', 1)).groupdict()]
|
||||
@ -65,6 +71,12 @@ async def cmd_lookup_patient_ordinal(proc, query, ordinal, force=False):
|
||||
proc.sendline(response)
|
||||
case autoproc.ExpectMatch(index=5):
|
||||
proc.sendline()
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
return re.sub(r'\r\n\r\n(?:[^\r\n;]+);(?:\([^\)]*?\))? (?:\d+ )?(?:\d{3}-\d{2}-\d{4}P?) (?:[^\r\n]+?)[ ]*?(\r\n={10,}\r\n)\r\n', r'\1', '\r\n'.join(res))
|
||||
|
@ -58,7 +58,13 @@ async def cmd_patients(proc, alpha, omega):
|
||||
summary.extend({k.strip(): v.strip() for k, v in row.groupdict().items()} for row in re.finditer(r'(?P<last5>[A-Z]\d{4}) (?P<name>[^\r\n]{30}) (?P<uid>[^ \r\n]+) (?P<primarySite>[^ \r\n]+) (?P<dateOfDiagnosis>\d{2}/\d{2}/\d{4}) (?P<dateCaseLastChanged>\d{2}/\d{2}/\d{4})', prompt.before))
|
||||
elif prompt.index == 4:
|
||||
break
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
for item in parse_xml_rcrs(doc_rcrs, summary):
|
||||
yield item
|
||||
|
@ -63,7 +63,13 @@ async def cmd_appointments(proc, clinics='NPT-HEM/ONC ATTENDING', date='T', stor
|
||||
item['comment'] = '\r\n'.join(m.group(1) for m in re.finditer(r'^\s{15}(\w.*?)$', detail, re.MULTILINE))
|
||||
yield item
|
||||
proc.sendline('^Patient information AND OE/RR')
|
||||
assert await expect.endswith('\r\nSelect Patient Information and OE/RR Option: ', '\r\nSelect Patient Information and OE/RR <TEST ACCOUNT> Option: ')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
expect.clear()
|
||||
|
||||
async def vista_appointment_clinics(proc, expect):
|
||||
|
@ -23,6 +23,13 @@ async def task_smartcard(proc, config: Optional[configparser.ConfigParser]=None)
|
||||
if certificate:
|
||||
config.set('auth', 'certificate', certificate)
|
||||
proc.create_task(task_keepalive(proc, True), name='@task:keepalive')
|
||||
async for prompt, response in expect.promptmatches((
|
||||
(re.compile(r' Press \'RETURN\' to continue, \'\^\' to stop: $'), None),
|
||||
('Select Patient Information and OE/RR Option: ', None, True),
|
||||
('Select Patient Information and OE/RR <TEST ACCOUNT> Option: ', None, True),
|
||||
), throw=True):
|
||||
if prompt.index == 0:
|
||||
proc.sendline(response)
|
||||
return True
|
||||
|
||||
async def task_keepalive(proc, suppress=False):
|
||||
|
Loading…
x
Reference in New Issue
Block a user