Skip to main content

hs_predict/rules/
static_table.rs

1//! Compile-time embedded CAS → HS code mapping table.
2//!
3//! Rules are evaluated by [`find_best_rule`](crate::rules::matcher::find_best_rule)
4//! in order. More-specific rules (non-`Any` shape, concentration range) are
5//! preferred automatically by the matcher's specificity scoring.
6
7use crate::rules::types::{HsRule, ShapePattern};
8
9/// Static table of known CAS → HS 2022 mappings.
10///
11/// Target: ~100 common industrial chemicals for v0.1.
12pub static HS_RULES: &[HsRule] = &[
13    // ═══════════════════════════════════════════════════════════════
14    // Chapter 28 — Inorganic chemicals
15    // ═══════════════════════════════════════════════════════════════
16
17    // ── Sodium hydroxide (caustic soda) 1310-73-2 ─────────────────
18    HsRule {
19        cas: "1310-73-2",
20        shape: ShapePattern::Solid,
21        purity_range: None,
22        hs_code: "281511",
23        heading_description: "Sodium hydroxide (caustic soda); solid",
24        confidence: 0.97,
25    },
26    HsRule {
27        cas: "1310-73-2",
28        shape: ShapePattern::Powder,
29        purity_range: None,
30        hs_code: "281511",
31        heading_description: "Sodium hydroxide (caustic soda); solid",
32        confidence: 0.95,
33    },
34    HsRule {
35        cas: "1310-73-2",
36        shape: ShapePattern::Solution { concentration_range_pct: None },
37        purity_range: None,
38        hs_code: "281512",
39        heading_description: "Sodium hydroxide (caustic soda); in aqueous solution (soda lye or liquid soda)",
40        confidence: 0.97,
41    },
42
43    // ── Potassium hydroxide (caustic potash) 1310-58-3 ───────────
44    HsRule {
45        cas: "1310-58-3",
46        shape: ShapePattern::Solid,
47        purity_range: None,
48        hs_code: "281520",
49        heading_description: "Potassium hydroxide (caustic potash)",
50        confidence: 0.97,
51    },
52    HsRule {
53        cas: "1310-58-3",
54        shape: ShapePattern::Solution { concentration_range_pct: None },
55        purity_range: None,
56        hs_code: "281520",
57        heading_description: "Potassium hydroxide (caustic potash)",
58        confidence: 0.95,
59    },
60
61    // ── Sulphuric acid 7664-93-9 ──────────────────────────────────
62    HsRule {
63        cas: "7664-93-9",
64        shape: ShapePattern::Any,
65        purity_range: None,
66        hs_code: "280700",
67        heading_description: "Sulphuric acid; oleum",
68        confidence: 0.97,
69    },
70
71    // ── Hydrochloric acid / hydrogen chloride 7647-01-0 ──────────
72    HsRule {
73        cas: "7647-01-0",
74        shape: ShapePattern::Gas,
75        purity_range: None,
76        hs_code: "280610",
77        heading_description: "Hydrogen chloride (hydrochloric acid)",
78        confidence: 0.97,
79    },
80    HsRule {
81        cas: "7647-01-0",
82        shape: ShapePattern::Solution { concentration_range_pct: None },
83        purity_range: None,
84        hs_code: "280610",
85        heading_description: "Hydrogen chloride (hydrochloric acid)",
86        confidence: 0.95,
87    },
88    HsRule {
89        cas: "7647-01-0",
90        shape: ShapePattern::Any,
91        purity_range: None,
92        hs_code: "280610",
93        heading_description: "Hydrogen chloride (hydrochloric acid)",
94        confidence: 0.90,
95    },
96
97    // ── Nitric acid 7697-37-2 ─────────────────────────────────────
98    // Fuming nitric acid (concentration ≥98%)
99    HsRule {
100        cas: "7697-37-2",
101        shape: ShapePattern::Solution { concentration_range_pct: Some(98.0..=100.0) },
102        purity_range: None,
103        hs_code: "280810",
104        heading_description: "Nitric acid; fuming nitric acid",
105        confidence: 0.90,
106    },
107    // Standard nitric acid (<98%)
108    HsRule {
109        cas: "7697-37-2",
110        shape: ShapePattern::Solution { concentration_range_pct: Some(0.0..=97.99) },
111        purity_range: None,
112        hs_code: "280890",
113        heading_description: "Nitric acid",
114        confidence: 0.90,
115    },
116    HsRule {
117        cas: "7697-37-2",
118        shape: ShapePattern::Any,
119        purity_range: None,
120        hs_code: "280890",
121        heading_description: "Nitric acid (concentration unknown — defaulting to standard grade)",
122        confidence: 0.65, // lower: concentration unknown; fuming grade (280810) possible
123    },
124
125    // ── Phosphoric acid 7664-38-2 ─────────────────────────────────
126    HsRule {
127        cas: "7664-38-2",
128        shape: ShapePattern::Any,
129        purity_range: None,
130        hs_code: "280920",
131        heading_description: "Phosphoric acid and polyphosphoric acids",
132        confidence: 0.97,
133    },
134
135    // ── Hydrofluoric acid / hydrogen fluoride 7664-39-3 ──────────
136    HsRule {
137        cas: "7664-39-3",
138        shape: ShapePattern::Gas,
139        purity_range: None,
140        hs_code: "281111",
141        heading_description: "Hydrogen fluoride (hydrofluoric acid)",
142        confidence: 0.97,
143    },
144    HsRule {
145        cas: "7664-39-3",
146        shape: ShapePattern::Any,
147        purity_range: None,
148        hs_code: "281111",
149        heading_description: "Hydrogen fluoride (hydrofluoric acid)",
150        confidence: 0.90,
151    },
152
153    // ── Ammonia 7664-41-7 ─────────────────────────────────────────
154    HsRule {
155        cas: "7664-41-7",
156        shape: ShapePattern::Gas,
157        purity_range: None,
158        hs_code: "281410",
159        heading_description: "Anhydrous ammonia",
160        confidence: 0.97,
161    },
162    HsRule {
163        cas: "7664-41-7",
164        shape: ShapePattern::Solution { concentration_range_pct: None },
165        purity_range: None,
166        hs_code: "281420",
167        heading_description: "Ammonia in aqueous solution",
168        confidence: 0.97,
169    },
170    HsRule {
171        cas: "7664-41-7",
172        shape: ShapePattern::Any,
173        purity_range: None,
174        hs_code: "281410",
175        heading_description: "Anhydrous ammonia (form unknown — defaulting to anhydrous; verify if in solution → 281420)",
176        confidence: 0.65, // lower: form unknown; aqueous solution (281420) is also common
177    },
178
179    // ── Chlorine 7782-50-5 ────────────────────────────────────────
180    HsRule {
181        cas: "7782-50-5",
182        shape: ShapePattern::Any,
183        purity_range: None,
184        hs_code: "280110",
185        heading_description: "Chlorine",
186        confidence: 0.97,
187    },
188
189    // ── Bromine 7726-95-6 ─────────────────────────────────────────
190    HsRule {
191        cas: "7726-95-6",
192        shape: ShapePattern::Any,
193        purity_range: None,
194        hs_code: "280130",
195        heading_description: "Bromine",
196        confidence: 0.97,
197    },
198
199    // ── Sodium chloride (salt) 7647-14-5 ─────────────────────────
200    HsRule {
201        cas: "7647-14-5",
202        shape: ShapePattern::Any,
203        purity_range: None,
204        hs_code: "250100",
205        heading_description: "Salt (including table salt and denatured salt)",
206        confidence: 0.90, // Chapter 25, not 28
207    },
208
209    // ── Sodium carbonate 497-19-8 ────────────────────────────────
210    HsRule {
211        cas: "497-19-8",
212        shape: ShapePattern::Any,
213        purity_range: None,
214        hs_code: "283620",
215        heading_description: "Sodium carbonate",
216        confidence: 0.97,
217    },
218
219    // ── Sodium bicarbonate 144-55-8 ───────────────────────────────
220    HsRule {
221        cas: "144-55-8",
222        shape: ShapePattern::Any,
223        purity_range: None,
224        hs_code: "283630",
225        heading_description: "Sodium bicarbonate (sodium hydrogen carbonate)",
226        confidence: 0.97,
227    },
228
229    // ── Calcium carbonate 471-34-1 ────────────────────────────────
230    HsRule {
231        cas: "471-34-1",
232        shape: ShapePattern::Any,
233        purity_range: None,
234        hs_code: "283650",
235        heading_description: "Calcium carbonate",
236        confidence: 0.90, // also appears in Ch.25 as limestone
237    },
238
239    // ── Calcium hydroxide 1305-62-0 ───────────────────────────────
240    HsRule {
241        cas: "1305-62-0",
242        shape: ShapePattern::Any,
243        purity_range: None,
244        hs_code: "282520",
245        heading_description: "Calcium hydroxide",
246        confidence: 0.97,
247    },
248
249    // ── Calcium chloride 10043-52-4 ───────────────────────────────
250    HsRule {
251        cas: "10043-52-4",
252        shape: ShapePattern::Any,
253        purity_range: None,
254        hs_code: "282720",
255        heading_description: "Calcium chloride",
256        confidence: 0.97,
257    },
258
259    // ── Aluminium oxide 1344-28-1 ─────────────────────────────────
260    HsRule {
261        cas: "1344-28-1",
262        shape: ShapePattern::Any,
263        purity_range: None,
264        hs_code: "281820",
265        heading_description: "Aluminium oxide (other than artificial corundum)",
266        confidence: 0.90, // artificial corundum → 281810
267    },
268
269    // ── Titanium dioxide 13463-67-7 ───────────────────────────────
270    HsRule {
271        cas: "13463-67-7",
272        shape: ShapePattern::Any,
273        purity_range: None,
274        hs_code: "282300",
275        heading_description: "Titanium oxides",
276        confidence: 0.97,
277    },
278
279    // ── Iron(III) chloride 7705-08-0 ──────────────────────────────
280    HsRule {
281        cas: "7705-08-0",
282        shape: ShapePattern::Any,
283        purity_range: None,
284        hs_code: "282739",
285        heading_description: "Chlorides of other metals — iron(III) chloride",
286        confidence: 0.95,
287    },
288
289    // ── Copper(II) sulphate 7758-98-7 ────────────────────────────
290    HsRule {
291        cas: "7758-98-7",
292        shape: ShapePattern::Any,
293        purity_range: None,
294        hs_code: "283325",
295        heading_description: "Copper sulphates",
296        confidence: 0.97,
297    },
298
299    // ── Silica (precipitated/fumed) 7631-86-9 ────────────────────
300    HsRule {
301        cas: "7631-86-9",
302        shape: ShapePattern::Any,
303        purity_range: None,
304        hs_code: "281122",
305        heading_description: "Silicon dioxide (synthetic)",
306        confidence: 0.93,
307    },
308
309    // ── Sodium silicate 1344-09-8 ─────────────────────────────────
310    HsRule {
311        cas: "1344-09-8",
312        shape: ShapePattern::Any,
313        purity_range: None,
314        hs_code: "283911",
315        heading_description: "Sodium silicates — sodium metasilicate",
316        confidence: 0.88,
317    },
318
319    // ── Hydrogen peroxide 7722-84-1 ───────────────────────────────
320    HsRule {
321        cas: "7722-84-1",
322        shape: ShapePattern::Any,
323        purity_range: None,
324        hs_code: "284700",
325        heading_description: "Hydrogen peroxide",
326        confidence: 0.97,
327    },
328
329    // ── Sodium hypochlorite 7681-52-9 ────────────────────────────
330    HsRule {
331        cas: "7681-52-9",
332        shape: ShapePattern::Any,
333        purity_range: None,
334        hs_code: "282810",
335        heading_description: "Hypochlorites — sodium hypochlorite",
336        confidence: 0.97,
337    },
338
339    // ── Sodium sulphate 7757-82-6 ─────────────────────────────────
340    HsRule {
341        cas: "7757-82-6",
342        shape: ShapePattern::Any,
343        purity_range: None,
344        hs_code: "283311",
345        heading_description: "Disodium sulphate",
346        confidence: 0.97,
347    },
348
349    // ── Potassium chloride 7447-40-7 ─────────────────────────────
350    HsRule {
351        cas: "7447-40-7",
352        shape: ShapePattern::Any,
353        purity_range: None,
354        hs_code: "283110",
355        heading_description: "Potassium chloride",
356        confidence: 0.93, // also Ch.31 as fertiliser depending on grade
357    },
358
359    // ── Ammonium nitrate 6484-52-2 ───────────────────────────────
360    HsRule {
361        cas: "6484-52-2",
362        shape: ShapePattern::Any,
363        purity_range: None,
364        hs_code: "310230",
365        heading_description: "Ammonium nitrate (Ch.31 fertiliser heading)",
366        confidence: 0.85, // can be Ch.28 in some contexts
367    },
368
369    // ═══════════════════════════════════════════════════════════════
370    // Chapter 29 — Organic chemicals
371    // ═══════════════════════════════════════════════════════════════
372
373    // ── Ethanol 64-17-5 ───────────────────────────────────────────
374    HsRule {
375        cas: "64-17-5",
376        shape: ShapePattern::Any,
377        purity_range: Some(95.0..=100.0), // undenatured ≥95%
378        hs_code: "220710",
379        heading_description: "Undenatured ethyl alcohol of an alcoholic strength ≥80%",
380        confidence: 0.85,
381    },
382    HsRule {
383        cas: "64-17-5",
384        shape: ShapePattern::Any,
385        purity_range: None,
386        hs_code: "290511",
387        heading_description: "Ethanol (ethyl alcohol)",
388        confidence: 0.70, // varies by denaturation / concentration
389    },
390
391    // ── Methanol 67-56-1 ─────────────────────────────────────────
392    HsRule {
393        cas: "67-56-1",
394        shape: ShapePattern::Any,
395        purity_range: None,
396        hs_code: "290511",
397        heading_description: "Methanol (methyl alcohol)",
398        confidence: 0.97,
399    },
400
401    // ── Acetone 67-64-1 ───────────────────────────────────────────
402    HsRule {
403        cas: "67-64-1",
404        shape: ShapePattern::Any,
405        purity_range: None,
406        hs_code: "291411",
407        heading_description: "Acetone",
408        confidence: 0.97,
409    },
410
411    // ── Acetic acid 64-19-7 ───────────────────────────────────────
412    HsRule {
413        cas: "64-19-7",
414        shape: ShapePattern::Any,
415        purity_range: None,
416        hs_code: "291521",
417        heading_description: "Acetic acid",
418        confidence: 0.97,
419    },
420
421    // ── Toluene 108-88-3 ─────────────────────────────────────────
422    HsRule {
423        cas: "108-88-3",
424        shape: ShapePattern::Any,
425        purity_range: None,
426        hs_code: "290230",
427        heading_description: "Toluene",
428        confidence: 0.97,
429    },
430
431    // ── Benzene 71-43-2 ───────────────────────────────────────────
432    HsRule {
433        cas: "71-43-2",
434        shape: ShapePattern::Any,
435        purity_range: None,
436        hs_code: "290220",
437        heading_description: "Benzene",
438        confidence: 0.97,
439    },
440
441    // ── Xylene (mixed isomers) 1330-20-7 ─────────────────────────
442    HsRule {
443        cas: "1330-20-7",
444        shape: ShapePattern::Any,
445        purity_range: None,
446        hs_code: "290244",
447        heading_description: "Mixed xylene isomers",
448        confidence: 0.93,
449    },
450
451    // ── Isopropanol 67-63-0 ───────────────────────────────────────
452    HsRule {
453        cas: "67-63-0",
454        shape: ShapePattern::Any,
455        purity_range: None,
456        hs_code: "290512",
457        heading_description: "Propan-2-ol (isopropyl alcohol)",
458        confidence: 0.97,
459    },
460
461    // ── Ethyl acetate 141-78-6 ────────────────────────────────────
462    HsRule {
463        cas: "141-78-6",
464        shape: ShapePattern::Any,
465        purity_range: None,
466        hs_code: "291523",
467        heading_description: "Ethyl acetate",
468        confidence: 0.97,
469    },
470
471    // ── Formaldehyde 50-00-0 ──────────────────────────────────────
472    HsRule {
473        cas: "50-00-0",
474        shape: ShapePattern::Any,
475        purity_range: None,
476        hs_code: "291211",
477        heading_description: "Methanal (formaldehyde)",
478        confidence: 0.97,
479    },
480
481    // ── Formic acid 64-18-6 ───────────────────────────────────────
482    HsRule {
483        cas: "64-18-6",
484        shape: ShapePattern::Any,
485        purity_range: None,
486        hs_code: "291511",
487        heading_description: "Formic acid",
488        confidence: 0.97,
489    },
490
491    // ── Citric acid 77-92-9 ───────────────────────────────────────
492    HsRule {
493        cas: "77-92-9",
494        shape: ShapePattern::Any,
495        purity_range: None,
496        hs_code: "291814",
497        heading_description: "Citric acid",
498        confidence: 0.97,
499    },
500
501    // ── Urea 57-13-6 ─────────────────────────────────────────────
502    HsRule {
503        cas: "57-13-6",
504        shape: ShapePattern::Any,
505        purity_range: None,
506        hs_code: "310210",
507        heading_description: "Urea (Ch.31 as fertiliser)",
508        confidence: 0.85,
509    },
510
511    // ── Aniline 62-53-3 ───────────────────────────────────────────
512    HsRule {
513        cas: "62-53-3",
514        shape: ShapePattern::Any,
515        purity_range: None,
516        hs_code: "292141",
517        heading_description: "Aniline",
518        confidence: 0.97,
519    },
520
521    // ── Phenol 108-95-2 ───────────────────────────────────────────
522    HsRule {
523        cas: "108-95-2",
524        shape: ShapePattern::Any,
525        purity_range: None,
526        hs_code: "290711",
527        heading_description: "Phenol",
528        confidence: 0.97,
529    },
530
531    // ═══════════════════════════════════════════════════════════════
532    // Metals (Chapters 72–81)
533    // ═══════════════════════════════════════════════════════════════
534
535    // ── Aluminium 7429-90-5 ───────────────────────────────────────
536    HsRule {
537        cas: "7429-90-5",
538        shape: ShapePattern::Ingot,
539        purity_range: Some(99.0..=100.0),
540        hs_code: "760110",
541        heading_description: "Aluminium, not alloyed — ingots, billets",
542        confidence: 0.93,
543    },
544    HsRule {
545        cas: "7429-90-5",
546        shape: ShapePattern::Powder,
547        purity_range: None,
548        hs_code: "760310",
549        heading_description: "Aluminium powders of non-lamellar structure",
550        confidence: 0.92,
551    },
552    HsRule {
553        cas: "7429-90-5",
554        shape: ShapePattern::Foil,
555        purity_range: None,
556        hs_code: "760711",
557        heading_description: "Aluminium foil (not backed), rolled but not further worked",
558        confidence: 0.90,
559    },
560    HsRule {
561        cas: "7429-90-5",
562        shape: ShapePattern::Any,
563        purity_range: None,
564        hs_code: "760110",
565        heading_description: "Aluminium — unwrought",
566        confidence: 0.70,
567    },
568
569    // ── Copper 7440-50-8 ─────────────────────────────────────────
570    HsRule {
571        cas: "7440-50-8",
572        shape: ShapePattern::Any,
573        purity_range: None,
574        hs_code: "740311",
575        heading_description: "Refined copper — cathodes and sections of cathodes",
576        confidence: 0.80,
577    },
578
579    // ── Iron / steel (pure iron) 7439-89-6 ───────────────────────
580    HsRule {
581        cas: "7439-89-6",
582        shape: ShapePattern::Powder,
583        purity_range: None,
584        hs_code: "720310",
585        heading_description: "Ferrous products obtained by direct reduction of iron ore",
586        confidence: 0.70, // many iron/steel codes — low confidence
587    },
588
589    // ── Zinc 7440-66-6 ────────────────────────────────────────────
590    HsRule {
591        cas: "7440-66-6",
592        shape: ShapePattern::Any,
593        purity_range: None,
594        hs_code: "790111",
595        heading_description: "Zinc, not alloyed — ≥99.99% pure",
596        confidence: 0.82,
597    },
598
599    // ═══════════════════════════════════════════════════════════════
600    // Chapter 28 — Inorganic chemicals (continued)
601    // ═══════════════════════════════════════════════════════════════
602
603    // ── Zinc oxide 1314-13-2 ──────────────────────────────────────
604    HsRule {
605        cas: "1314-13-2",
606        shape: ShapePattern::Any,
607        purity_range: None,
608        hs_code: "281700",
609        heading_description: "Zinc oxide; zinc peroxide",
610        confidence: 0.97,
611    },
612
613    // ── Iron(III) oxide (haematite) 1309-37-1 ────────────────────
614    HsRule {
615        cas: "1309-37-1",
616        shape: ShapePattern::Any,
617        purity_range: None,
618        hs_code: "282110",
619        heading_description: "Iron oxides and hydroxides",
620        confidence: 0.93,
621    },
622
623    // ── Manganese dioxide 1313-13-9 ───────────────────────────────
624    HsRule {
625        cas: "1313-13-9",
626        shape: ShapePattern::Any,
627        purity_range: None,
628        hs_code: "282010",
629        heading_description: "Manganese dioxide",
630        confidence: 0.97,
631    },
632
633    // ── Potassium permanganate 7722-64-7 ──────────────────────────
634    HsRule {
635        cas: "7722-64-7",
636        shape: ShapePattern::Any,
637        purity_range: None,
638        hs_code: "284161",
639        heading_description: "Permanganates — potassium permanganate",
640        confidence: 0.97,
641    },
642
643    // ── Sodium sulphide 1313-82-2 ─────────────────────────────────
644    HsRule {
645        cas: "1313-82-2",
646        shape: ShapePattern::Any,
647        purity_range: None,
648        hs_code: "283010",
649        heading_description: "Sodium sulphides",
650        confidence: 0.97,
651    },
652
653    // ── Zinc sulphate 7733-02-0 ───────────────────────────────────
654    HsRule {
655        cas: "7733-02-0",
656        shape: ShapePattern::Any,
657        purity_range: None,
658        hs_code: "283329",
659        heading_description: "Sulphates — zinc sulphate",
660        confidence: 0.95,
661    },
662
663    // ── Aluminium sulphate 10043-01-3 ────────────────────────────
664    HsRule {
665        cas: "10043-01-3",
666        shape: ShapePattern::Any,
667        purity_range: None,
668        hs_code: "283322",
669        heading_description: "Aluminium sulphate",
670        confidence: 0.97,
671    },
672
673    // ── Boric acid 10043-35-3 ─────────────────────────────────────
674    HsRule {
675        cas: "10043-35-3",
676        shape: ShapePattern::Any,
677        purity_range: None,
678        hs_code: "281000",
679        heading_description: "Oxides of boron; boric acids",
680        confidence: 0.97,
681    },
682
683    // ── Sodium nitrate 7631-99-4 ─────────────────────────────────
684    HsRule {
685        cas: "7631-99-4",
686        shape: ShapePattern::Any,
687        purity_range: None,
688        hs_code: "283429",
689        heading_description: "Nitrates — sodium nitrate (other nitrates)",
690        confidence: 0.97,
691    },
692
693    // ── Potassium nitrate 7757-79-1 ──────────────────────────────
694    HsRule {
695        cas: "7757-79-1",
696        shape: ShapePattern::Any,
697        purity_range: None,
698        hs_code: "283421",
699        heading_description: "Nitrates — of potassium (potassium nitrate)",
700        confidence: 0.97,
701    },
702
703    // ── Potassium carbonate 584-08-7 ─────────────────────────────
704    HsRule {
705        cas: "584-08-7",
706        shape: ShapePattern::Any,
707        purity_range: None,
708        hs_code: "283640",
709        heading_description: "Potassium carbonates",
710        confidence: 0.97,
711    },
712
713    // ── Zinc chloride 7646-85-7 ──────────────────────────────────
714    HsRule {
715        cas: "7646-85-7",
716        shape: ShapePattern::Any,
717        purity_range: None,
718        hs_code: "282741",
719        heading_description: "Zinc chloride",
720        confidence: 0.97,
721    },
722
723    // ── Chromium trioxide 1333-82-0 ───────────────────────────────
724    HsRule {
725        cas: "1333-82-0",
726        shape: ShapePattern::Any,
727        purity_range: None,
728        hs_code: "281910",
729        heading_description: "Chromium trioxide",
730        confidence: 0.97,
731    },
732
733    // ── Silver nitrate 7761-88-8 ──────────────────────────────────
734    HsRule {
735        cas: "7761-88-8",
736        shape: ShapePattern::Any,
737        purity_range: None,
738        hs_code: "284321",
739        heading_description: "Silver nitrate",
740        confidence: 0.97,
741    },
742
743    // ── Ferrous sulphate (iron(II) sulphate) 7720-78-7 ───────────
744    HsRule {
745        cas: "7720-78-7",
746        shape: ShapePattern::Any,
747        purity_range: None,
748        hs_code: "283329",
749        heading_description: "Sulphates — ferrous sulphate (iron(II) sulphate)",
750        confidence: 0.93,
751    },
752
753    // ─══════════════════════════════════════════════════════════════
754    // Chapter 29 — Organic chemicals (continued)
755    // ═══════════════════════════════════════════════════════════════
756
757    // ── n-Hexane 110-54-3 ─────────────────────────────────────────
758    HsRule {
759        cas: "110-54-3",
760        shape: ShapePattern::Any,
761        purity_range: None,
762        hs_code: "290110",
763        heading_description: "Saturated acyclic hydrocarbons — hexanes",
764        confidence: 0.93,
765    },
766
767    // ── Cyclohexane 110-82-7 ──────────────────────────────────────
768    HsRule {
769        cas: "110-82-7",
770        shape: ShapePattern::Any,
771        purity_range: None,
772        hs_code: "290211",
773        heading_description: "Cyclohexane",
774        confidence: 0.97,
775    },
776
777    // ── 1-Butanol (n-butyl alcohol) 71-36-3 ──────────────────────
778    HsRule {
779        cas: "71-36-3",
780        shape: ShapePattern::Any,
781        purity_range: None,
782        hs_code: "290513",
783        heading_description: "Butan-1-ol (n-butyl alcohol)",
784        confidence: 0.97,
785    },
786
787    // ── Ethylene glycol 107-21-1 ─────────────────────────────────
788    HsRule {
789        cas: "107-21-1",
790        shape: ShapePattern::Any,
791        purity_range: None,
792        hs_code: "290531",
793        heading_description: "Ethylene glycol (ethanediol)",
794        confidence: 0.97,
795    },
796
797    // ── Propylene glycol (1,2-propanediol) 57-55-6 ───────────────
798    HsRule {
799        cas: "57-55-6",
800        shape: ShapePattern::Any,
801        purity_range: None,
802        hs_code: "290532",
803        heading_description: "Propylene glycol (1,2-propanediol)",
804        confidence: 0.97,
805    },
806
807    // ── 1-Propanol (propyl alcohol) 71-23-8 ──────────────────────
808    HsRule {
809        cas: "71-23-8",
810        shape: ShapePattern::Any,
811        purity_range: None,
812        hs_code: "290512",
813        heading_description: "Propan-1-ol (propyl alcohol)",
814        confidence: 0.97,
815    },
816
817    // ── Diethyl ether 60-29-7 ────────────────────────────────────
818    HsRule {
819        cas: "60-29-7",
820        shape: ShapePattern::Any,
821        purity_range: None,
822        hs_code: "290911",
823        heading_description: "Diethyl ether",
824        confidence: 0.97,
825    },
826
827    // ── Dichloromethane (methylene chloride) 75-09-2 ─────────────
828    HsRule {
829        cas: "75-09-2",
830        shape: ShapePattern::Any,
831        purity_range: None,
832        hs_code: "290312",
833        heading_description: "Dichloromethane (methylene chloride)",
834        confidence: 0.97,
835    },
836
837    // ── Chloroform (trichloromethane) 67-66-3 ────────────────────
838    HsRule {
839        cas: "67-66-3",
840        shape: ShapePattern::Any,
841        purity_range: None,
842        hs_code: "290313",
843        heading_description: "Chloroform (trichloromethane)",
844        confidence: 0.97,
845    },
846
847    // ── Carbon tetrachloride 56-23-5 ─────────────────────────────
848    HsRule {
849        cas: "56-23-5",
850        shape: ShapePattern::Any,
851        purity_range: None,
852        hs_code: "290314",
853        heading_description: "Carbon tetrachloride",
854        confidence: 0.97,
855    },
856
857    // ── Oxalic acid 144-62-7 ─────────────────────────────────────
858    HsRule {
859        cas: "144-62-7",
860        shape: ShapePattern::Any,
861        purity_range: None,
862        hs_code: "291711",
863        heading_description: "Oxalic acid, its salts and esters",
864        confidence: 0.97,
865    },
866
867    // ── Lactic acid 50-21-5 ───────────────────────────────────────
868    HsRule {
869        cas: "50-21-5",
870        shape: ShapePattern::Any,
871        purity_range: None,
872        hs_code: "291811",
873        heading_description: "Lactic acid, its salts and esters",
874        confidence: 0.97,
875    },
876
877    // ── Benzoic acid 65-85-0 ─────────────────────────────────────
878    HsRule {
879        cas: "65-85-0",
880        shape: ShapePattern::Any,
881        purity_range: None,
882        hs_code: "291631",
883        heading_description: "Benzoic acid, its salts and esters",
884        confidence: 0.97,
885    },
886
887    // ── Phthalic anhydride 85-44-9 ───────────────────────────────
888    HsRule {
889        cas: "85-44-9",
890        shape: ShapePattern::Any,
891        purity_range: None,
892        hs_code: "291735",
893        heading_description: "Phthalic anhydride",
894        confidence: 0.97,
895    },
896
897    // ── Ethylene oxide 75-21-8 ───────────────────────────────────
898    HsRule {
899        cas: "75-21-8",
900        shape: ShapePattern::Any,
901        purity_range: None,
902        hs_code: "291010",
903        heading_description: "Ethylene oxide",
904        confidence: 0.97,
905    },
906
907    // ── Dimethyl sulphoxide (DMSO) 67-68-5 ───────────────────────
908    HsRule {
909        cas: "67-68-5",
910        shape: ShapePattern::Any,
911        purity_range: None,
912        hs_code: "293090",
913        heading_description: "Other organo-sulphur compounds — DMSO",
914        confidence: 0.93,
915    },
916
917    // ── N,N-Dimethylformamide (DMF) 68-12-2 ─────────────────────
918    HsRule {
919        cas: "68-12-2",
920        shape: ShapePattern::Any,
921        purity_range: None,
922        hs_code: "292419",
923        heading_description: "Other acyclic amides — DMF",
924        confidence: 0.95,
925    },
926
927    // ── Sodium acetate 127-09-3 ───────────────────────────────────
928    HsRule {
929        cas: "127-09-3",
930        shape: ShapePattern::Any,
931        purity_range: None,
932        hs_code: "291529",
933        heading_description: "Other salts of acetic acid — sodium acetate",
934        confidence: 0.95,
935    },
936
937    // ═══════════════════════════════════════════════════════════════
938    // Metals (continued — Chapters 75, 78, 80, 71)
939    // ═══════════════════════════════════════════════════════════════
940
941    // ── Nickel 7440-02-0 ─────────────────────────────────────────
942    HsRule {
943        cas: "7440-02-0",
944        shape: ShapePattern::Ingot,
945        purity_range: Some(99.0..=100.0),
946        hs_code: "750110",
947        heading_description: "Nickel, not alloyed — ingots etc.",
948        confidence: 0.90,
949    },
950    HsRule {
951        cas: "7440-02-0",
952        shape: ShapePattern::Any,
953        purity_range: None,
954        hs_code: "750110",
955        heading_description: "Nickel, not alloyed — unwrought",
956        confidence: 0.75,
957    },
958
959    // ── Lead 7439-92-1 ────────────────────────────────────────────
960    HsRule {
961        cas: "7439-92-1",
962        shape: ShapePattern::Any,
963        purity_range: None,
964        hs_code: "780110",
965        heading_description: "Refined lead — unwrought",
966        confidence: 0.78,
967    },
968
969    // ── Tin 7440-31-5 ─────────────────────────────────────────────
970    HsRule {
971        cas: "7440-31-5",
972        shape: ShapePattern::Any,
973        purity_range: None,
974        hs_code: "800110",
975        heading_description: "Tin, not alloyed — unwrought",
976        confidence: 0.80,
977    },
978
979    // ── Silver 7440-22-4 ─────────────────────────────────────────
980    HsRule {
981        cas: "7440-22-4",
982        shape: ShapePattern::Any,
983        purity_range: None,
984        hs_code: "710691",
985        heading_description: "Silver — unwrought",
986        confidence: 0.82,
987    },
988
989    // ═══════════════════════════════════════════════════════════════
990    // Chapter 28 — Inorganic chemicals (v0.5 additions)
991    // ═══════════════════════════════════════════════════════════════
992
993    // ── Hydrogen 1333-74-0 ────────────────────────────────────────
994    HsRule {
995        cas: "1333-74-0",
996        shape: ShapePattern::Any,
997        purity_range: None,
998        hs_code: "280410",
999        heading_description: "Hydrogen",
1000        confidence: 0.97,
1001    },
1002
1003    // ── Nitrogen 7727-37-9 ────────────────────────────────────────
1004    HsRule {
1005        cas: "7727-37-9",
1006        shape: ShapePattern::Any,
1007        purity_range: None,
1008        hs_code: "280420",
1009        heading_description: "Nitrogen",
1010        confidence: 0.97,
1011    },
1012
1013    // ── Oxygen 7782-44-7 ─────────────────────────────────────────
1014    HsRule {
1015        cas: "7782-44-7",
1016        shape: ShapePattern::Any,
1017        purity_range: None,
1018        hs_code: "280440",
1019        heading_description: "Oxygen",
1020        confidence: 0.97,
1021    },
1022
1023    // ── Carbon dioxide 124-38-9 ───────────────────────────────────
1024    HsRule {
1025        cas: "124-38-9",
1026        shape: ShapePattern::Any,
1027        purity_range: None,
1028        hs_code: "281121",
1029        heading_description: "Carbon dioxide",
1030        confidence: 0.97,
1031    },
1032
1033    // ── Sulphur dioxide 7446-09-5 ────────────────────────────────
1034    HsRule {
1035        cas: "7446-09-5",
1036        shape: ShapePattern::Any,
1037        purity_range: None,
1038        hs_code: "281129",
1039        heading_description: "Other inorganic oxygen compounds of non-metals — sulphur dioxide",
1040        confidence: 0.93,
1041    },
1042
1043    // ── Ammonium chloride 12125-02-9 ─────────────────────────────
1044    HsRule {
1045        cas: "12125-02-9",
1046        shape: ShapePattern::Any,
1047        purity_range: None,
1048        hs_code: "282710",
1049        heading_description: "Ammonium chloride",
1050        confidence: 0.97,
1051    },
1052
1053    // ── Magnesium chloride 7786-30-3 ─────────────────────────────
1054    HsRule {
1055        cas: "7786-30-3",
1056        shape: ShapePattern::Any,
1057        purity_range: None,
1058        hs_code: "282731",
1059        heading_description: "Magnesium chloride",
1060        confidence: 0.97,
1061    },
1062
1063    // ── Aluminium chloride (anhydrous) 7446-70-0 ─────────────────
1064    HsRule {
1065        cas: "7446-70-0",
1066        shape: ShapePattern::Any,
1067        purity_range: None,
1068        hs_code: "282732",
1069        heading_description: "Aluminium chloride",
1070        confidence: 0.97,
1071    },
1072
1073    // ── Iron(II) chloride (ferrous chloride) 7758-94-3 ───────────
1074    HsRule {
1075        cas: "7758-94-3",
1076        shape: ShapePattern::Any,
1077        purity_range: None,
1078        hs_code: "282733",
1079        heading_description: "Iron chlorides — iron(II) chloride (ferrous chloride)",
1080        confidence: 0.95,
1081    },
1082
1083    // ── Nickel chloride 7718-54-9 ─────────────────────────────────
1084    HsRule {
1085        cas: "7718-54-9",
1086        shape: ShapePattern::Any,
1087        purity_range: None,
1088        hs_code: "282735",
1089        heading_description: "Nickel chlorides",
1090        confidence: 0.97,
1091    },
1092
1093    // ── Copper(II) chloride 7447-39-4 ────────────────────────────
1094    HsRule {
1095        cas: "7447-39-4",
1096        shape: ShapePattern::Any,
1097        purity_range: None,
1098        hs_code: "282746",
1099        heading_description: "Chlorides of copper",
1100        confidence: 0.95,
1101    },
1102
1103    // ── Sodium fluoride 7681-49-4 ────────────────────────────────
1104    HsRule {
1105        cas: "7681-49-4",
1106        shape: ShapePattern::Any,
1107        purity_range: None,
1108        hs_code: "282611",
1109        heading_description: "Fluorides of ammonium or sodium — sodium fluoride",
1110        confidence: 0.97,
1111    },
1112
1113    // ── Aluminium hydroxide 21645-51-2 ───────────────────────────
1114    HsRule {
1115        cas: "21645-51-2",
1116        shape: ShapePattern::Any,
1117        purity_range: None,
1118        hs_code: "281830",
1119        heading_description: "Aluminium hydroxide",
1120        confidence: 0.97,
1121    },
1122
1123    // ── Potassium sulphate 7778-80-5 ─────────────────────────────
1124    HsRule {
1125        cas: "7778-80-5",
1126        shape: ShapePattern::Any,
1127        purity_range: None,
1128        hs_code: "283319",
1129        heading_description: "Sulphates of alkali metals — potassium sulphate",
1130        confidence: 0.90, // also Ch.31 as fertiliser depending on grade
1131    },
1132
1133    // ── Sodium thiosulphate 7772-98-7 ────────────────────────────
1134    HsRule {
1135        cas: "7772-98-7",
1136        shape: ShapePattern::Any,
1137        purity_range: None,
1138        hs_code: "283220",
1139        heading_description: "Sodium thiosulphate",
1140        confidence: 0.97,
1141    },
1142
1143    // ── Magnesium sulphate (Epsom salt) 7487-88-9 ────────────────
1144    HsRule {
1145        cas: "7487-88-9",
1146        shape: ShapePattern::Any,
1147        purity_range: None,
1148        hs_code: "283321",
1149        heading_description: "Magnesium sulphate",
1150        confidence: 0.97,
1151    },
1152
1153    // ── Sodium nitrite 7632-00-0 ─────────────────────────────────
1154    HsRule {
1155        cas: "7632-00-0",
1156        shape: ShapePattern::Any,
1157        purity_range: None,
1158        hs_code: "283410",
1159        heading_description: "Nitrites — sodium nitrite",
1160        confidence: 0.97,
1161    },
1162
1163    // ── Calcium nitrate 10124-37-5 ───────────────────────────────
1164    HsRule {
1165        cas: "10124-37-5",
1166        shape: ShapePattern::Any,
1167        purity_range: None,
1168        hs_code: "283429",
1169        heading_description: "Nitrates — calcium nitrate",
1170        confidence: 0.93,
1171    },
1172
1173    // ── Sodium dichromate 10588-01-9 ─────────────────────────────
1174    // Heading 28.41 (salts of oxometallic/peroxometallic acids); 284130 is the
1175    // specific WCO subheading for sodium dichromate.
1176    HsRule {
1177        cas: "10588-01-9",
1178        shape: ShapePattern::Any,
1179        purity_range: None,
1180        hs_code: "284130",
1181        heading_description: "Salts of oxometallic acids — sodium dichromate",
1182        confidence: 0.97,
1183    },
1184
1185    // ── Potassium dichromate 7778-50-9 ───────────────────────────
1186    // 284150 covers other chromates and dichromates (excl. sodium dichromate).
1187    HsRule {
1188        cas: "7778-50-9",
1189        shape: ShapePattern::Any,
1190        purity_range: None,
1191        hs_code: "284150",
1192        heading_description: "Salts of oxometallic acids — other chromates/dichromates (potassium dichromate)",
1193        confidence: 0.97,
1194    },
1195
1196    // ── Sodium metabisulphite 7681-57-4 ──────────────────────────
1197    HsRule {
1198        cas: "7681-57-4",
1199        shape: ShapePattern::Any,
1200        purity_range: None,
1201        hs_code: "283210",
1202        heading_description: "Sodium sulphites — sodium metabisulphite",
1203        confidence: 0.95,
1204    },
1205
1206    // ── Copper(II) nitrate 3251-23-8 ─────────────────────────────
1207    HsRule {
1208        cas: "3251-23-8",
1209        shape: ShapePattern::Any,
1210        purity_range: None,
1211        hs_code: "283429",
1212        heading_description: "Nitrates — copper nitrate",
1213        confidence: 0.93,
1214    },
1215
1216    // ─══════════════════════════════════════════════════════════════
1217    // Chapter 29 — Organic chemicals (v0.5 additions)
1218    // ═══════════════════════════════════════════════════════════════
1219
1220    // ── Styrene 100-42-5 ─────────────────────────────────────────
1221    HsRule {
1222        cas: "100-42-5",
1223        shape: ShapePattern::Any,
1224        purity_range: None,
1225        hs_code: "290125",
1226        heading_description: "Styrene",
1227        confidence: 0.97,
1228    },
1229
1230    // ── 1,3-Butadiene 106-99-0 ───────────────────────────────────
1231    HsRule {
1232        cas: "106-99-0",
1233        shape: ShapePattern::Any,
1234        purity_range: None,
1235        hs_code: "290124",
1236        heading_description: "Buta-1,3-diene",
1237        confidence: 0.97,
1238    },
1239
1240    // ── Vinyl chloride (chloroethylene) 75-01-4 ──────────────────
1241    HsRule {
1242        cas: "75-01-4",
1243        shape: ShapePattern::Any,
1244        purity_range: None,
1245        hs_code: "290321",
1246        heading_description: "Vinyl chloride (chloroethylene)",
1247        confidence: 0.97,
1248    },
1249
1250    // ── 2-Butanone (MEK, methyl ethyl ketone) 78-93-3 ────────────
1251    HsRule {
1252        cas: "78-93-3",
1253        shape: ShapePattern::Any,
1254        purity_range: None,
1255        hs_code: "291412",
1256        heading_description: "Butanone (methyl ethyl ketone)",
1257        confidence: 0.97,
1258    },
1259
1260    // ── n-Butyl acetate 123-86-4 ─────────────────────────────────
1261    HsRule {
1262        cas: "123-86-4",
1263        shape: ShapePattern::Any,
1264        purity_range: None,
1265        hs_code: "291524",
1266        heading_description: "Butyl acetates",
1267        confidence: 0.97,
1268    },
1269
1270    // ── Maleic anhydride 108-31-6 ────────────────────────────────
1271    HsRule {
1272        cas: "108-31-6",
1273        shape: ShapePattern::Any,
1274        purity_range: None,
1275        hs_code: "291714",
1276        heading_description: "Maleic anhydride",
1277        confidence: 0.97,
1278    },
1279
1280    // ── Terephthalic acid 100-21-0 ───────────────────────────────
1281    HsRule {
1282        cas: "100-21-0",
1283        shape: ShapePattern::Any,
1284        purity_range: None,
1285        hs_code: "291736",
1286        heading_description: "Terephthalic acid and its salts",
1287        confidence: 0.97,
1288    },
1289
1290    // ── Adipic acid 124-04-9 ─────────────────────────────────────
1291    HsRule {
1292        cas: "124-04-9",
1293        shape: ShapePattern::Any,
1294        purity_range: None,
1295        hs_code: "291712",
1296        heading_description: "Adipic acid, its salts and esters",
1297        confidence: 0.97,
1298    },
1299
1300    // ── Propylene oxide (1,2-epoxypropane) 75-56-9 ───────────────
1301    HsRule {
1302        cas: "75-56-9",
1303        shape: ShapePattern::Any,
1304        purity_range: None,
1305        hs_code: "291020",
1306        heading_description: "Propylene oxide (1,2-epoxypropane)",
1307        confidence: 0.97,
1308    },
1309
1310    // ── Glycerol (glycerin) 56-81-5 ──────────────────────────────
1311    HsRule {
1312        cas: "56-81-5",
1313        shape: ShapePattern::Any,
1314        purity_range: None,
1315        hs_code: "290545",
1316        heading_description: "Glycerol",
1317        confidence: 0.95,
1318    },
1319
1320    // ── Diethylene glycol (DEG) 111-46-6 ─────────────────────────
1321    HsRule {
1322        cas: "111-46-6",
1323        shape: ShapePattern::Any,
1324        purity_range: None,
1325        hs_code: "290941",
1326        heading_description: "Diethylene glycol (2,2'-oxydiethanol)",
1327        confidence: 0.97,
1328    },
1329
1330    // ── Cyclohexanone 108-94-1 ───────────────────────────────────
1331    HsRule {
1332        cas: "108-94-1",
1333        shape: ShapePattern::Any,
1334        purity_range: None,
1335        hs_code: "291421",
1336        heading_description: "Cyclohexanone and methylcyclohexanones",
1337        confidence: 0.97,
1338    },
1339
1340    // ── Acrylic acid 79-10-7 ─────────────────────────────────────
1341    HsRule {
1342        cas: "79-10-7",
1343        shape: ShapePattern::Any,
1344        purity_range: None,
1345        hs_code: "291611",
1346        heading_description: "Acrylic acid and its salts",
1347        confidence: 0.97,
1348    },
1349
1350    // ── Methyl methacrylate 80-62-6 ──────────────────────────────
1351    HsRule {
1352        cas: "80-62-6",
1353        shape: ShapePattern::Any,
1354        purity_range: None,
1355        hs_code: "291614",
1356        heading_description: "Methyl methacrylate",
1357        confidence: 0.97,
1358    },
1359
1360    // ── Acrylonitrile 107-13-1 ───────────────────────────────────
1361    HsRule {
1362        cas: "107-13-1",
1363        shape: ShapePattern::Any,
1364        purity_range: None,
1365        hs_code: "292610",
1366        heading_description: "Acrylonitrile",
1367        confidence: 0.97,
1368    },
1369
1370    // ── Ethylenediamine 107-15-3 ─────────────────────────────────
1371    HsRule {
1372        cas: "107-15-3",
1373        shape: ShapePattern::Any,
1374        purity_range: None,
1375        hs_code: "292121",
1376        heading_description: "Ethylenediamine and its salts",
1377        confidence: 0.97,
1378    },
1379
1380    // ── Hexamethylenediamine (HMDA) 124-09-4 ─────────────────────
1381    HsRule {
1382        cas: "124-09-4",
1383        shape: ShapePattern::Any,
1384        purity_range: None,
1385        hs_code: "292122",
1386        heading_description: "Hexamethylenediamine and its salts",
1387        confidence: 0.97,
1388    },
1389
1390    // ── Neopentyl glycol (2,2-dimethyl-1,3-propanediol) 126-30-7 ─
1391    HsRule {
1392        cas: "126-30-7",
1393        shape: ShapePattern::Any,
1394        purity_range: None,
1395        hs_code: "290539",
1396        heading_description: "Other diols — neopentyl glycol",
1397        confidence: 0.95,
1398    },
1399
1400    // ── Trimethylolpropane 77-99-6 ───────────────────────────────
1401    HsRule {
1402        cas: "77-99-6",
1403        shape: ShapePattern::Any,
1404        purity_range: None,
1405        hs_code: "290549",
1406        heading_description: "Other polyhydric alcohols — trimethylolpropane (TMP)",
1407        confidence: 0.95,
1408    },
1409
1410    // ── Pentaerythritol 115-77-5 ─────────────────────────────────
1411    HsRule {
1412        cas: "115-77-5",
1413        shape: ShapePattern::Any,
1414        purity_range: None,
1415        hs_code: "290549",
1416        heading_description: "Other polyhydric alcohols — pentaerythritol",
1417        confidence: 0.95,
1418    },
1419
1420    // ── Toluene diisocyanate (TDI, 80:20) 26471-62-5 ────────────
1421    HsRule {
1422        cas: "26471-62-5",
1423        shape: ShapePattern::Any,
1424        purity_range: None,
1425        hs_code: "292920",
1426        heading_description: "Isocyanates — toluene diisocyanate (TDI)",
1427        confidence: 0.95,
1428    },
1429
1430    // ── 4,4'-Methylenediphenyl diisocyanate (MDI) 101-68-8 ───────
1431    HsRule {
1432        cas: "101-68-8",
1433        shape: ShapePattern::Any,
1434        purity_range: None,
1435        hs_code: "292920",
1436        heading_description: "Isocyanates — methylene diphenyl diisocyanate (MDI)",
1437        confidence: 0.95,
1438    },
1439
1440    // ── n-Butyl acrylate 141-32-2 ────────────────────────────────
1441    HsRule {
1442        cas: "141-32-2",
1443        shape: ShapePattern::Any,
1444        purity_range: None,
1445        hs_code: "291619",
1446        heading_description: "Esters of unsaturated monocarboxylic acids — n-butyl acrylate",
1447        confidence: 0.93,
1448    },
1449
1450    // ── Methyl acrylate 96-33-3 ──────────────────────────────────
1451    HsRule {
1452        cas: "96-33-3",
1453        shape: ShapePattern::Any,
1454        purity_range: None,
1455        hs_code: "291613",
1456        heading_description: "Esters of acrylic acid — methyl acrylate",
1457        confidence: 0.95,
1458    },
1459
1460    // ── Propionic acid 79-09-4 ───────────────────────────────────
1461    HsRule {
1462        cas: "79-09-4",
1463        shape: ShapePattern::Any,
1464        purity_range: None,
1465        hs_code: "291515",
1466        heading_description: "Propionic acid, its salts and esters",
1467        confidence: 0.97,
1468    },
1469
1470    // ── Butyric acid (butanoic acid) 107-92-6 ────────────────────
1471    HsRule {
1472        cas: "107-92-6",
1473        shape: ShapePattern::Any,
1474        purity_range: None,
1475        hs_code: "291519",
1476        heading_description: "Other saturated acyclic monocarboxylic acids — butyric acid",
1477        confidence: 0.93,
1478    },
1479
1480    // ── Succinic acid (butanedioic acid) 110-15-6 ────────────────
1481    HsRule {
1482        cas: "110-15-6",
1483        shape: ShapePattern::Any,
1484        purity_range: None,
1485        hs_code: "291719",
1486        heading_description: "Other acyclic polycarboxylic acids — succinic acid",
1487        confidence: 0.95,
1488    },
1489
1490    // ═══════════════════════════════════════════════════════════════
1491    // Chapter 38 — Miscellaneous chemical products (v0.5 additions)
1492    // ═══════════════════════════════════════════════════════════════
1493
1494    // ── Activated carbon 7440-44-0 ───────────────────────────────
1495    HsRule {
1496        cas: "7440-44-0",
1497        shape: ShapePattern::Any,
1498        purity_range: None,
1499        hs_code: "380210",
1500        heading_description: "Activated carbon",
1501        confidence: 0.97,
1502    },
1503];