Every rule that emptied a column because the operation code, transfer type or
participant type was not in an allowed list is gone. What is left never loses
data: it assembles a column from several tags, substitutes the zero
placeholder into an empty account column, and clears the ЕИО/ЦП blocks when
the record has no such block at all.
Removed: rules 10, 11, 15 (code validity), 21, 22-24, 26, 28, 31, 36, 39/47,
40, 42-43, 119/122, 124, 125, 141/152/167/178, the ОКАТО-by-country rule, 163,
and the continuation-row validation, which only re-ran the three code checks.
Removing them exposed three defects the rules had been masking, all of them
the other half of the customer's requirement — a value must land in the column
of its own block:
- Columns 40 and 42 pulled the bank name from a foreign block. The tag НаимКО
sits in six blocks, and short lookup matched the first one, so a record with
only СведБанкПолучатель filled the payer's column too. 4180 and 6906 wrong
values on the 03.02.2023 export. Fixed by forbidding short lookup, the same
way columns 41 and 43 already do it.
- Column 141 pulled the participant address from the cash place block for the
same reason. All 380 values it held were wrong; the 311 that remain now come
from the participant's own address block, verified one to one against the
XML.
- The one-line and structured address versions were treated as mutually
exclusive: a filled one-line column wiped the structured column and every
component. That cost 50 structured addresses on this export. Now both are
kept, and only an exact duplicate of the one-line value is suppressed, so a
single tag matching both columns is not echoed twice.
Three path typos in mapping_table.json also came out, checked against the
schema: УчастникФлип, СвебИНБОЮЛ and полноеНаимИНБОЮЛ. The first made the
participant one-line address unreachable by its scoped path, which is why it
depended on the leaking short lookup.
On the 03.02.2023 export only 12 columns change and nothing but column 141
goes down. The 5016 cross-check still reports no losses: every value in the
cash receipt, cash payment, status and account columns reaches the report.