Columns are 'SampleID' followed by one column per required SNP in the form
rsID_Allele (e.g., rs12203592_T). Each cell contains 0/1/2 (count of the
input allele) or NA when the SNP is missing. The column set and order are
defined by the selected panel (IrisPlex, HIrisPlex, HIrisPlex-S).
Allele counting is based on the PLINK .bim alleles. Genotype dosage is read
on demand from the .bed using BEDMatrix::BEDMatrix(), which encodes the
dosage of the first allele in the .bim file (A1). If the webtool's required
input allele equals A1, we use the dosage directly; if it equals A2, we use
(2 - dosage). If allow_strand_flip = TRUE, we also reconcile complements
(A<->T, C<->G) to account for strand orientation differences.