Build a reconciliation workbook from the attached source-lists.json. RawA and RawB each contain ten original fictional device-ID records. JSON strings are text identifiers; null is an empty ID cell. raw-a.csv and raw-b.csv are equivalent CSV copies, but JSON defines the intended types. Return an actual .xlsx with RawA, RawB, Results and Exceptions, plus a complete row-level results CSV. Preserve all source rowIDs, order, original text, leading zeros, duplicates and empty ID cells. Keep RawA and RawB intact. Show ID literals in quotation marks in a separate display field so a trailing space is visible. Do not put the quotation marks into the raw ID cells. Use case-sensitive exact text equality. "0012" and "12" are different. "ABC" and "abc" are different. "0" is a valid text ID, not a blank. Do not trim, numerically coerce, case-fold, fuzzily merge or silently deduplicate identifiers. This is source-row membership reconciliation, not one-to-one allocation. Give every original row one Results row. A nonblank ID is Matched if at least one exactly equal ID exists in the other list. Otherwise use Left-only for A or Right-only for B. Keep blank-ID rows as Blank ID and exclude them from matching and distinct-key counts. Report own-list and other-list occurrence counts for every nonblank source row. Flag every row participating in a same-source duplicate, not just the extra occurrence. Do not discard any source record or expand duplicate keys into a many-to-many join. Show row counts separately from distinct nonblank-key counts. The combined distinct count is the union, and the matched distinct count is the intersection. Explain why matched source rows are not matched pairs. One business rule is unresolved: A008 is "Q-7 " with one trailing ASCII space, while B007 is "Q-7". Report exact-string membership provisionally, flag both for whitespace review, and ask whether these are the same identity. Do not guess a resolution. A record of a decision must not pretend to apply an unimplemented alias rule. Use recalculating formulas for the worked example, including source links, occurrence counts, classifications, flags and summary counts. Document the fixed ranges and how adding rows requires extending them. Keep the exception view traceable by source rowID and make flagged rows easy to isolate. Preserve zero, blank and duplicate as different states. Return the complete deliberately wrong first-match/normalized/deduplicated output and explain every lost source row and false match. Then return the complete repaired result. Verify the actual workbook against the supplied source records, including changes from zero to blank, a duplicate to a new ID and a case change, restoring the originals afterward. State which calculation engine was tested. Missing from the other list establishes absence from that supplied snapshot only. Do not infer inactivity, stock quantity, ownership or authorization to delete. Do not change a live inventory, send messages or take external action. Ask the whitespace question even after the technical repair succeeds.