Archived
两颗料是不是用同一套参数名、同一套软硬约束,从此是结构保证而不是措辞叮嘱: 字段清单挂在类型上,一颗料关联一个类型。此前靠 parts.parameter.param_name 的 自指引用墙硬咬(措辞拦了三次没拦住才砌的),那堵墙可以退休了。 另播一颗 LDO(AMS1117-3.3)—— 它是「两颗料类型不一致 → 硬拦」那条路的唯一素材。 同批修复两条因此变为过时的既有断言(均在 seed-mvp-data.test.ts,非本任务新增): 「样例料号」测试原本枚举 parts.profile 恰好两行,新增 AMS1117-3.3 后改为三行; 「标准化参数集」测试原本断言每行 parts.parameter 都带 constraint_type,该列已 搬到 parts.type_param 字典,断言相应改为 toBeUndefined()。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
622 lines
36 KiB
TypeScript
622 lines
36 KiB
TypeScript
/**
|
|
* 主数据四域 —— **客户 / 项目 / 供应商 / 市场**(2026-07-31 用户定,照常规 CRM & ERP 的分法)。
|
|
*
|
|
* 为什么主数据要单独立域、由**平台**播种,而不是跟着某个活动走:
|
|
*
|
|
* 台账原来只按「谁写的」分域(`quote_intake.*` / `quote_alternative.*` …)。那是**实现轴**:
|
|
* 六个活动各有一张 verdict,一单的故事散在六处;而真正需要治理的那几张
|
|
* (客户档案、历史价)被挤进一个叫 `shared` 的抽屉 —— 那个名字描述的是机制(跨活动共享),
|
|
* 不是性质(主数据)。用机制命名,抽屉必然变杂物间。
|
|
*
|
|
* 更要紧的是**所有权**:主数据不是任何一个活动的产出。客户档案先于活动存在、
|
|
* 活动退役了它还在;活动只是**读它做判断、提议更新它**。
|
|
* 所以它由平台播种物化,不挂在谁的清单下 —— 活动装了卸了,主数据都在。
|
|
*
|
|
* 与三类性质的关系(见 `ledgerObjectKindSchema`):这里全是 `master`。
|
|
* 单据(`record`)归各活动自己的域;派生指标(`derived`)另说 —— 它本不该手写。
|
|
*
|
|
* **现在是空占位**:结构先立起来,还没有活动往里写。
|
|
* 表建出来但一行数据都没有 —— 治理台「主数据」那一区能看见它们等着被接上。
|
|
*/
|
|
import { objectDeclarationSchema } from '@contracts';
|
|
import type { LedgerAddress, LedgerFieldType, LedgerKey, LedgerRow, ObjectDeclaration } from '@contracts';
|
|
|
|
const f = (name: string, type: LedgerFieldType, label: string, primaryKey = false) => ({
|
|
name,
|
|
type,
|
|
label,
|
|
primaryKey,
|
|
masked: false,
|
|
});
|
|
|
|
/** 主数据一律 `kind: 'master'`:按业务实体分行,没有单标识 */
|
|
const master = (domain: string, object: string, label: string, fields: ReturnType<typeof f>[]) =>
|
|
objectDeclarationSchema.parse({ domain, object, label, kind: 'master', fields });
|
|
|
|
export const MASTER_OBJECTS: readonly ObjectDeclaration[] = [
|
|
/* ── 客户:谁在买 ──────────────────────────────────────────────────── */
|
|
master('customer', 'profile', '客户档案', [
|
|
f('customer_code', 'text', '客户编码', true),
|
|
f('name', 'text', '客户名称'),
|
|
f('grade', 'text', '客户等级'),
|
|
f('industry', 'text', '所属行业'),
|
|
f('region', 'text', '区域'),
|
|
f('owner', 'text', '负责 BD'),
|
|
f('payment_terms', 'text', '付款条件'),
|
|
f('credit_limit', 'number', '信用额度'),
|
|
/* 画像标签:价格敏感度、决策周期、常用条款 —— A7 归档时回写的就是这一列 */
|
|
f('profile_tags', 'text', '画像标签'),
|
|
f('status', 'text', '状态'),
|
|
]),
|
|
master('customer', 'contact', '客户联系人', [
|
|
f('customer_code', 'text', '客户编码', true),
|
|
f('contact_code', 'text', '联系人编码', true),
|
|
f('name', 'text', '姓名'),
|
|
f('title', 'text', '职务'),
|
|
/* 邮箱与电话是个人信息 —— 主数据里必须标脱敏,治理面照此裁剪 */
|
|
{ ...f('email', 'text', '邮箱'), masked: true },
|
|
{ ...f('phone', 'text', '电话'), masked: true },
|
|
]),
|
|
master('customer', 'price_terms', '客户价格条款', [
|
|
f('customer_code', 'text', '客户编码', true),
|
|
f('category', 'text', '品类', true),
|
|
f('target_margin', 'number', '目标毛利'),
|
|
f('discount', 'number', '折扣'),
|
|
f('valid_until', 'date', '有效期至'),
|
|
]),
|
|
|
|
/* ── 项目:为什么买 —— 客户的产品项目,反复询价的载体 ───────────────── */
|
|
master('project', 'profile', '项目档案', [
|
|
f('project_code', 'text', '项目编码', true),
|
|
f('customer_code', 'text', '所属客户'),
|
|
f('name', 'text', '项目名称'),
|
|
/* BOM 早期 / BOM 后期 / 量产 —— A3 的询价打法就按这个分 */
|
|
f('stage', 'text', '项目阶段'),
|
|
f('annual_volume', 'integer', '年用量预估'),
|
|
f('start_at', 'date', '立项日期'),
|
|
f('owner', 'text', '负责人'),
|
|
f('status', 'text', '状态'),
|
|
]),
|
|
master('project', 'bom', '项目 BOM', [
|
|
f('project_code', 'text', '项目编码', true),
|
|
f('pn', 'text', '料号', true),
|
|
f('qty_per_unit', 'number', '单机用量'),
|
|
f('eau', 'integer', '年需求量'),
|
|
f('designed_in', 'boolean', '已导入设计'),
|
|
f('status', 'text', '状态'),
|
|
]),
|
|
|
|
/* ── 供应商:从哪买 ───────────────────────────────────────────────── */
|
|
master('supplier', 'profile', '供应商档案', [
|
|
f('supplier_code', 'text', '供应商编码', true),
|
|
f('name', 'text', '供应商名称'),
|
|
/* 原厂 / 授权代理 / 贸易商 —— 「现货场景不得选无库存转单商」判据读的就是它 */
|
|
f('type', 'text', '供应商类型'),
|
|
f('region', 'text', '区域'),
|
|
f('rating', 'text', '评级'),
|
|
f('payment_terms', 'text', '账期'),
|
|
f('status', 'text', '状态'),
|
|
]),
|
|
master('supplier', 'line_card', '代理线卡', [
|
|
f('supplier_code', 'text', '供应商编码', true),
|
|
f('brand', 'text', '品牌', true),
|
|
f('authorized', 'boolean', '是否授权'),
|
|
f('lead_time_typ', 'text', '常规交期'),
|
|
]),
|
|
master('supplier', 'contact', '供应商联系人', [
|
|
f('supplier_code', 'text', '供应商编码', true),
|
|
f('contact_code', 'text', '联系人编码', true),
|
|
f('name', 'text', '姓名'),
|
|
{ ...f('email', 'text', '邮箱'), masked: true },
|
|
{ ...f('phone', 'text', '电话'), masked: true },
|
|
]),
|
|
|
|
/* ── 市场:买什么、行情如何 ──────────────────────────────────────────
|
|
料号主数据放这一域:ERP 里它常自成一域(物料主数据),
|
|
但这门生意关心的是它**在市场上什么状态**(生命周期、有没有货、什么价),
|
|
跟行情摆在一起更顺手。要独立成域也说得通,记在这儿备考。 */
|
|
master('market', 'part', '料号主数据', [
|
|
f('pn', 'text', '料号', true),
|
|
f('brand', 'text', '品牌'),
|
|
f('category', 'text', '品类'),
|
|
f('package', 'text', '封装'),
|
|
/* Active / NRND / EOL —— A1 三分类与 A2 选型都读它 */
|
|
f('lifecycle', 'text', '生命周期'),
|
|
f('rohs', 'boolean', 'RoHS'),
|
|
f('datasheet_url', 'text', '规格书链接'),
|
|
]),
|
|
master('market', 'price_history', '历史价格情报', [
|
|
f('pn', 'text', '料号', true),
|
|
f('quoted_at', 'date', '报价日期', true),
|
|
f('customer_code', 'text', '客户编码'),
|
|
f('unit_price', 'number', '成交/报出单价'),
|
|
f('lead_time', 'text', '交期'),
|
|
f('lost_reason', 'text', '未成交原因'),
|
|
f('competitor_price', 'number', '竞对价位'),
|
|
]),
|
|
master('market', 'quote_index', '市场行情', [
|
|
f('pn', 'text', '料号', true),
|
|
f('observed_at', 'date', '观测日期', true),
|
|
f('source', 'text', '来源'),
|
|
f('price', 'number', '市场价'),
|
|
f('stock', 'integer', '可见库存'),
|
|
f('trend', 'text', '走势'),
|
|
]),
|
|
|
|
/* ── 料件:P-08 芯片主数据 / P-10 原厂技术资料库(SS02 差异评估 2026-08-26 加,2026-08-27 结构改)──
|
|
字段名与《SS02-SS03-SS04_Demo台账字段细化与统一方案》§4.2 一字不差;全链路只认 internal_pn。
|
|
标准化参数集**改为独立子表 `parts.parameter`**(2026-08-27 用户当场核对实跑页面后指出:
|
|
「做出来的页面结构必须与目标件一致」——目标件《ACT-WORK-05-数据工单-01》本就是两张表,
|
|
表 1 一个料一行(主记录)、表 2 一个参数一行(子表,按所属料号归属);塞进主记录的一个文本
|
|
列违反《统一方案》§六「重复明细用子表承载,不在单一文本字段堆叠」,§4.2 里
|
|
`normalized_parameter_set` 的数据类型本就写的是 `Structure`。物理列 `parts.profile.
|
|
normalized_parameter_set` 仍留在基线里(不删列),只是活动清单不再声明它、不再写它。
|
|
老的 market.part(主键 pn)不复用,记 debt 待并。 */
|
|
master('parts', 'chip_type', '芯片类型', [
|
|
/*
|
|
* **整数自增主键**:人在件上「+新建类型」时这一格留空,由基座按「现有最大 + 1」续号
|
|
* (与 I01 的序号主键同一条路)。**空着的自增列不是身份线索,是「给我续个号」。**
|
|
*/
|
|
f('type_id', 'integer', '类型ID', true),
|
|
f('type_name', 'text', '类型名称'),
|
|
f('description', 'text', '类型说明'),
|
|
]),
|
|
master('parts', 'type_param', '芯片类型核心参数字段', [
|
|
f('type_id', 'integer', '所属类型', true),
|
|
f('param_name', 'text', '核心参数名', true),
|
|
/* **AI 分析时读的就是这一列** —— 参数名本身说不清「它为什么要紧」 */
|
|
f('param_desc', 'text', '参数说明'),
|
|
/*
|
|
* 约束类型从 `parts.parameter`(每颗料各标一次)搬到这里(按类型标一次)——
|
|
* 「同一个参数在两颗料上标法不一致」这件事从此在结构上不可能发生。
|
|
*/
|
|
f('constraint_type', 'text', '约束类型'),
|
|
f('param_unit', 'text', '参考单位'),
|
|
]),
|
|
master('parts', 'profile', '芯片主数据(P-08)', [
|
|
f('internal_pn', 'text', '内部料号', true),
|
|
f('customer_pn', 'text', '客户料号'),
|
|
f('brand_name', 'text', '品牌名称'),
|
|
f('manufacturer_name', 'text', '制造商名称'),
|
|
f('specification_description', 'text', '规格描述'),
|
|
f('normalized_parameter_set', 'text', '标准化参数集(已改子表 parts.parameter,这一列不再声明/不再写)'),
|
|
f('package', 'text', '封装'),
|
|
f('process_technology', 'text', '工艺'),
|
|
f('lifecycle_status', 'text', '生命周期状态'),
|
|
f('eol_pcn_status', 'text', 'EOL/PCN 状态'),
|
|
f('datasheet_ref', 'text', 'Datasheet 引用'),
|
|
f('datasheet_version', 'text', 'Datasheet 版本'),
|
|
f('application_scenarios', 'text', '适配应用场景'),
|
|
f('pin_to_pin_relation_ref', 'text', 'Pin-to-Pin 关系引用'),
|
|
f('chip_type_id', 'integer', '芯片类型'),
|
|
]),
|
|
/* P-08 子表:标准化参数集,一行一参数,按 internal_pn 归属主记录(《统一方案》§六:重复明细用子表) */
|
|
master('parts', 'parameter', '标准化参数集(P-08 子表)', [
|
|
f('internal_pn', 'text', '所属料号', true),
|
|
f('param_name', 'text', '参数名', true),
|
|
f('param_value', 'text', '值'),
|
|
f('param_unit', 'text', '单位'),
|
|
f('constraint_type', 'text', '约束类型'),
|
|
f('param_note', 'text', '说明'),
|
|
]),
|
|
master('parts', 'document', '原厂技术资料库(P-10)', [
|
|
f('internal_pn', 'text', '关联内部料号', true),
|
|
f('doc_seq', 'text', '资料序号(同一料号下 01/02…)', true),
|
|
f('document_type', 'text', '资料类型'),
|
|
f('brand_name', 'text', '品牌名称'),
|
|
f('document_title', 'text', '资料标题'),
|
|
f('document_version', 'text', '资料版本'),
|
|
f('document_date', 'date', '资料发布日期'),
|
|
f('document_ref', 'text', '资料文件链接'),
|
|
f('citation_locator', 'text', '证据定位(页码/章节/表格)'),
|
|
f('source_contact_ref', 'text', '原厂支持联系人'),
|
|
f('document_status', 'text', '资料状态'),
|
|
]),
|
|
|
|
/* ── 需求:P-01 客户具体需求与项目任务主台账 ── */
|
|
master('demand', 'request', '客户需求主记录(P-01)', [
|
|
f('request_id', 'text', '需求编号', true),
|
|
f('customer_code', 'text', '客户编码'),
|
|
f('project_code', 'text', '项目编码'),
|
|
f('requirement_version', 'text', '需求版本'),
|
|
f('request_type', 'text', '需求类型'),
|
|
f('request_description', 'text', '需求描述'),
|
|
f('input_snapshot_ref', 'text', '输入快照'),
|
|
f('bom_id', 'text', 'BOM ID'),
|
|
f('bom_position', 'text', 'BOM 位'),
|
|
f('original_internal_pn', 'text', '原内部料号'),
|
|
f('customer_pn', 'text', '客户料号'),
|
|
f('application_scenario', 'text', '应用场景'),
|
|
f('technical_constraints', 'text', '技术约束'),
|
|
f('risk_level', 'text', '风险等级'),
|
|
f('verification_requirement', 'text', '验证/复测/确认要求'),
|
|
f('request_status', 'text', '需求状态'),
|
|
f('current_activity', 'text', '当前 Activity'),
|
|
f('current_stage', 'text', '当前阶段'),
|
|
f('next_action', 'text', '下一步动作'),
|
|
f('output_ref', 'text', '标准输出链接'),
|
|
]),
|
|
|
|
/* ── 替代:P-11 替代选型与批准关系库 —— 主记录 + 差异明细子表(《统一方案》§六:重复明细用子表)── */
|
|
master('substitution', 'relation', '替代关系主记录(P-11)', [
|
|
f('substitution_relation_id', 'text', '替代关系ID', true),
|
|
f('request_id', 'text', '关联需求编号'),
|
|
f('project_code', 'text', '关联项目编码'),
|
|
f('bom_position', 'text', '关联 BOM 位'),
|
|
f('original_internal_pn', 'text', '原内部料号'),
|
|
f('candidate_internal_pn', 'text', '候选内部料号'),
|
|
f('substitution_type', 'text', '替代类型'),
|
|
f('recommendation_level', 'text', '推荐等级'),
|
|
f('recommendation_reason', 'text', '推荐理由'),
|
|
f('difference_summary', 'text', '差异摘要'),
|
|
f('risk_level', 'text', '替代风险等级'),
|
|
f('verification_requirement', 'text', '验证要求'),
|
|
f('validation_id', 'text', '关联验证ID'),
|
|
f('analysis_status', 'text', '分析状态'),
|
|
/* 客户批准三列由独立审批流维护 —— 基线建列,差异评估活动**不声明写权** */
|
|
f('customer_approval_status', 'text', '客户批准状态'),
|
|
f('customer_approval_at', 'timestamp', '客户批准时间'),
|
|
f('customer_approval_ref', 'text', '客户批准凭证'),
|
|
f('customer_feedback', 'text', '客户反馈'),
|
|
f('analysis_report_ref', 'text', '替代分析报告'),
|
|
f('confidence_score', 'number', '证据可信度'),
|
|
f('rule_version', 'text', '差异规则版本'),
|
|
]),
|
|
master('substitution', 'difference_item', '差异明细(P-11 子表)', [
|
|
f('substitution_relation_id', 'text', '替代关系ID', true),
|
|
f('difference_item_id', 'text', '差异明细ID', true),
|
|
f('parameter_name', 'text', '标准参数名'),
|
|
f('original_value', 'text', '原物料参数值'),
|
|
f('candidate_value', 'text', '候选物料参数值'),
|
|
f('parameter_unit', 'text', '参数单位'),
|
|
f('constraint_type', 'text', '约束类型'),
|
|
f('difference_status', 'text', '差异状态'),
|
|
f('impact_statement', 'text', '影响说明'),
|
|
f('risk_level', 'text', '风险等级'),
|
|
f('evidence_ref', 'text', '差异证据引用'),
|
|
f('confidence', 'number', 'AI 置信度'),
|
|
f('rule_version', 'text', '差异规则版本'),
|
|
]),
|
|
|
|
/* ── 验证:P-06 样品交付与芯片验证记录(事实类:只能实测产生,数据工单不许建)── */
|
|
master('validation', 'record', '芯片验证记录(P-06)', [
|
|
f('validation_id', 'text', '验证ID', true),
|
|
f('request_id', 'text', '关联需求编号'),
|
|
f('customer_code', 'text', '客户编码'),
|
|
f('validation_internal_pn', 'text', '验证内部料号'),
|
|
f('validation_type', 'text', '验证类型'),
|
|
f('test_condition', 'text', '测试条件'),
|
|
f('test_parameters', 'text', '测试参数'),
|
|
f('test_result', 'text', '测试结果'),
|
|
f('validation_status', 'text', '验证状态'),
|
|
f('issue_risk', 'text', '问题与风险'),
|
|
f('sample_version', 'text', '样品版本'),
|
|
f('sample_lot', 'text', '样品批次'),
|
|
f('evidence_ref', 'text', '验证证据引用'),
|
|
f('next_validation_action', 'text', '后续验证动作'),
|
|
]),
|
|
];
|
|
|
|
/** 八域的呈现次序 —— 谁在买 → 为什么买 → 从哪买 → 买什么 → 料件 → 需求 → 替代 → 验证 */
|
|
export const MASTER_DOMAINS = ['customer', 'project', 'supplier', 'market', 'parts', 'demand', 'substitution', 'validation'] as const;
|
|
|
|
/**
|
|
* **样例客户** —— 让「老客户」那条路试得出来。
|
|
*
|
|
* 主数据四域建出来是空的,而 A1 的第一个状态有两条路:
|
|
* 认得出客户就直接过、认不出才请人建档。库里一个客户都没有的话,
|
|
* 两条样例跑起来一模一样 —— **第二条路根本试不到**。
|
|
*
|
|
* 所以随主数据一起播一位客户:样例 2 的来信就用他的邮箱发。
|
|
* 只播这一位,且是**幂等的按主键写**:它是让样例跑得起来的最小夹具,
|
|
* 不是往主数据里塞演示数据 —— 真实客户由 A1 建档时一位一位落进来。
|
|
*/
|
|
export const MASTER_SAMPLE_ROWS: readonly { address: LedgerAddress; key: LedgerKey; values: LedgerRow }[] = [
|
|
/*
|
|
* **Itelma** —— 老客户测试案例的那一位(照 `JCAI_PRD/docs/活动执行页/` 两份目标件)。
|
|
* 俄罗斯车规电子、项目制;客户码 CU-0142 就是需求件上写的「已命中客户资料库」那一条。
|
|
*/
|
|
{
|
|
address: { domain: 'customer', object: 'profile' },
|
|
key: { customer_code: 'CU-0142' },
|
|
values: {
|
|
customer_code: 'CU-0142',
|
|
name: 'Itelma',
|
|
grade: 'A',
|
|
industry: '车规电子',
|
|
region: '俄罗斯',
|
|
payment_terms: 'EXW · CNY 含税',
|
|
profile_tags: '项目制 · 按项目批量询价 · 认证要求严(AEC-Q200)',
|
|
status: 'active',
|
|
/*
|
|
* E04(关系覆盖与关键人经营)字段 —— 2026-08-20 补齐,让「客户已经跑过 E04、
|
|
* 找缺口」这条分支第一次能真被样例跑通(此前这几列全空,每轮都只能从零起草)。
|
|
* decision_chain 只覆盖了 bt-01(采购层),bt-02/bt-03 是刻意留的缺口。
|
|
*/
|
|
cust_type: 'Tier1 OEM',
|
|
coverage_score: 35,
|
|
decision_chain: {
|
|
nodes: [
|
|
{ node: 'bt-01', btLevel: 'bt-01', required: true, contactCode: 'CU-0142-01', covered: true },
|
|
{ node: 'bt-02', btLevel: 'bt-02', required: true, contactCode: '', covered: false },
|
|
{ node: 'bt-03', btLevel: 'bt-03', required: true, contactCode: '', covered: false },
|
|
],
|
|
},
|
|
interaction_timeline: {
|
|
entries: [
|
|
{ date: '2026-06-15', type: '邮件报价跟进', contactCode: 'CU-0142-01', note: 'MD14.1 项目 BOM 报价确认' },
|
|
{ date: '2026-07-20', type: '电话沟通', contactCode: 'CU-0142-01', note: '交期与付款方式确认' },
|
|
],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
address: { domain: 'customer', object: 'contact' },
|
|
key: { customer_code: 'CU-0142', contact_code: 'CU-0142-01' },
|
|
values: {
|
|
customer_code: 'CU-0142',
|
|
contact_code: 'CU-0142-01',
|
|
name: 'Ekaterina Volkova',
|
|
title: '采购部',
|
|
// **认人的钥匙**:老客户样例的来信就从这个邮箱发,A1 第一步照它认得出
|
|
email: 'e.volkova@itelma.ru',
|
|
// E04 字段 —— 对应上面 decision_chain 的 bt-01 节点
|
|
role: '采购',
|
|
decision_node: 'bt-01',
|
|
influence: 'high',
|
|
relationship: 3,
|
|
comm_pref: 'Email',
|
|
key_person: true,
|
|
},
|
|
},
|
|
/*
|
|
* 项目档案 —— 这一单询的是 MD14.1 这个项目的料。
|
|
* 播它是因为需求件上「项目制」那句话得有出处:客户属性说得出「按项目询价」,
|
|
* 库里就该有那个项目,否则那句话是装出来的。
|
|
*/
|
|
{
|
|
address: { domain: 'project', object: 'profile' },
|
|
key: { project_code: 'MD14.1' },
|
|
values: {
|
|
project_code: 'MD14.1',
|
|
customer_code: 'CU-0142',
|
|
name: 'MD14.1 车身控制器',
|
|
stage: 'BOM 后期',
|
|
status: 'active',
|
|
},
|
|
},
|
|
/*
|
|
* **CU-0087** —— E04(关系覆盖与关键人经营)"关键人离职/调岗"样例专用夹具
|
|
* (2026-08-20 补):此前这条样例引用的 CU-0087 在种子数据里根本不存在,
|
|
* 是一处遗留 bug。这里种一位客户 + 两位联系人,decision_chain 的 bt-01
|
|
* (采购层)当下由陈刚覆盖 —— 样例说的正是"这个人要走了,这个节点要重新覆盖"。
|
|
*/
|
|
{
|
|
address: { domain: 'customer', object: 'profile' },
|
|
key: { customer_code: 'CU-0087' },
|
|
values: {
|
|
customer_code: 'CU-0087',
|
|
name: '深圳精密电子有限公司',
|
|
grade: 'B',
|
|
industry: '工业自动化',
|
|
region: '中国·深圳',
|
|
payment_terms: 'T/T 30 天',
|
|
profile_tags: '批量稳定 · 价格敏感',
|
|
status: 'active',
|
|
cust_type: '模组厂',
|
|
coverage_score: 55,
|
|
decision_chain: {
|
|
nodes: [
|
|
{ node: 'bt-01', btLevel: 'bt-01', required: true, contactCode: 'CU-0087-01', covered: true },
|
|
{ node: 'bt-02', btLevel: 'bt-02', required: true, contactCode: 'CU-0087-02', covered: true },
|
|
{ node: 'bt-03', btLevel: 'bt-03', required: false, contactCode: '', covered: false },
|
|
],
|
|
},
|
|
interaction_timeline: {
|
|
entries: [{ date: '2026-05-10', type: '现场拜访', contactCode: 'CU-0087-01', note: '年度框架协议签署' }],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
address: { domain: 'customer', object: 'contact' },
|
|
key: { customer_code: 'CU-0087', contact_code: 'CU-0087-01' },
|
|
values: {
|
|
customer_code: 'CU-0087',
|
|
contact_code: 'CU-0087-01',
|
|
name: 'Chen Gang',
|
|
title: '采购部长',
|
|
// **样例说的就是这个人**:「关键人离职/调岗」引用的正是这一位
|
|
email: 'chen.gang@sz-precision.com',
|
|
role: '采购',
|
|
decision_node: 'bt-01',
|
|
influence: 'high',
|
|
relationship: 4,
|
|
comm_pref: 'Email',
|
|
key_person: true,
|
|
},
|
|
},
|
|
{
|
|
address: { domain: 'customer', object: 'contact' },
|
|
key: { customer_code: 'CU-0087', contact_code: 'CU-0087-02' },
|
|
values: {
|
|
customer_code: 'CU-0087',
|
|
contact_code: 'CU-0087-02',
|
|
name: 'Li Wei',
|
|
title: '技术总监',
|
|
email: 'li.wei@sz-precision.com',
|
|
role: '技术决策人',
|
|
decision_node: 'bt-02',
|
|
influence: 'medium',
|
|
relationship: 3,
|
|
comm_pref: 'Email',
|
|
key_person: false,
|
|
},
|
|
},
|
|
/*
|
|
* I01(品牌形象与销售工具包管理)读的 L-01 宏观市场台账 —— 两条,呼应 I01 的两条
|
|
* 事件驱动样例(「进入俄罗斯市场」「E04 请求定向素材」),让「读市场信号 → 拟内容」
|
|
* 这条分支第一次有真数据可读,不必每轮都读空手。
|
|
*/
|
|
{
|
|
address: { domain: 'market', object: 'signal' },
|
|
key: { signal_id: 'MS-2026-0001' },
|
|
values: {
|
|
signal_id: 'MS-2026-0001',
|
|
signal_type: 'industry_trend',
|
|
title: '俄罗斯车规电子本土化替代加速',
|
|
content: '受供应链管制影响,俄罗斯本土车企与 Tier1 加快引入非欧美芯片供应商,车规级 AEC-Q200 认证成为准入门槛,采购决策周期缩短、更看重供货稳定性承诺。',
|
|
source: '行业报告',
|
|
signal_date: '2026-06-01',
|
|
market_region: '俄罗斯',
|
|
industry: '汽车电子',
|
|
chip_category: 'MCU',
|
|
importance: 4,
|
|
impact_dir: 'opportunity',
|
|
signal_status: 'evaluated',
|
|
version: '2026-Q2',
|
|
review_note: '',
|
|
},
|
|
},
|
|
{
|
|
address: { domain: 'market', object: 'signal' },
|
|
key: { signal_id: 'MS-2026-0002' },
|
|
values: {
|
|
signal_id: 'MS-2026-0002',
|
|
signal_type: 'customer_market',
|
|
title: 'Itelma 系客户新一轮车身控制器项目招标',
|
|
content: 'Itelma 及同类俄罗斯 Tier1 客户密集启动车身控制器新项目招标,价值传递素材需突出认证齐全度与批量交付能力,系统方案白皮书是决策链高层最看重的材料形式。',
|
|
source: '订阅',
|
|
signal_date: '2026-07-10',
|
|
market_region: '俄罗斯',
|
|
industry: '汽车电子',
|
|
chip_category: 'MCU',
|
|
importance: 5,
|
|
impact_dir: 'opportunity',
|
|
signal_status: 'evaluated',
|
|
version: '2026-Q2',
|
|
review_note: '',
|
|
},
|
|
},
|
|
/* 芯片类型字典 —— 字段清单挂在类型上,下面 parts.profile 的 chip_type_id 要指向这里的 type_id,故字典先播。 */
|
|
{ address: { domain: 'parts', object: 'chip_type' }, key: { type_id: 1 }, values: { type_id: 1, type_name: 'DC-DC 降压稳压器', description: '开关式降压转换器:靠电感储能与高频开关把输入电压降到目标输出,效率高、发热小,外围需要电感与输出电容。' } },
|
|
{ address: { domain: 'parts', object: 'chip_type' }, key: { type_id: 2 }, values: { type_id: 2, type_name: 'LDO 线性稳压器', description: '低压差线性稳压器:靠调整管压降稳压,外围简单、噪声低,压差与电流之积全部转成热耗。' } },
|
|
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 1, param_name: '输入电压范围' }, values: { type_id: 1, param_name: '输入电压范围', param_desc: '芯片允许的输入直流电压区间。候选料的上限低于应用输入上限就是硬伤,烧的是芯片。', constraint_type: 'hard', param_unit: 'V' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 1, param_name: '输出电压' }, values: { type_id: 1, param_name: '输出电压', param_desc: '固定版给定值;可调版给可调区间,需外围反馈电阻网络设定。固定换可调要动外围。', constraint_type: 'hard', param_unit: 'V' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 1, param_name: '输出电流' }, values: { type_id: 1, param_name: '输出电流', param_desc: '满载持续输出能力。低于原料即降额,负载重时会掉压或过热保护。', constraint_type: 'hard', param_unit: 'A' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 1, param_name: '开关频率' }, values: { type_id: 1, param_name: '开关频率', param_desc: '决定外围电感与输出电容的取值。频率变了外围多半要跟着换,不是换颗料就完。', constraint_type: 'soft', param_unit: 'kHz' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 1, param_name: '静态电流' }, values: { type_id: 1, param_name: '静态电流', param_desc: '空载待机时自身消耗。电池供电场景敏感,市电场景通常不敏感。', constraint_type: 'soft', param_unit: 'mA' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 1, param_name: '工作温度' }, values: { type_id: 1, param_name: '工作温度', param_desc: '保证参数指标的环境温度区间。工业温域窄于应用要求就是硬伤。', constraint_type: 'hard', param_unit: '℃' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 1, param_name: '使能阈值' }, values: { type_id: 1, param_name: '使能阈值', param_desc: 'ON/OFF 引脚的开关门限。上游用 MCU 电平直驱时,阈值对不上会关不掉或开不起来。', constraint_type: 'hard', param_unit: 'V' } },
|
|
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 2, param_name: '输入电压范围' }, values: { type_id: 2, param_name: '输入电压范围', param_desc: '允许的输入直流电压区间。', constraint_type: 'hard', param_unit: 'V' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 2, param_name: '输出电压' }, values: { type_id: 2, param_name: '输出电压', param_desc: '固定版给定值;可调版需外围分压设定。', constraint_type: 'hard', param_unit: 'V' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 2, param_name: '输出电流' }, values: { type_id: 2, param_name: '输出电流', param_desc: '满载持续输出能力;线性稳压器受热耗限制,实际可用电流常低于标称。', constraint_type: 'hard', param_unit: 'A' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 2, param_name: '压差' }, values: { type_id: 2, param_name: '压差', param_desc: '维持稳压所需的最小输入输出电压差。压差不够就稳不住,输出跟着输入掉。', constraint_type: 'hard', param_unit: 'V' } },
|
|
{ address: { domain: 'parts', object: 'type_param' }, key: { type_id: 2, param_name: '工作温度' }, values: { type_id: 2, param_name: '工作温度', param_desc: '保证参数指标的环境温度区间。', constraint_type: 'hard', param_unit: '℃' } },
|
|
/*
|
|
* ── SS02 差异评估的样例料号(2026-08-26,2026-08-27 参数集改子表)──
|
|
* 只播**原 PN**与**同族可调版**两颗:「都在库」那条路靠它们;候选 XL2596S-5.0 与国产 DCDC
|
|
* **刻意不播** —— 「候选缺库 → 派数据工单」「硬约束不推荐」两条路要试得出来,库里得真没有。
|
|
* 标准化参数集是独立子表 `parts.parameter`,一颗料 7 行(与目标件《数据工单-01》的
|
|
* 表 2 示例预填同形);数值照旧版 `normalized_parameter_set` 文本行逐条搬,一个字不改。
|
|
*/
|
|
{
|
|
address: { domain: 'parts', object: 'profile' },
|
|
key: { internal_pn: 'LM2596S-5.0' },
|
|
values: {
|
|
internal_pn: 'LM2596S-5.0',
|
|
chip_type_id: 1,
|
|
brand_name: 'TI',
|
|
manufacturer_name: 'Texas Instruments',
|
|
specification_description: '降压型 DCDC 稳压器,3A,固定 5.0V,150kHz',
|
|
package: 'TO-263-5',
|
|
process_technology: 'BCD',
|
|
lifecycle_status: 'nrnd',
|
|
eol_pcn_status: 'PCN-2026-07:转 NRND,2027-01 起不接新设计',
|
|
datasheet_ref: 'https://www.ti.com/lit/ds/symlink/lm2596.pdf',
|
|
datasheet_version: 'Rev H (2023-09)',
|
|
application_scenarios: '工业电源;消费电源',
|
|
},
|
|
},
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-5.0', param_name: '输入电压范围' }, values: { internal_pn: 'LM2596S-5.0', param_name: '输入电压范围', param_value: '4.5~40', param_unit: 'V', param_note: '客户输入上限 40V' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-5.0', param_name: '输出电压' }, values: { internal_pn: 'LM2596S-5.0', param_name: '输出电压', param_value: '5.0', param_unit: 'V', param_note: '固定版' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-5.0', param_name: '输出电流' }, values: { internal_pn: 'LM2596S-5.0', param_name: '输出电流', param_value: '3', param_unit: 'A', param_note: '满载能力' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-5.0', param_name: '开关频率' }, values: { internal_pn: 'LM2596S-5.0', param_name: '开关频率', param_value: '150', param_unit: 'kHz', param_note: '影响外围电感/电容' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-5.0', param_name: '静态电流' }, values: { internal_pn: 'LM2596S-5.0', param_name: '静态电流', param_value: '5', param_unit: 'mA', param_note: '待机功耗' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-5.0', param_name: '工作温度' }, values: { internal_pn: 'LM2596S-5.0', param_name: '工作温度', param_value: '-40~+85', param_unit: '℃', param_note: '工业温域' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-5.0', param_name: '使能阈值' }, values: { internal_pn: 'LM2596S-5.0', param_name: '使能阈值', param_value: '1.4', param_unit: 'V', param_note: 'ON/OFF 引脚阈值' } },
|
|
{
|
|
address: { domain: 'parts', object: 'profile' },
|
|
key: { internal_pn: 'LM2596S-ADJ' },
|
|
values: {
|
|
internal_pn: 'LM2596S-ADJ',
|
|
chip_type_id: 1,
|
|
brand_name: 'TI',
|
|
manufacturer_name: 'Texas Instruments',
|
|
specification_description: '降压型 DCDC 稳压器,3A,可调输出 1.23~37V,150kHz(LM2596 同族)',
|
|
package: 'TO-263-5',
|
|
process_technology: 'BCD',
|
|
lifecycle_status: 'active',
|
|
datasheet_ref: 'https://www.ti.com/lit/ds/symlink/lm2596.pdf',
|
|
datasheet_version: 'Rev H (2023-09)',
|
|
application_scenarios: '工业电源;消费电源',
|
|
},
|
|
},
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-ADJ', param_name: '输入电压范围' }, values: { internal_pn: 'LM2596S-ADJ', param_name: '输入电压范围', param_value: '4.5~40', param_unit: 'V', param_note: '与固定版同' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-ADJ', param_name: '输出电压' }, values: { internal_pn: 'LM2596S-ADJ', param_name: '输出电压', param_value: '1.23~37', param_unit: 'V', param_note: '可调版,靠外围反馈网络定' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-ADJ', param_name: '输出电流' }, values: { internal_pn: 'LM2596S-ADJ', param_name: '输出电流', param_value: '3', param_unit: 'A', param_note: '满载能力' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-ADJ', param_name: '开关频率' }, values: { internal_pn: 'LM2596S-ADJ', param_name: '开关频率', param_value: '150', param_unit: 'kHz', param_note: '影响外围电感/电容' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-ADJ', param_name: '静态电流' }, values: { internal_pn: 'LM2596S-ADJ', param_name: '静态电流', param_value: '5', param_unit: 'mA', param_note: '待机功耗' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-ADJ', param_name: '工作温度' }, values: { internal_pn: 'LM2596S-ADJ', param_name: '工作温度', param_value: '-40~+85', param_unit: '℃', param_note: '工业温域' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'LM2596S-ADJ', param_name: '使能阈值' }, values: { internal_pn: 'LM2596S-ADJ', param_name: '使能阈值', param_value: '1.4', param_unit: 'V', param_note: 'ON/OFF 引脚阈值' } },
|
|
/*
|
|
* **AMS1117-3.3**(LDO 类型,chip_type_id: 2)—— 「两颗料类型不一致 → 硬拦」那条路的
|
|
* 唯一素材:不播这颗,「原 PN 是 DC-DC、候选是 LDO,字段清单对不上」这条判断就没有真数据可用。
|
|
*/
|
|
{
|
|
address: { domain: 'parts', object: 'profile' },
|
|
key: { internal_pn: 'AMS1117-3.3' },
|
|
values: {
|
|
internal_pn: 'AMS1117-3.3', chip_type_id: 2, brand_name: 'AMS',
|
|
manufacturer_name: 'Advanced Monolithic Systems', specification_description: '3.3V 固定输出低压差线性稳压器,SOT-223',
|
|
lifecycle_status: 'active', datasheet_ref: 'https://example.invalid/ams1117', datasheet_version: 'Rev.C',
|
|
},
|
|
},
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'AMS1117-3.3', param_name: '输入电压范围' }, values: { internal_pn: 'AMS1117-3.3', param_name: '输入电压范围', param_value: '4.75~15', param_unit: 'V', param_note: '最低受压差限制' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'AMS1117-3.3', param_name: '输出电压' }, values: { internal_pn: 'AMS1117-3.3', param_name: '输出电压', param_value: '3.3', param_unit: 'V', param_note: '固定版' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'AMS1117-3.3', param_name: '输出电流' }, values: { internal_pn: 'AMS1117-3.3', param_name: '输出电流', param_value: '1', param_unit: 'A', param_note: '受散热限制' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'AMS1117-3.3', param_name: '压差' }, values: { internal_pn: 'AMS1117-3.3', param_name: '压差', param_value: '1.3', param_unit: 'V', param_note: '满载时' } },
|
|
{ address: { domain: 'parts', object: 'parameter' }, key: { internal_pn: 'AMS1117-3.3', param_name: '工作温度' }, values: { internal_pn: 'AMS1117-3.3', param_name: '工作温度', param_value: '-40~+125', param_unit: '℃', param_note: '' } },
|
|
{
|
|
address: { domain: 'parts', object: 'document' },
|
|
key: { internal_pn: 'LM2596S-5.0', doc_seq: '01' },
|
|
values: {
|
|
internal_pn: 'LM2596S-5.0',
|
|
doc_seq: '01',
|
|
document_type: 'datasheet',
|
|
brand_name: 'TI',
|
|
document_title: 'LM2596 SIMPLE SWITCHER Power Converter 150-kHz 3-A Step-Down Voltage Regulator',
|
|
document_version: 'Rev H (2023-09)',
|
|
document_ref: 'https://www.ti.com/lit/ds/symlink/lm2596.pdf',
|
|
citation_locator: '§6.5 Electrical Characteristics 表 / §6.3 Recommended Operating Conditions',
|
|
document_status: 'valid',
|
|
},
|
|
},
|
|
{
|
|
address: { domain: 'parts', object: 'document' },
|
|
key: { internal_pn: 'LM2596S-ADJ', doc_seq: '01' },
|
|
values: {
|
|
internal_pn: 'LM2596S-ADJ',
|
|
doc_seq: '01',
|
|
document_type: 'datasheet',
|
|
brand_name: 'TI',
|
|
document_title: 'LM2596 SIMPLE SWITCHER Power Converter 150-kHz 3-A Step-Down Voltage Regulator',
|
|
document_version: 'Rev H (2023-09)',
|
|
document_ref: 'https://www.ti.com/lit/ds/symlink/lm2596.pdf',
|
|
citation_locator: '§6.5 Electrical Characteristics 表(ADJ 列)',
|
|
document_status: 'valid',
|
|
},
|
|
},
|
|
] as const;
|