This method scans the tail of an encounter record. For the format of this part, see the specification.
Fields in the tail are free-form and optional, so if the
scan object is at end of line, we're done.
# - - - B a s e E n c o u n t e r . s c a n T a i l - - -
def scanTail(self, scan):
'''Scan free-form tail fields at the end of an encounter line.
[ if the line in scan starts with a valid tail section ->
scan := scan advanced to end of line
self := self with values from the tail stored using
attribute names from self.OUT_FIELD_LIST
else ->
scan := scan advanced no further than end of line
Log() +:= error message(s)
raise SyntaxError ]
'''
Parsing is straightforward. If we're not at the end of
the line, a tail field must be next. The class variable
.tailDispatch is a dictionary that relates
(uppercased) tail type codes to the methods that process
each one. See Section 74.15, “BaseEncounter.scanTailField(): Scan one
free-form tail field”.
#-- 1 --
while not scan.atEndLine():
#-- 1 body --
# [ if scan starts with TAIL_CUE_CHAR followed by
# a valid tail field ->
# scan := scan advanced past that field
# self := self with data from that field stored
# using field names in self.OUT_FIELD_NAMES
# else ->
# scan := scan advanced no further than end of line
# Log() +:= error message(s)
# raise SyntaxError ]
self.scanTailField(scan)