code: def affected_start(self):
          
          types = {alt.type for alt in self.ALT}  # set!
          BAD_MIX = {INS, SV, BND, SYMBOLIC}  # don't mix well with others
          if (BAD_MIX & types) and len(types) == 1 and list(types)[0] == INS:
              # Only insertions, return 0-based position right of first base
              return self.POS  # right of first base
          else:  # Return 0-based start position of first REF base
              return self.POS - 1
docs: Return affected start position in 0-based coordinates
  
          For SNVs, MNVs, and deletions, the behaviour is the start position.
          In the case of insertions, the position behind the insert position is
          returned, yielding a 0-length interval together with
          :py:meth:`~Record.affected_end`