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: "280800",
121        heading_description: "Nitric acid; sulphonitric acids",
122        confidence: 0.75, // lower: concentration unknown
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: "281400",
175        heading_description: "Ammonia, anhydrous or in aqueous solution",
176        confidence: 0.75,
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 (methanol)",
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: "284130",
639        heading_description: "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: "283421",
689        heading_description: "Sodium nitrate",
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: "283410",
699        heading_description: "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];