Multiset comparison accounts for duplicate rows
A set would hide whether a row appears once or several times. This comparison counts each exact decoded row, then expands the count difference into added and removed record lists.
Header order is compared separately because the same row values under different headings do not represent the same record shape.