eSIM RSP 测试用例对比站

人工切片(-man) ↔ Cas 盲生成(-cas)· 真机真卡执行证据对照

源码对照:5.2.8.2.1

启用/停用/删除通知 / TC_eUICC_Enable_Disable_Delete_Notifications

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
191 行 / 11351 字符 / gb18030
-cas 入口
TC_eUICC_Enable_Disable_Delete_Notifications/Import/TC_eUICC_Enable_Disable_Delete_Notifications.js
178 行 / 12737 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js191 行 / 11351 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications (extracted verbatim)
2
3function TC_eUICC_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications()
4{
5	
6	tracenamestr = "验证当执行本地Profile管理操作(即激活、禁用和删除Profile)时,eUICC会生成所有在notificationConfigurationInfo中已配置的通知。";
7	curDis.TraceStart(sno++,tracenamestr);
8
9	curDis.TestStepStart("eUICC卡片初始化;");
10	Ini_powerOn_eUICC_LPAe_not_activate();
11	
12	curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
13	TS_MANAGE_CHANNEL_OPEN();
14	
15	curLogicChannel = 1;
16	
17	curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
18	TS_SELECT("Select ISD",ISD_R_AID,"9000");
19	
20	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
21	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
22	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
23	Profile_load_procedure.ES10b_GetEUICCInfo1();
24	
25	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
26	Profile_load_procedure.ES10b_GetEUICCChallenge();
27
28	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
29	Profile_load_procedure.ES10b_AuthenticateServer();
30	
31	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行PrepareDownloadRequest;");
32	Profile_load_procedure.ES10b_PrepareDownload();
33	
34	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccDataRequest(GetEID);");
35	Profile_load_procedure.ES10b_GetEID();
36	
37	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行BoundProfilePackage;");
38	Profile_load_procedure.serviceProviderName = SP_NAME1;	//SP Name 1
39	Profile_load_procedure.profileName = PROFILE_OPERATIONAL1_NAME1;
40	Profile_load_procedure.notificationConfigurationInfo = new SequenceOfElement("30");
41	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0] = new NotificationConfigurationInformation();
42	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].profileManagementOperation = "04F0";
43	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].notificationAddress = TEST_DP_ADDRESS1;
44	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1] = new NotificationConfigurationInformation();
45	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].profileManagementOperation = "04F0";
46	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].notificationAddress = TEST_DP_ADDRESS2;
47	Profile_load_procedure.ES10b_LoadBoundProfilePackage();
48	
49	var ISD_P_Test01 = curProfile_ISD_P_AID;
50	
51	initial_condition_Remove_All_Notification();
52	
53	tracenamestr = "profile中的notificationConfigurationInfo全部配置时,执行Enable, Disable and Delete Profile操作,检查通知";
54	curDis.TraceStart(sno++,tracenamestr);
55	
56	curLogicChannel = 0;
57	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
58	Ini_powerOn_eUICC_LPAe_not_activate();
59	
60	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
61	TS_MANAGE_CHANNEL_OPEN();
62	
63	curLogicChannel = 1;
64	
65	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
66	TS_SELECT("Select ISD",ISD_R_AID,"9000");
67	
68	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,激活profile1;");
69	var enableProRequest = new EnableProfileRequest();
70	enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
71	enableProRequest.refreshFlag = BooleanValue_BerCode_False;
72	enableProRequest.GenHexData();
73	var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData);
74	
75	curStrHandle.CheckData("BF3103800100", respData, "EnableProfileResponse");
76	
77	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
78	Profile_load_procedure.ES10b_ListNotification("04F0");
79	
80	try
81	{
82		curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
83		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
84		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
85		var NotifiSqn1 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
86		
87		curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
88		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
89		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
90		var NotifiSqn2 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
91		
92		curStrHandle.CheckData(NotifiSqn2, EnCodeInteger_Ber(parseInt(NotifiSqn1,16) + 1), "<NOTIF_SEQ_NO_EN> and <NOTIF_SEQ_NO_EN2> follow this order in an incremental");
93		
94		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
95	}catch(e){
96		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
97	}
98
99	
100	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除所有的通知;");
101	var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
102	
103	for(var i=0;i<NotificationLen;i++)
104	{
105		var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
106	    Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
107	    var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
108	    curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
109	}
110	
111	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行DisableProfileRequest,失效profile1;");
112	var disableProRequest = new DisableProfileRequest();
113	disableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
114	disableProRequest.refreshFlag = BooleanValue_BerCode_False;
115	disableProRequest.GenHexData();
116	var respData = LPAd_Transport_data_to_eUICC(disableProRequest.hexData);
117	
118	curStrHandle.CheckData("BF3203800100", respData, "DisableProfileResponse");
119	
120	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
121	Profile_load_procedure.ES10b_ListNotification("04F0");
122	
123	try
124	{
125		curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
126		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
127		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
128		var NotifiSqn3 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
129		
130		curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
131		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
132		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
133		var NotifiSqn4 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
134		
135		curStrHandle.CheckData(NotifiSqn3, EnCodeInteger_Ber(parseInt(NotifiSqn2,16) + 1), "通知计数器加1");
136		if (NotifiSqn3 < NotifiSqn2)
137			obj.SubLevelError("通知计数器的值应该越来越大");
138		curStrHandle.CheckData(NotifiSqn4, EnCodeInteger_Ber(parseInt(NotifiSqn3,16) + 1), "通知计数器加1");
139		
140		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
141	}catch(e){
142		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
143	}
144	
145	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除所有的通知;");
146	var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
147	
148	for(var i=0;i<NotificationLen;i++)
149	{
150		var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
151	    Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
152	    var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
153	    curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
154	}
155	
156	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行DeleteProfileRequest;");
157	var deleProfileRequest = new DeleteProfileRequest();
158	deleProfileRequest.iccid = ICCID_OP_PROF1;
159	deleProfileRequest.GenHexData();
160	var respData = LPAd_Transport_data_to_eUICC(deleProfileRequest.hexData);
161	
162	curStrHandle.CheckData("BF3303800100", respData, "DeleteProfileResponse");
163	
164	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
165	Profile_load_procedure.ES10b_ListNotification("04F0");
166	
167	try
168	{
169		curStrHandle.CheckData("0410",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
170		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
171		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
172		var NotifiSqn5 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
173		
174		curStrHandle.CheckData("0410",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
175		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
176		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
177		var NotifiSqn6 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
178		
179		curStrHandle.CheckData(NotifiSqn5, EnCodeInteger_Ber(parseInt(NotifiSqn4,16) + 1), "通知计数器加1");
180		if (NotifiSqn5 < NotifiSqn4)
181			obj.SubLevelError("通知计数器的值应该越来越大");
182		curStrHandle.CheckData(NotifiSqn6, EnCodeInteger_Ber(parseInt(NotifiSqn5,16) + 1), "通知计数器加1");
183		
184		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
185	}catch(e){
186		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
187	}
188	
189	RecoverCard();
190}
191
-cas 盲生成TC_eUICC_Enable_Disable_Delete_Notifications/Import/TC_eUICC_Enable_Disable_Delete_Notifications.js178 行 / 12737 字符 / gb18030入口函数 @L16
1// Author: 卡思Cas智能体
2// Date: 20261004-022948
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_Enable_Disable_Delete_Notifications,Test Sequence #01 Nominal: Multiple Enable, Disable and Delete Notifications(本 TC 单条 Test Sequence),适用性 M。
4// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
5//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
6//   ICH-IC2-K2-C4 SW;S4-C1 SW
7//   S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count
8//   S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields;S9-C1 SW
9//   S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count
10//   S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields;S12-C1 SW
11//   S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count
12//   S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields
13// 本函数由 CaseIR 5.2.8.2.1 编译生成(5.2.8.2.1-TC_eUICC_Enable_Disable_Delete_Notifications-20261004_022948,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
14// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
15// 适用性 M:编译期门,运行时由 harness 环境前置承担。
16function TC_eUICC_Enable_Disable_Delete_Notifications_01_merged() {
17    var bind = curBind;
18    // GEN-IC-1 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 with #METADATA_EN_DI_DE_NOTIFS is loaded on the eUICC: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
19    // GEN-IC-2 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 is Disabled: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
20    // GEN-IC-3 卡态声明(E 段 General Initial Conditions,编排责任):No Notification is stored in the eUICC's Pending Notifications List: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
21
22    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
23    var s13 = bind.resetAndAtr();
24    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s13.atr_hex !== "" ? "1" : "0");
25
26    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
27    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
28    var s14 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
29    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s14.resp.length > 0 ? "1" : "0");
30    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s14.sw);
31
32    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
33    var s15 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
34    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s15.sw);
35
36    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
37    var steady16 = bind.runToSteadyState(function () {
38        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
39    });
40    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady16.final.sw);
41
42    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
43    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
44    var s17 = bind.manageChannelOpen("9000");
45    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s17.sw);
46    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s17.chan !== null ? "1" : "0");
47
48    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
49    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
50    var s18 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
51    // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
52    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s18.sw);
53
54    // 步骤 1:Enable PROFILE_OPERATIONAL1(tc_step)
55    // card-state orchestration declaration (no APDU face): execution is
56    // the batch card_state prep framework's responsibility (4227 ruling B
57    // same-family scope; ensure_profile_state / prep_packager);
58    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
59
60    // 步骤 2:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
61    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
62    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
63
64    // 步骤 3:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
65    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
66    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
67
68    // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ57_135_6)
69    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
70    var sdCla4 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
71    var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF2804810204F0", "00", "9000");
72    bind.checkData("S4-C1 SW", "9000", s4.sw);
73    // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
74    var lw4T = BindEs10xSingleRequest.parseBerTlv(s4.resp);
75    var lw4Ok0 = lw4T.length === 1 && lw4T[0].tag === "BF28";
76    var lw4_br = lw4Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw4T[0].value) : [];
77    var lw4_brtag = lw4_br.length === 1 ? lw4_br[0].tag : "";
78    var lw4_els = lw4_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw4_br[0].value) : [];
79    bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count", "1", (lw4_brtag === "A0" && lw4_els.length === 2) ? "1" : "0");
80    var lw4_fok = lw4_brtag === "A0" && lw4_els.length > 0;
81    for (var lw4i = 0; lw4i < lw4_els.length; lw4i++) {
82        if (lw4_els[lw4i].tag !== "BF2F") { lw4_fok = false; continue; }
83        var lw4M = BindEs10xSingleRequest.parseBerTlv(lw4_els[lw4i].value);
84        var lw4_f = {};
85        for (var lw4j = 0; lw4j < lw4M.length; lw4j++) {
86            if (lw4_f[lw4M[lw4j].tag] === undefined) { lw4_f[lw4M[lw4j].tag] = lw4M[lw4j].value; }
87        }
88        if (lw4_f["80"] === undefined) { lw4_fok = false; }
89        if (lw4_f["81"] !== "0640") { lw4_fok = false; }  // operation
90        if (lw4_f["5A"] !== "989209012143658709F5") { lw4_fok = false; }  // iccid
91    }
92    bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields", "1", lw4_fok ? "1" : "0");
93
94    // 步骤 5:Remove all the pending notifications(tc_step)
95    // card-state orchestration declaration (no APDU face): execution is
96    // the batch card_state prep framework's responsibility (4227 ruling B
97    // same-family scope; ensure_profile_state / prep_packager);
98    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
99
100    // 步骤 6:Disable PROFILE_OPERATIONAL1(tc_step)
101    // card-state orchestration declaration (no APDU face): execution is
102    // the batch card_state prep framework's responsibility (4227 ruling B
103    // same-family scope; ensure_profile_state / prep_packager);
104    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
105
106    // 步骤 7:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
107    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
108    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
109
110    // 步骤 8:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
111    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
112    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
113
114    // 步骤 9:MTD_STORE_DATA(tc_step;REQ: RQ57_142_17)
115    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
116    var sdCla9 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
117    var s9 = bind.sendApdu(sdCla9, "E2", "91", "00", "BF2804810204F0", "00", "9000");
118    bind.checkData("S9-C1 SW", "9000", s9.sw);
119    // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
120    var lw9T = BindEs10xSingleRequest.parseBerTlv(s9.resp);
121    var lw9Ok0 = lw9T.length === 1 && lw9T[0].tag === "BF28";
122    var lw9_br = lw9Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw9T[0].value) : [];
123    var lw9_brtag = lw9_br.length === 1 ? lw9_br[0].tag : "";
124    var lw9_els = lw9_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw9_br[0].value) : [];
125    bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count", "1", (lw9_brtag === "A0" && lw9_els.length === 2) ? "1" : "0");
126    var lw9_fok = lw9_brtag === "A0" && lw9_els.length > 0;
127    for (var lw9i = 0; lw9i < lw9_els.length; lw9i++) {
128        if (lw9_els[lw9i].tag !== "BF2F") { lw9_fok = false; continue; }
129        var lw9M = BindEs10xSingleRequest.parseBerTlv(lw9_els[lw9i].value);
130        var lw9_f = {};
131        for (var lw9j = 0; lw9j < lw9M.length; lw9j++) {
132            if (lw9_f[lw9M[lw9j].tag] === undefined) { lw9_f[lw9M[lw9j].tag] = lw9M[lw9j].value; }
133        }
134        if (lw9_f["80"] === undefined) { lw9_fok = false; }
135        if (lw9_f["81"] !== "0520") { lw9_fok = false; }  // operation
136        if (lw9_f["5A"] !== "989209012143658709F5") { lw9_fok = false; }  // iccid
137    }
138    bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields", "1", lw9_fok ? "1" : "0");
139
140    // 步骤 10:Remove all the pending notifications(tc_step)
141    // card-state orchestration declaration (no APDU face): execution is
142    // the batch card_state prep framework's responsibility (4227 ruling B
143    // same-family scope; ensure_profile_state / prep_packager);
144    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
145
146    // 步骤 11:Delete PROFILE_OPERATIONAL1(tc_step)
147    // card-state orchestration declaration (no APDU face): execution is
148    // the batch card_state prep framework's responsibility (4227 ruling B
149    // same-family scope; ensure_profile_state / prep_packager);
150    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
151
152    // 步骤 12:MTD_STORE_DATA(tc_step;REQ: RQ57_158_1)
153    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
154    var sdCla12 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
155    var s12 = bind.sendApdu(sdCla12, "E2", "91", "00", "BF2804810204F0", "00", "9000");
156    bind.checkData("S12-C1 SW", "9000", s12.sw);
157    // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
158    var lw12T = BindEs10xSingleRequest.parseBerTlv(s12.resp);
159    var lw12Ok0 = lw12T.length === 1 && lw12T[0].tag === "BF28";
160    var lw12_br = lw12Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw12T[0].value) : [];
161    var lw12_brtag = lw12_br.length === 1 ? lw12_br[0].tag : "";
162    var lw12_els = lw12_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw12_br[0].value) : [];
163    bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count", "1", (lw12_brtag === "A0" && lw12_els.length === 2) ? "1" : "0");
164    var lw12_fok = lw12_brtag === "A0" && lw12_els.length > 0;
165    for (var lw12i = 0; lw12i < lw12_els.length; lw12i++) {
166        if (lw12_els[lw12i].tag !== "BF2F") { lw12_fok = false; continue; }
167        var lw12M = BindEs10xSingleRequest.parseBerTlv(lw12_els[lw12i].value);
168        var lw12_f = {};
169        for (var lw12j = 0; lw12j < lw12M.length; lw12j++) {
170            if (lw12_f[lw12M[lw12j].tag] === undefined) { lw12_f[lw12M[lw12j].tag] = lw12M[lw12j].value; }
171        }
172        if (lw12_f["80"] === undefined) { lw12_fok = false; }
173        if (lw12_f["81"] !== "0410") { lw12_fok = false; }  // operation
174        if (lw12_f["5A"] !== "989209012143658709F5") { lw12_fok = false; }  // iccid
175    }
176    bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields", "1", lw12_fok ? "1" : "0");
177}
178

完整 unified diff

行级差异:新增 172 行 / 删除 185 行(以 -man 为基准,unified 上下文 3 行)。

展开 diff(366 行)
--- -man
+++ -cas
@@ -1,191 +1,178 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20261004-022948
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_Enable_Disable_Delete_Notifications,Test Sequence #01 Nominal: Multiple Enable, Disable and Delete Notifications(本 TC 单条 Test Sequence),适用性 M。
+// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
+//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
+//   ICH-IC2-K2-C4 SW;S4-C1 SW
+//   S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count
+//   S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields;S9-C1 SW
+//   S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count
+//   S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields;S12-C1 SW
+//   S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count
+//   S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields
+// 本函数由 CaseIR 5.2.8.2.1 编译生成(5.2.8.2.1-TC_eUICC_Enable_Disable_Delete_Notifications-20261004_022948,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
+// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
+// 适用性 M:编译期门,运行时由 harness 环境前置承担。
+function TC_eUICC_Enable_Disable_Delete_Notifications_01_merged() {
+    var bind = curBind;
+    // GEN-IC-1 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 with #METADATA_EN_DI_DE_NOTIFS is loaded on the eUICC: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+    // GEN-IC-2 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 is Disabled: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+    // GEN-IC-3 卡态声明(E 段 General Initial Conditions,编排责任):No Notification is stored in the eUICC's Pending Notifications List: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
 
-function TC_eUICC_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications()
-{
-	
-	tracenamestr = "验证当执行本地Profile管理操作(即激活、禁用和删除Profile)时,eUICC会生成所有在notificationConfigurationInfo中已配置的通知。";
-	curDis.TraceStart(sno++,tracenamestr);
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+    var s13 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s13.atr_hex !== "" ? "1" : "0");
 
-	curDis.TestStepStart("eUICC卡片初始化;");
-	Ini_powerOn_eUICC_LPAe_not_activate();
-	
-	curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
-	TS_MANAGE_CHANNEL_OPEN();
-	
-	curLogicChannel = 1;
-	
-	curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
-	TS_SELECT("Select ISD",ISD_R_AID,"9000");
-	
-	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
-	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
-	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
-	Profile_load_procedure.ES10b_GetEUICCInfo1();
-	
-	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
-	Profile_load_procedure.ES10b_GetEUICCChallenge();
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
+    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
+    var s14 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s14.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s14.sw);
 
-	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行PrepareDownloadRequest;");
-	Profile_load_procedure.ES10b_PrepareDownload();
-	
-	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccDataRequest(GetEID);");
-	Profile_load_procedure.ES10b_GetEID();
-	
-	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行BoundProfilePackage;");
-	Profile_load_procedure.serviceProviderName = SP_NAME1;	//SP Name 1
-	Profile_load_procedure.profileName = PROFILE_OPERATIONAL1_NAME1;
-	Profile_load_procedure.notificationConfigurationInfo = new SequenceOfElement("30");
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0] = new NotificationConfigurationInformation();
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].profileManagementOperation = "04F0";
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].notificationAddress = TEST_DP_ADDRESS1;
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1] = new NotificationConfigurationInformation();
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].profileManagementOperation = "04F0";
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].notificationAddress = TEST_DP_ADDRESS2;
-	Profile_load_procedure.ES10b_LoadBoundProfilePackage();
-	
-	var ISD_P_Test01 = curProfile_ISD_P_AID;
-	
-	initial_condition_Remove_All_Notification();
-	
-	tracenamestr = "profile中的notificationConfigurationInfo全部配置时,执行Enable, Disable and Delete Profile操作,检查通知";
-	curDis.TraceStart(sno++,tracenamestr);
-	
-	curLogicChannel = 0;
-	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
-	Ini_powerOn_eUICC_LPAe_not_activate();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
-	TS_MANAGE_CHANNEL_OPEN();
-	
-	curLogicChannel = 1;
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
-	TS_SELECT("Select ISD",ISD_R_AID,"9000");
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,激活profile1;");
-	var enableProRequest = new EnableProfileRequest();
-	enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
-	enableProRequest.refreshFlag = BooleanValue_BerCode_False;
-	enableProRequest.GenHexData();
-	var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData);
-	
-	curStrHandle.CheckData("BF3103800100", respData, "EnableProfileResponse");
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
-	Profile_load_procedure.ES10b_ListNotification("04F0");
-	
-	try
-	{
-		curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
-		var NotifiSqn1 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
-		
-		curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
-		var NotifiSqn2 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
-		
-		curStrHandle.CheckData(NotifiSqn2, EnCodeInteger_Ber(parseInt(NotifiSqn1,16) + 1), "<NOTIF_SEQ_NO_EN> and <NOTIF_SEQ_NO_EN2> follow this order in an incremental");
-		
-		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
-	}catch(e){
-		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
-	}
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s15 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s15.sw);
 
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除所有的通知;");
-	var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
-	
-	for(var i=0;i<NotificationLen;i++)
-	{
-		var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
-	    Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
-	    var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
-	    curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
-	}
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行DisableProfileRequest,失效profile1;");
-	var disableProRequest = new DisableProfileRequest();
-	disableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
-	disableProRequest.refreshFlag = BooleanValue_BerCode_False;
-	disableProRequest.GenHexData();
-	var respData = LPAd_Transport_data_to_eUICC(disableProRequest.hexData);
-	
-	curStrHandle.CheckData("BF3203800100", respData, "DisableProfileResponse");
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
-	Profile_load_procedure.ES10b_ListNotification("04F0");
-	
-	try
-	{
-		curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
-		var NotifiSqn3 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
-		
-		curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
-		var NotifiSqn4 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
-		
-		curStrHandle.CheckData(NotifiSqn3, EnCodeInteger_Ber(parseInt(NotifiSqn2,16) + 1), "通知计数器加1");
-		if (NotifiSqn3 < NotifiSqn2)
-			obj.SubLevelError("通知计数器的值应该越来越大");
-		curStrHandle.CheckData(NotifiSqn4, EnCodeInteger_Ber(parseInt(NotifiSqn3,16) + 1), "通知计数器加1");
-		
-		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
-	}catch(e){
-		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
-	}
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除所有的通知;");
-	var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
-	
-	for(var i=0;i<NotificationLen;i++)
-	{
-		var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
-	    Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
-	    var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
-	    curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
-	}
-	
-	curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行DeleteProfileRequest;");
-	var deleProfileRequest = new DeleteProfileRequest();
-	deleProfileRequest.iccid = ICCID_OP_PROF1;
-	deleProfileRequest.GenHexData();
-	var respData = LPAd_Transport_data_to_eUICC(deleProfileRequest.hexData);
-	
-	curStrHandle.CheckData("BF3303800100", respData, "DeleteProfileResponse");
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
-	Profile_load_procedure.ES10b_ListNotification("04F0");
-	
-	try
-	{
-		curStrHandle.CheckData("0410",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
-		var NotifiSqn5 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
-		
-		curStrHandle.CheckData("0410",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
-		var NotifiSqn6 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
-		
-		curStrHandle.CheckData(NotifiSqn5, EnCodeInteger_Ber(parseInt(NotifiSqn4,16) + 1), "通知计数器加1");
-		if (NotifiSqn5 < NotifiSqn4)
-			obj.SubLevelError("通知计数器的值应该越来越大");
-		curStrHandle.CheckData(NotifiSqn6, EnCodeInteger_Ber(parseInt(NotifiSqn5,16) + 1), "通知计数器加1");
-		
-		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
-	}catch(e){
-		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
-	}
-	
-	RecoverCard();
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady16 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady16.final.sw);
+
+    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
+    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s17 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s17.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s17.chan !== null ? "1" : "0");
+
+    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
+    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s18 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
+    // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
+    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s18.sw);
+
+    // 步骤 1:Enable PROFILE_OPERATIONAL1(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 2:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
+    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+    // 步骤 3:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
+    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+    // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ57_135_6)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla4 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
+    var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+    bind.checkData("S4-C1 SW", "9000", s4.sw);
+    // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+    var lw4T = BindEs10xSingleRequest.parseBerTlv(s4.resp);
+    var lw4Ok0 = lw4T.length === 1 && lw4T[0].tag === "BF28";
+    var lw4_br = lw4Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw4T[0].value) : [];
+    var lw4_brtag = lw4_br.length === 1 ? lw4_br[0].tag : "";
+    var lw4_els = lw4_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw4_br[0].value) : [];
+    bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count", "1", (lw4_brtag === "A0" && lw4_els.length === 2) ? "1" : "0");
+    var lw4_fok = lw4_brtag === "A0" && lw4_els.length > 0;
+    for (var lw4i = 0; lw4i < lw4_els.length; lw4i++) {
+        if (lw4_els[lw4i].tag !== "BF2F") { lw4_fok = false; continue; }
+        var lw4M = BindEs10xSingleRequest.parseBerTlv(lw4_els[lw4i].value);
+        var lw4_f = {};
+        for (var lw4j = 0; lw4j < lw4M.length; lw4j++) {
+            if (lw4_f[lw4M[lw4j].tag] === undefined) { lw4_f[lw4M[lw4j].tag] = lw4M[lw4j].value; }
+        }
+        if (lw4_f["80"] === undefined) { lw4_fok = false; }
+        if (lw4_f["81"] !== "0640") { lw4_fok = false; }  // operation
+        if (lw4_f["5A"] !== "989209012143658709F5") { lw4_fok = false; }  // iccid
+    }
+    bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields", "1", lw4_fok ? "1" : "0");
+
+    // 步骤 5:Remove all the pending notifications(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 6:Disable PROFILE_OPERATIONAL1(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 7:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
+    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+    // 步骤 8:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
+    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+    // 步骤 9:MTD_STORE_DATA(tc_step;REQ: RQ57_142_17)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla9 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
+    var s9 = bind.sendApdu(sdCla9, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+    bind.checkData("S9-C1 SW", "9000", s9.sw);
+    // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+    var lw9T = BindEs10xSingleRequest.parseBerTlv(s9.resp);
+    var lw9Ok0 = lw9T.length === 1 && lw9T[0].tag === "BF28";
+    var lw9_br = lw9Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw9T[0].value) : [];
+    var lw9_brtag = lw9_br.length === 1 ? lw9_br[0].tag : "";
+    var lw9_els = lw9_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw9_br[0].value) : [];
+    bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count", "1", (lw9_brtag === "A0" && lw9_els.length === 2) ? "1" : "0");
+    var lw9_fok = lw9_brtag === "A0" && lw9_els.length > 0;
+    for (var lw9i = 0; lw9i < lw9_els.length; lw9i++) {
+        if (lw9_els[lw9i].tag !== "BF2F") { lw9_fok = false; continue; }
+        var lw9M = BindEs10xSingleRequest.parseBerTlv(lw9_els[lw9i].value);
+        var lw9_f = {};
+        for (var lw9j = 0; lw9j < lw9M.length; lw9j++) {
+            if (lw9_f[lw9M[lw9j].tag] === undefined) { lw9_f[lw9M[lw9j].tag] = lw9M[lw9j].value; }
+        }
+        if (lw9_f["80"] === undefined) { lw9_fok = false; }
+        if (lw9_f["81"] !== "0520") { lw9_fok = false; }  // operation
+        if (lw9_f["5A"] !== "989209012143658709F5") { lw9_fok = false; }  // iccid
+    }
+    bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields", "1", lw9_fok ? "1" : "0");
+
+    // 步骤 10:Remove all the pending notifications(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 11:Delete PROFILE_OPERATIONAL1(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 12:MTD_STORE_DATA(tc_step;REQ: RQ57_158_1)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla12 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
+    var s12 = bind.sendApdu(sdCla12, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+    bind.checkData("S12-C1 SW", "9000", s12.sw);
+    // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+    var lw12T = BindEs10xSingleRequest.parseBerTlv(s12.resp);
+    var lw12Ok0 = lw12T.length === 1 && lw12T[0].tag === "BF28";
+    var lw12_br = lw12Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw12T[0].value) : [];
+    var lw12_brtag = lw12_br.length === 1 ? lw12_br[0].tag : "";
+    var lw12_els = lw12_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw12_br[0].value) : [];
+    bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count", "1", (lw12_brtag === "A0" && lw12_els.length === 2) ? "1" : "0");
+    var lw12_fok = lw12_brtag === "A0" && lw12_els.length > 0;
+    for (var lw12i = 0; lw12i < lw12_els.length; lw12i++) {
+        if (lw12_els[lw12i].tag !== "BF2F") { lw12_fok = false; continue; }
+        var lw12M = BindEs10xSingleRequest.parseBerTlv(lw12_els[lw12i].value);
+        var lw12_f = {};
+        for (var lw12j = 0; lw12j < lw12M.length; lw12j++) {
+            if (lw12_f[lw12M[lw12j].tag] === undefined) { lw12_f[lw12M[lw12j].tag] = lw12M[lw12j].value; }
+        }
+        if (lw12_f["80"] === undefined) { lw12_fok = false; }
+        if (lw12_f["81"] !== "0410") { lw12_fok = false; }  // operation
+        if (lw12_f["5A"] !== "989209012143658709F5") { lw12_fok = false; }  // iccid
+    }
+    bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields", "1", lw12_fok ? "1" : "0");
 }