{
  "_说明": "P10-07B 工序模板定义（静态策略规格）。本文件只承载『几何量/策略/默认刀/余量』等静态字段；S/F/ap/ae 等数值一律由 tools\\gen_cutting_params.py 从 rule_engine 计算后写入 data\\std\\cutting_params.json，本文件不重复存数值，杜绝两处数值打架。",
  "_范式": "模板式半自动：模板只预置『参数/刀路/策略/防撞』，加工区域由用户在 NX 内自行选择，刀路由用户点击生成。脚本不自动绑几何。",
  "_一刀流策略（全局强制）": {
    "transfer_between_passes": "direct（层内步距不抬刀）",
    "transfer_between_levels": "direct（不抬刀）+ 每层螺旋下切 2°（斜进刀等效：NXOpen.xml L288540-288548 实证 NcmPlanarBuilder.TransferBetweenLevelsTypes 只有 PrevPlane/Direct/Clearance，无 Ramp 成员，故不谎称 Ramp）",
    "level_ramp_angle_deg": 2.0,
    "level_overlap_mm": 0.8,
    "engage": "helical（螺旋，8 类铣刀模板无例外；禁止垂直下刀 plunge）",
    "retract": "minimal",
    "lift_each_level": false,
    "retract_to_clearance_each": false,
    "clearance_mode": "only_on_change",
    "理由": "步距/层间直接过渡不抬刀，减少空行程跳刀；仅换刀或换区域时抬到安全平面。垂直下刀改螺旋/斜线，避免扎刀与崩刃。层间禁用垂直直接下切：以 Direct 转移 + 每层螺旋 2° 斜向下切 + 层间重叠 0.8mm 等效斜进刀（NX planar 无 Ramp 枚举成员，如实说明不伪称）。"
  },
  "_防撞策略（全局强制）": {
    "min_tool_len_mm": "刃长+10mm 装夹安全余量（库中无 holder/悬伸数据，取保守值；用户在 NX 内指定刀柄后按实际复核）",
    "holder_ref": "必须在模板内引用刀柄几何，做刀具/夹持与工件/压板干涉检查",
    "interference_check": true,
    "avoidance_mm": 2.0,
    "safe_z_definition": "安全高度 Z = 该工序毛坯（BLANK）/所选区域最高面的 Z + 偏移（默认 8.0mm）；**不是**绝对 Z=8，也不是工件坐标系原点 +8。优先级：毛坯包围盒 maxZ → 所选区域/体 maxZ → 都没有则报错『无法确定最高面，请先定义毛坯或选区域』（不许默认 8）。多工序按『该工序加工区域的最高面』计算，非整件最高面。",
    "safe_z_above_stock_mm": 8.0,
    "safe_z_offset_range_mm": [
      1.0,
      30.0
    ],
    "safe_z_note": "8.0 是『相对最高面的偏移量』。模板件为空件（无毛坯/无区域），故模板内只写偏移，绝不预置绝对 Z；真实安全高度由 tools\\safe_z.py 在『使用时』按该工序最高面计算并打印三段式『基准 Z + 偏移 = 结果』。",
    "理由": "刀长不足是断刀主因；无刀柄几何则干涉检查形同虚设；安全高度取毛坯最高面 +8mm（850 机型 Z 行程 500 内），下刀前必达安全平面。"
  },
  "_engage_nx_actual（.prt 内进刀实际落点，实测）": {
    "_说明": "上面 _一刀流策略 的 engage 是『目标值』；本表是 tools\\gen_templates.py 实际写进 nx_templates\\NXAI_工序模板.prt 并 Commit 成功的『实测值』。两者不一致处以本表为准，原因见 evidence。",
    "planar（face/side/zlevel）": "helical（螺旋）——P10-07G 实测更正：planar 系（NcmPlanarBuilder）**空件无几何也能 Commit 螺旋**，旧『无几何不能螺旋』结论不成立。真根因是 NX 对 (螺旋角 × 螺旋直径 × 最小斜面长度) 的一致性校验：历史失败组合＝MinRampLength 保留默认 70.0 + 未设螺旋直径 → 报 'The ramp angle for engage is not valid.'；按卡文目标参数（螺旋角 2°、直径 0.6D、最小斜面长度 0.25D）设齐后四种 planar 工序全部 Commit OK，读回 EngRetType=3(Helical)。证据 probe_planar_nogeom.json / planar_sweep.json。",
    "sc（surface/area_mill）": "helical_clw（螺旋，顺时针）——POCKET_R/S/F 与 SURFACE 模板已在 .prt 内 Commit 成功，无需用户再改。",
    "hole（drill/tap/thread）": "不适用（孔加工无斜坡进刀；进给与安全平面按孔加工 builder 单独设置）",
    "hole_mill（HOLE_MILLING 螺旋铣孔）": "helical（螺旋，工艺本体即螺旋下刀）——TPL_HOLEMILL 工序子类型=hole_making/HOLE_MILLING（CylinderMilling），切削运动本身就是连续螺旋下刀，无独立 engage 枚举；螺旋参数走 hole_making builder 的 HelixDiameter / AxialDistance，P10-07G 已在模板 .prt 内 Commit（空件模板下 AxialDistance=0 被 NX 拒『Depth per Revolution must be greater than zero』，预置占位 HelixDiameter=2.0mm、AxialDistance=0.2mm 提交 OK；独立进程读回 AxialDistance=0.2 持久化、HelixDiameter 被 NX 在空件保存后重置为 0（无孔几何可算螺旋直径，用户选孔后按实际孔径生效，有孔几何时 AxialDistance 可改回 0=连续螺旋））；更早 P10-07 实证 HelixDiameter=孔径-6 + AxialDistance=0 → cut=1568.6mm。证据 状态\\tpl_gen.json（helical:HelixDiameter/AxialDistance 两条 OK + commit OK）与 状态\\engage_read.json（独立进程读回 AxialDistance=0.2）。",
    "evidence": "D:\\NX_AI\\状态\\engage_probe.json（五变体 Commit 实测原文）、D:\\NX_AI\\状态\\tpl_gen.json（11 模板逐条属性 OK/UNREACHABLE 落证）",
    "nx_min_tool_length": "NX Open CAM 侧**不存在** MinToolLength 属性（NXOpen.xml 全库 grep 无此项）；NX 侧防撞靠工序 CollisionCheck + 刀柄(holder)干涉，数值下限由 template_check.py 的『刃长+10mm』规则做数字校核，不编造不存在的 API。"
  },
  "templates": [
    {
      "tpl_id": "TPL_FACE",
      "name_cn": "面铣（平面）",
      "op_key": "face",
      "nx_type": "mill_planar",
      "nx_subtype": "FLOOR_WALL",
      "family": "mill",
      "applies_to": [
        "REGION_PLANE"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 50.0,
        "min_tool_len_mm": 60.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "光平面，余量 0；如需留量改用手动值",
      "cut_pattern": "ZigZag",
      "cut_direction": "FollowPart",
      "status": "params_only",
      "evidence": "面铣几何绑定在 NX headless 下无可用入口（P10-07 已证 blocked），本模板仅预置参数与策略，区域由用户选",
      "note": "大面积平面建议换 D20R0.8/D32R3（球头/圆鼻），但参数库无 bullnose 条目，改刀后 S/F 会回落材料库，需试切复核"
    },
    {
      "tpl_id": "TPL_SIDE",
      "name_cn": "侧面轮廓铣（侧壁）",
      "op_key": "side",
      "nx_type": "mill_planar",
      "nx_subtype": "WALL_PROFILING",
      "family": "mill",
      "applies_to": [
        "REGION_PROFILE",
        "REGION_STEP"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 50.0,
        "min_tool_len_mm": 60.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "侧壁精铣余量 0；粗铣侧壁请用 TPL_POCKET_R",
      "cut_pattern": "Profile",
      "cut_direction": "Climb",
      "status": "params_only",
      "evidence": "同 TPL_FACE：side 家族绑定被 NX 拒绝（含 Boundary 四 ToolSide 组合全 0 的实证），仅预置参数",
      "note": "顺铣优先（Climb），刀具寿命与表面质量更优"
    },
    {
      "tpl_id": "TPL_POCKET_R",
      "name_cn": "腔体粗加工（留 0.2）",
      "op_key": "surface",
      "nx_type": "mill_contour",
      "nx_subtype": "AREA_MILL",
      "family": "mill",
      "applies_to": [
        "REGION_POCKET"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 50.0,
        "min_tool_len_mm": 60.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "roughing",
      "stock_mm": 0.2,
      "stock_note": "粗加工留 0.2mm（任务卡默认值）",
      "cut_pattern": "Follow",
      "cut_direction": "Climb",
      "status": "verified",
      "evidence": "P10-07 region_ops 实跑：R03 REGION_POCKET 33 面 area-mill 区域驱动 cut=14174.2mm 真刀路；probe_boundary R17 主壁 cut=72.7mm",
      "note": "腔体须内壁+底面整体选中，保证余量一致、无接刀痕、不漏层（P10-07 region_plan 分类规则）"
    },
    {
      "tpl_id": "TPL_POCKET_S",
      "name_cn": "腔体半精（留 0.05）",
      "op_key": "surface",
      "nx_type": "mill_contour",
      "nx_subtype": "AREA_MILL",
      "family": "mill",
      "applies_to": [
        "REGION_POCKET"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 50.0,
        "min_tool_len_mm": 60.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.05,
      "stock_note": "半精留 0.05mm（任务卡默认值）",
      "cut_pattern": "Follow",
      "cut_direction": "Climb",
      "status": "verified",
      "evidence": "同 TPL_POCKET_R 的区域驱动通道（cut>0）；S/F 取精加工档并按 0.4~0.6 缩放 ap/ae",
      "note": "半精无对应 rule_engine 档位，S/F 取 finishing 档（F 相同、S 相同），ap/ae 按 0.4~0.6 倍缩放并在 cutting_params.json 标注 semi_scale"
    },
    {
      "tpl_id": "TPL_POCKET_F",
      "name_cn": "腔体精加工（余量 0）",
      "op_key": "surface",
      "nx_type": "mill_contour",
      "nx_subtype": "AREA_MILL",
      "family": "mill",
      "applies_to": [
        "REGION_POCKET"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 50.0,
        "min_tool_len_mm": 60.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "精加工余量默认 0，允许手动修改；实测差值可走 P10-05 补偿通道",
      "cut_pattern": "Follow",
      "cut_direction": "Climb",
      "status": "verified",
      "evidence": "同 TPL_POCKET_R",
      "note": "精加工 Ap 受 RL-009 约束为 0.1~0.3mm 绝对深度（不按刀径折算）"
    },
    {
      "tpl_id": "TPL_ZLEVEL",
      "name_cn": "深度轮廓铣（陡峭侧壁分层）",
      "op_key": "zlevel",
      "nx_type": "mill_contour",
      "nx_subtype": "ZLEVEL_PROFILE_STEEP",
      "family": "mill",
      "applies_to": [
        "REGION_PROFILE",
        "REGION_POCKET"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 50.0,
        "min_tool_len_mm": 60.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "侧壁精铣余量 0；半精请自留 0.05",
      "cut_pattern": "ZigZag",
      "cut_direction": "Climb",
      "status": "verified",
      "evidence": "P10-07 实证：zlevel 整件 WORKPIECE 组 cut=56825.7mm（probe_boundary K~X 矩阵稳定复现 + region_ops）",
      "note": "层间直接过渡不抬刀（一刀流）；每层切深取 ap（RL-006 clamp 后值）"
    },
    {
      "tpl_id": "TPL_DRILL",
      "name_cn": "钻孔",
      "op_key": "drill",
      "nx_type": "hole_making",
      "nx_subtype": "DRILLING",
      "family": "hole",
      "applies_to": [
        "REGION_HOLE"
      ],
      "tool": {
        "kind": "drill",
        "default_name": "E8",
        "dia_mm": 8.0,
        "teeth": 2,
        "flute_length_mm": 60.0,
        "min_tool_len_mm": 70.0,
        "holder_ref": "BT40-ER20-D8（建议，需在模板内指定）"
      },
      "sf_operation": "drilling",
      "stock_mm": 0.0,
      "stock_note": "钻孔无余量概念",
      "cut_pattern": "StandardDrill",
      "cut_direction": "n/a",
      "status": "verified",
      "evidence": "P10-07 实证：HoleBossSet+InferLogic(孔面)+HoleDepth+SetHoleAxisValues+HoleList.Append+Commit → cut=17.0mm",
      "note": "用户只需在 NX 内选孔面（圆柱面），InferLogic 由 NX 交互自动完成"
    },
    {
      "tpl_id": "TPL_TAP",
      "name_cn": "攻牙（按刀具名解析规格）",
      "op_key": "tap",
      "nx_type": "hole_making",
      "nx_subtype": "TAPPING",
      "family": "hole",
      "applies_to": [
        "REGION_HOLE"
      ],
      "tool": {
        "kind": "tap",
        "default_name": "M8",
        "dia_mm": 8.0,
        "teeth": 1,
        "flute_length_mm": 35.0,
        "min_tool_len_mm": 45.0,
        "holder_ref": "BT40-ER20-M8（建议，需在模板内指定）",
        "pitch_mm": 1.25
      },
      "sf_operation": "tapping",
      "stock_mm": 0.0,
      "stock_note": "攻牙无余量概念",
      "cut_pattern": "StandardTap",
      "cut_direction": "n/a",
      "status": "verified",
      "evidence": "P10-07 实证：ThreadedHoleSet(CreateThreadedHoleBuilder 15参 Metric)+InferLogic+ThreadedHoleList.Append+Commit → cut=50.0mm",
      "note": "N 组 M8 换算 rpm≈497.4 / feed≈621.7（Vc=12.5 出处 tapping_speed.json 用户车间经验值）；S/H 组无出处，模板对这两组明确报『参数不可用』"
    },
    {
      "tpl_id": "TPL_HOLEMILL",
      "name_cn": "铣孔（螺旋）",
      "op_key": "hole",
      "nx_type": "hole_making",
      "nx_subtype": "HOLE_MILLING",
      "family": "hole",
      "applies_to": [
        "REGION_HOLE"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D8",
        "dia_mm": 8.0,
        "teeth": 3,
        "flute_length_mm": 40.0,
        "min_tool_len_mm": 50.0,
        "holder_ref": "BT40-ER20-D8（建议，需在模板内指定）"
      },
      "sf_operation": "roughing",
      "stock_mm": 0.0,
      "stock_note": "铣孔按孔径留量由 NX 螺旋直径控制（HelixDiameter=孔径-6）",
      "cut_pattern": "Helix",
      "cut_direction": "Climb",
      "status": "verified",
      "evidence": "P10-07 实证：drill 通道 + HelixDiameter=D-6 + AxialDistance=0 → cut=1568.6mm；P10-07G 模板 .prt 内 HelixDiameter/AxialDistance 已 Commit（gen_templates apply_hole_helical），独立进程读回见 状态\\engage_read.json",
      "note": "适合大孔/无对应钻头孔径；进刀即螺旋（HOLE_MILLING 本体连续螺旋下刀，helical），天然满足一刀流与防扎刀"
    },
    {
      "tpl_id": "TPL_THREAD",
      "name_cn": "铣螺纹",
      "op_key": "thread",
      "nx_type": "hole_making",
      "nx_subtype": "THREAD_MILLING",
      "family": "hole",
      "applies_to": [
        "REGION_HOLE"
      ],
      "tool": {
        "kind": "thread_mill",
        "default_name": "THM16（库中缺，占位 D16R0.4）",
        "dia_mm": 16.0,
        "teeth": 4,
        "flute_length_mm": 60.0,
        "min_tool_len_mm": 70.0,
        "holder_ref": "BT40-ER32-D16（建议，需在模板内指定）"
      },
      "sf_operation": "threading",
      "stock_mm": 0.0,
      "stock_note": "铣螺纹无余量概念",
      "cut_pattern": "ThreadHelix",
      "cut_direction": "Climb",
      "status": "blocked",
      "evidence": "P10-07 实证：ThreadedHoleSet 绑定链路全 OK（含专用刀 CreateDrillThreadMillToolBuilder、专用工厂 CreateThreadMillingBuilder、op 层 HoleDepth、Metric M36x4、tableStandard ISO）但 GetToolpathCuttingLength()=0，共 7 轮实验均不出刀路",
      "note": "库中无螺纹铣刀（48 把刀无 thread_mill 类型），tool_type=thread_mill 在参数库中无条目 → S/F 需用户按刀具样本手填；本模板参数预置但不承诺 NX 侧能出刀路，如实标注 blocked"
    },
    {
      "tpl_id": "TPL_SURFACE",
      "name_cn": "曲面（区域铣削）",
      "op_key": "surface",
      "nx_type": "mill_contour",
      "nx_subtype": "AREA_MILL",
      "family": "mill",
      "applies_to": [
        "REGION_POCKET",
        "REGION_STEP"
      ],
      "tool": {
        "kind": "end_mill_ball",
        "default_name": "R5",
        "dia_mm": 10.0,
        "teeth": 2,
        "flute_length_mm": 45.0,
        "min_tool_len_mm": 55.0,
        "holder_ref": "BT40-ER20-R5（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "曲面精加工余量 0；粗加工请用 TPL_POCKET_R",
      "cut_pattern": "Follow",
      "cut_direction": "Climb",
      "status": "verified",
      "evidence": "同 TPL_POCKET_R 的 AREA_MILL 区域驱动通道（球刀参数走 SpeedFeedTable end_mill_ball 条目）",
      "note": "球刀步距受残高约束，ae 取 SpeedFeedTable 的 ae_pct（粗 40%/精 8%），必要时应按残高公式再收窄"
    },
    {
      "tpl_id": "TPL_GUIDE",
      "name_cn": "引导曲线（多轴）",
      "op_key": "guidecurve",
      "nx_type": "mill_multi_axis",
      "nx_subtype": "GUIDING_CURVES",
      "family": "multi",
      "applies_to": [
        "REGION_SURFACE"
      ],
      "tool": {
        "kind": "end_mill_ball",
        "default_name": "R5",
        "dia_mm": 10.0,
        "teeth": 2,
        "flute_length_mm": 45.0,
        "min_tool_len_mm": 55.0,
        "holder_ref": "BT40-ER20-R5（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "引导曲线用于曲面精加工，余量 0；粗加工先用 TPL_POCKET_R",
      "cut_pattern": "GuidingCurve",
      "cut_direction": "Climb",
      "status": "params_only",
      "evidence": "P10-02 探测：guidecurve 候选 26 个（mill_multi_axis 下）；多轴工序需 NX 多轴铣许可，未在本机验证出刀路",
      "note": "需两条引导曲线（A/B）+ 刀轴方向（+Z 或指定矢量）；无多轴许可时 NX 会拒绝创建，属预期，不要用三轴冒充"
    },
    {
      "tpl_id": "TPL_SIDE_MM",
      "name_cn": "侧铣（侧刃铣削）",
      "op_key": "side",
      "nx_type": "mill_planar",
      "nx_subtype": "WALL_PROFILING",
      "family": "mill",
      "applies_to": [
        "REGION_PROFILE",
        "REGION_STEP"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 60.0,
        "min_tool_len_mm": 70.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "侧壁精铣余量 0；要留量给半精请改 0.05",
      "cut_pattern": "Side",
      "cut_direction": "Climb",
      "status": "params_only",
      "evidence": "与 TPL_SIDE 同族（mill_planar/WALL_PROFILING）；TPL_SIDE 已验证参数与策略，本模板为长刃侧铣变体（刃长 60mm）",
      "note": "用刀具侧刃切削侧壁：一次走刀切全深（ap=刀长范围内一次到底），适合薄壁与长直侧壁；切入必须螺旋/斜下刀，禁止垂直扎刀"
    },
    {
      "tpl_id": "TPL_CAVITY",
      "name_cn": "型腔铣（毛坯开粗）",
      "op_key": "cavity",
      "nx_type": "mill_contour",
      "nx_subtype": "CAVITY_MILL",
      "family": "mill",
      "applies_to": [
        "REGION_POCKET",
        "REGION_STEP",
        "REGION_BLANK"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D20",
        "dia_mm": 20.0,
        "teeth": 4,
        "flute_length_mm": 45.0,
        "min_tool_len_mm": 55.0,
        "holder_ref": "BT40-ER32-D20（建议，需在模板内指定）"
      },
      "sf_operation": "roughing",
      "stock_mm": 0.2,
      "stock_note": "型腔铣开粗留 0.2mm；需要半精+精时另加 TPL_POCKET_S/F 或 TPL_ZLEVEL",
      "cut_pattern": "Follow",
      "cut_direction": "Climb",
      "status": "params_only",
      "evidence": "P10-02 探测：mill_contour 下 CAVITY_MILL 可创建；但 headless 下整件/区域几何绑定未通过（同 FACE/SIDE 类限制），故预置参数与策略",
      "note": "型腔铣按【毛坯(Blank)】逐层切除，务必先定义毛坯几何；一次走刀到底用较深 ap（0.5~1D），ae 取 0.3~0.5D；开启 IPW 可做二次开粗（剩余铣）"
    },
    {
      "tpl_id": "TPL_CAVITY_REST",
      "name_cn": "剩余铣（二次开粗/清角）",
      "op_key": "rest",
      "nx_type": "mill_contour",
      "nx_subtype": "REST_MILLING",
      "family": "mill",
      "applies_to": [
        "REGION_POCKET",
        "REGION_STEP"
      ],
      "tool": {
        "kind": "end_mill_flat",
        "default_name": "D12",
        "dia_mm": 12.0,
        "teeth": 3,
        "flute_length_mm": 50.0,
        "min_tool_len_mm": 60.0,
        "holder_ref": "BT40-ER32-D12（建议，需在模板内指定）"
      },
      "sf_operation": "roughing",
      "stock_mm": 0.2,
      "stock_note": "清上一把刀剩下的料，余量沿用 0.2",
      "cut_pattern": "Follow",
      "cut_direction": "Climb",
      "status": "params_only",
      "evidence": "P10-02 探测：mill_contour 下 REST_MILLING 存在；需参考上一工序 IPW，headless 未验证",
      "note": "刀具直径取上一把刀 × 0.6（粗 D20 → 剩余铣 D12）；必须选择「参考刀具/IPW」，否则等于重复开粗"
    },
    {
      "tpl_id": "TPL_CHAMFER",
      "name_cn": "倒角（沿边一次走完）",
      "op_key": "chamfer",
      "nx_type": "mill_planar",
      "nx_subtype": "PLANAR_MILL",
      "family": "mill",
      "applies_to": [
        "REGION_EDGE"
      ],
      "tool": {
        "kind": "chamfer",
        "default_name": "C10-90",
        "dia_mm": 10.0,
        "teeth": 4,
        "flute_length_mm": 15.0,
        "min_tool_len_mm": 25.0,
        "holder_ref": "BT40-ER20-C10（建议，需在模板内指定）"
      },
      "sf_operation": "finishing",
      "stock_mm": 0.0,
      "stock_note": "倒角不留余量，一次到位",
      "cut_pattern": "Profile",
      "cut_direction": "Climb",
      "status": "params_only",
      "evidence": "改试 PLANAR_MILL（平面铣，支持曲线/边驱动）；PLANAR_PROFILE 在 headless 下绑定被拒",
      "note": "用法：选零件边缘（线/边）→ 沿边走一刀。90°倒角刀：Z 下刀深度 = 倒角宽度（因为45°两边相等）；60°刀：Z = 倒角宽度 × tan(30°)。进刀必须螺旋/斜下，禁止垂直扎刀；走刀方向建议顺铣（Climb）"
    }
  ],
  "_level_nx_actual": {
    "TPL_DRILL": {
      "transfer_between_levels": "N/A（孔类工序无层间转移概念）",
      "overlap_distance_mm": "N/A",
      "level_note": "孔类",
      "op_key": "drill",
      "builder": "HoleDrillingBuilder",
      "engage": {},
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_FACE": {
      "transfer_within_levels": {
        "value": 2,
        "name": "Direct"
      },
      "transfer_between_levels": {
        "value": 0,
        "name": "PrevPlane"
      },
      "transfer_between_regions": {
        "value": 2,
        "name": "Direct"
      },
      "overlap_distance_mm": "EXC:AttributeError:'NXOpen.CAM.VolumeBased25DMillingOperationBuilder' object has no attribute 'OverlapDistanceBuilder'",
      "apply_safety_to_direct": false,
      "collision_check": true,
      "lift_at_level_change": false,
      "level_note": "层间=Direct/PrevPlane(不抬刀)+螺旋下切2°(斜进刀等效)；NXOpen.xml L288540-288548 实证本枚举无 Ramp 成员",
      "op_key": "face",
      "builder": "VolumeBased25DMillingOperationBuilder",
      "engage": {
        "EngageInitialOpenBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageInitialClosedBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageOpenAreaBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageClosedAreaBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        }
      },
      "clearance_type": {
        "value": 2,
        "name": "Automatic"
      }
    },
    "TPL_HOLEMILL": {
      "transfer_between_levels": "N/A（孔类工序无层间转移概念）",
      "overlap_distance_mm": "N/A",
      "level_note": "孔类",
      "op_key": "hole",
      "builder": "CylinderMillingBuilder",
      "engage": {},
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_POCKET_F": {
      "transfer_within_levels": "MISS（NcmScBuilder 无此成员，NXOpen.xml L289349-289500 实证）",
      "transfer_between_levels": "MISS（同上）",
      "overlap_distance_mm": "MISS（同上）",
      "level_note": "sc 系无层间转移/重叠成员；层间斜向下切由螺旋进刀角承担",
      "op_key": "surface",
      "builder": "SurfaceContourBuilder",
      "engage": {
        "EngageInitialBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        },
        "EngageOpenAreaBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        }
      },
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_POCKET_R": {
      "transfer_within_levels": "MISS（NcmScBuilder 无此成员，NXOpen.xml L289349-289500 实证）",
      "transfer_between_levels": "MISS（同上）",
      "overlap_distance_mm": "MISS（同上）",
      "level_note": "sc 系无层间转移/重叠成员；层间斜向下切由螺旋进刀角承担",
      "op_key": "surface",
      "builder": "SurfaceContourBuilder",
      "engage": {
        "EngageInitialBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        },
        "EngageOpenAreaBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        }
      },
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_POCKET_S": {
      "transfer_within_levels": "MISS（NcmScBuilder 无此成员，NXOpen.xml L289349-289500 实证）",
      "transfer_between_levels": "MISS（同上）",
      "overlap_distance_mm": "MISS（同上）",
      "level_note": "sc 系无层间转移/重叠成员；层间斜向下切由螺旋进刀角承担",
      "op_key": "surface",
      "builder": "SurfaceContourBuilder",
      "engage": {
        "EngageInitialBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        },
        "EngageOpenAreaBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        }
      },
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_SIDE": {
      "transfer_within_levels": {
        "value": 2,
        "name": "Direct"
      },
      "transfer_between_levels": {
        "value": 0,
        "name": "PrevPlane"
      },
      "transfer_between_regions": {
        "value": 2,
        "name": "Direct"
      },
      "overlap_distance_mm": "EXC:AttributeError:'NXOpen.CAM.VolumeBased25DMillingOperationBuilder' object has no attribute 'OverlapDistanceBuilder'",
      "apply_safety_to_direct": false,
      "collision_check": true,
      "lift_at_level_change": false,
      "level_note": "层间=Direct/PrevPlane(不抬刀)+螺旋下切2°(斜进刀等效)；NXOpen.xml L288540-288548 实证本枚举无 Ramp 成员",
      "op_key": "side",
      "builder": "VolumeBased25DMillingOperationBuilder",
      "engage": {
        "EngageInitialOpenBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageInitialClosedBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageOpenAreaBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageClosedAreaBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        }
      },
      "clearance_type": {
        "value": 2,
        "name": "Automatic"
      }
    },
    "TPL_SURFACE": {
      "transfer_within_levels": "MISS（NcmScBuilder 无此成员，NXOpen.xml L289349-289500 实证）",
      "transfer_between_levels": "MISS（同上）",
      "overlap_distance_mm": "MISS（同上）",
      "level_note": "sc 系无层间转移/重叠成员；层间斜向下切由螺旋进刀角承担",
      "op_key": "surface",
      "builder": "SurfaceContourBuilder",
      "engage": {
        "EngageInitialBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        },
        "EngageOpenAreaBuilder": {
          "EngRetType": 9,
          "EngRetTypeName": "HelicalClw",
          "EngRetRaw": "9",
          "HelicalRampAngle": 2.0
        }
      },
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_TAP": {
      "transfer_between_levels": "N/A（孔类工序无层间转移概念）",
      "overlap_distance_mm": "N/A",
      "level_note": "孔类",
      "op_key": "tap",
      "builder": "HoleDrillingBuilder",
      "engage": {},
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_THREAD": {
      "transfer_between_levels": "N/A（孔类工序无层间转移概念）",
      "overlap_distance_mm": "N/A",
      "level_note": "孔类",
      "op_key": "thread",
      "builder": "ThreadMillingBuilder",
      "engage": {},
      "clearance_type": {
        "value": null,
        "name": null
      }
    },
    "TPL_ZLEVEL": {
      "transfer_within_levels": {
        "value": 2,
        "name": "Direct"
      },
      "transfer_between_levels": {
        "value": 0,
        "name": "PrevPlane"
      },
      "transfer_between_regions": {
        "value": 2,
        "name": "Direct"
      },
      "overlap_distance_mm": "EXC:AttributeError:'NXOpen.CAM.ZLevelMillingBuilder' object has no attribute 'OverlapDistanceBuilder'",
      "apply_safety_to_direct": false,
      "collision_check": true,
      "lift_at_level_change": false,
      "level_note": "层间=Direct/PrevPlane(不抬刀)+螺旋下切2°(斜进刀等效)；NXOpen.xml L288540-288548 实证本枚举无 Ramp 成员",
      "op_key": "zlevel",
      "builder": "ZLevelMillingBuilder",
      "engage": {
        "EngageInitialOpenBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageInitialClosedBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageOpenAreaBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        },
        "EngageClosedAreaBuilder": {
          "EngRetType": 3,
          "EngRetTypeName": "Helical",
          "EngRetRaw": "3",
          "HelicalRampAngle": 2.0
        }
      },
      "clearance_type": {
        "value": 2,
        "name": "Automatic"
      }
    }
  },
  "_level_nx_actual_读回时间": "2026-10-20 20:50:02",
  "_level_nx_actual_来源": "probe_level_read.py（独立进程打开 D:\\NX_AI\\nx_templates\\NXAI_工序模板.prt 读回；原始证据在 状态\\level_read.json，旧版读数备份在 状态\\level_read_20261020_203330.bak.json）",
  "_updated": "2026-10-21 13:22"
}