docs: def process_allele(allele_data, dbsnp_data, header, reference):
      """Combine data from multiple lines refering to a single allele.
  
      Returns three items in this order:
          (string) concatenated variant sequence (ie allele the genome has)
          (string) concatenated reference sequence
          (string) start position (1-based)
      """
      # One-based start to match VCF coordinates
      start = str(int(allele_data[0][header['begin']]))
      var_allele = ''
      ref_allele = ''
      filters = []
      for data in allele_data:
          if 'varQuality' in header:
              if 'VQLOW' in data[header['varQuality']]:
                  filters.append('VQLOW')
          else:
              var_filter = data[header['varFilter']]
              if var_filter and not var_filter == "PASS":
                  filters = filters + var_filter.split(';')
          if data[header['varType']] == 'no-call':
              filters = ['NOCALL']
              ref_allele = ref_allele + data[header['reference']]
              continue
          var_allele = var_allele + data[header['alleleSeq']]
          ref_allele = ref_allele + data[header['reference']]
          if data[header['xRef']]:
              for dbsnp_item in data[header['xRef']].split(';'):
                  dbsnp_data.append(dbsnp_item.split(':')[1])
      # It's theoretically possible to break up a partial no-call allele into
      # separated gVCF lines, but it's hard. Treat the whole allele as no-call.
      if 'NOCALL' in filters:
          filters = ['NOCALL']
          var_allele = '?'
      return var_allele, ref_allele, start, filters