I only record storage charges. Each log belongs to one charger, and the two chargers never get mixed into one sequence. The chargers' serial numbers stay off the site; the pages just say DX8-1 and DX8-2.
Each night, the logs on each channel are matched, in order, to that night's slot list. If the number of logs doesn't match the number of slots, the night is refused, and nothing gets quietly reassigned. When a night has no slot list, the default is: DX8-1 channel 1 is C1-P1 through C1-P3, DX8-1 channel 2 is C1-P4 through C1-P6, DX8-2 channel 1 is C2-P1 through C2-P3, and DX8-2 channel 2 is C2-P4 through C2-P6. The slot list wins when a slot is empty or a pack charges on its own.
Mapping uses that night's manifest: charger alias, channel, file number and slots. A pack's usual low cell is only a soft check; a mismatch gets a note and doesn't move the pack. Cell IR is the median of the DX8 IR samples on the run, already in milliohms. The old end-of-run charge line is milliamp-hours, so it isn't used as IR.
A charger is limited to one series only when that limit is turned on, and neither DX8-1 nor DX8-2 is limited. An existing night-and-pack record is never overwritten. A partial night is kept as measured, and on the charts it stays starred on the night label. That star is separate from the dotted join a pack chart uses for a night that pack wasn't charged. The rest-voltage comparison uses only packs that charged in parallel that night, and only when at least two of them did.
LiHV logs, and logs that are a charge, a discharge, too short, or not a six-cell pack, stay out of the record until they can be matched confidently.