-- Drug (药品) archive kind: a new domain on the generic archive_kind framework -- (see 0010). No new table — drug spec values live in product.attributes JSONB, -- driven by the kind_field template below, plus a 'drug' category subtree. -- Field template for the drug domain. field_type is constrained to -- text/number/textarea/select/list by kind_field_type_chk. The `qualified` -- fields are the identifying / regulatory essentials that count toward the -- kind-aware completeness score. INSERT INTO kind_field (kind, field_key, group_label, label_zh, field_type, unit, options, sort_order, qualified) VALUES ('drug','approval_number', '基础信息','批准文号', 'text', NULL, '{}', 10, true), ('drug','generic_name', '基础信息','通用名', 'text', NULL, '{}', 20, true), ('drug','trade_name', '基础信息','商品名', 'text', NULL, '{}', 30, false), ('drug','dosage_form', '基础信息','剂型', 'select', NULL, '{片剂,胶囊剂,颗粒剂,散剂,丸剂,注射剂,口服液,糖浆剂,软膏剂,乳膏剂,凝胶剂,滴剂,喷雾剂,气雾剂,栓剂,贴剂,其他}', 40, true), ('drug','specification', '基础信息','规格', 'text', NULL, '{}', 50, true), ('drug','pack_spec', '基础信息','包装规格', 'text', NULL, '{}', 60, false), ('drug','rx_class', '分类与企业','处方分类', 'select', NULL, '{处方药,甲类OTC,乙类OTC}', 70, true), ('drug','manufacturer', '分类与企业','生产企业', 'text', NULL, '{}', 80, true), ('drug','mah', '分类与企业','上市许可持有人','text', NULL, '{}', 90, false), ('drug','indications', '说明书','适应症/功能主治', 'textarea', NULL, '{}', 100, true), ('drug','dosage_usage', '说明书','用法用量', 'textarea', NULL, '{}', 110, false), ('drug','adverse_reactions', '说明书','不良反应', 'textarea', NULL, '{}', 120, false), ('drug','contraindications', '说明书','禁忌', 'textarea', NULL, '{}', 130, false), ('drug','precautions', '说明书','注意事项', 'textarea', NULL, '{}', 140, false), ('drug','interactions', '说明书','药物相互作用', 'textarea', NULL, '{}', 150, false), ('drug','storage', '贮藏与有效期','贮藏', 'text', NULL, '{}', 160, false), ('drug','shelf_life', '贮藏与有效期','有效期', 'text', NULL, '{}', 170, false), ('drug','spec_source', '贮藏与有效期','说明书来源', 'text', NULL, '{}', 180, false); -- Drug category tree. ltree labels are English slugs (no spaces/Chinese); -- Chinese names live in category.name_zh. INSERT INTO category (name_zh, name_en, parent_id, path, level, archive_kind) VALUES ('药品', 'Drug', NULL, 'drug', 0, 'drug'); INSERT INTO category (name_zh, name_en, parent_id, path, level, archive_kind) SELECT v.name_zh, v.name_en, c.id, v.path::ltree, 1, 'drug' FROM (VALUES ('化学药品', 'Chemical drug', 'drug.chemical'), ('中成药', 'Chinese patent medicine', 'drug.tcm_patent'), ('中药饮片', 'Chinese herbal pieces', 'drug.tcm_herb'), ('生物制品', 'Biological product', 'drug.biological'), ('疫苗', 'Vaccine', 'drug.vaccine') ) AS v(name_zh, name_en, path) JOIN category c ON c.path = 'drug';