| 137 | |
| 138 | |
| 139 | def _diff_entries(old: list[dict], new: list[dict]) -> dict: |
| 140 | def _key(e): |
| 141 | return (e.get("classification_code", ""), e.get("product_name", "")) |
| 142 | |
| 143 | old_map = {_key(e): e for e in old} |
| 144 | new_map = {_key(e): e for e in new} |
| 145 | old_keys = set(old_map.keys()) |
| 146 | new_keys = set(new_map.keys()) |
| 147 | |
| 148 | added = sorted(new_keys - old_keys) |
| 149 | removed = sorted(old_keys - new_keys) |
| 150 | changed = [] |
| 151 | for k in sorted(old_keys & new_keys): |
| 152 | if old_map[k] != new_map[k]: |
| 153 | changed.append(k) |
| 154 | |
| 155 | return { |
| 156 | "added_count": len(added), |
| 157 | "removed_count": len(removed), |
| 158 | "changed_count": len(changed), |
| 159 | "added": added[:15], |
| 160 | "removed": removed[:15], |
| 161 | "changed": changed[:15], |
| 162 | } |
| 163 | |
| 164 | |
| 165 | def main(): |