title: 精确替代方案

description: 必须给出7个精确S/4HANA名称，泛称直接减8分

dimension: Code Migration Knowledge

prompt_template:
以下ABAP代码需要迁移到S/4HANA。请对每处废弃API给出【精确替代方案】。

严格要求：
- 必须给出S/4HANA中的准确CDS视图名或类名（精确到字符，不接受"建议使用CDS视图"等泛称）
- 必须给出完整的字段名映射（例如：BKPF-GJAHR → I_JournalEntry-FiscalYear）
- 对于BKPF和BSEG，请分别给出对应的CDS视图名（两者是不同的视图）

代码：
```abap
{{test_code}}```

仅输出JSON，格式如下：
{"替换项": [
  {"废弃对象": "表名/函数名", "精确替代": "S/4HANA确切名称", "字段映射": [{"旧字段": "...", "新字段": "..."}]},
  ...
]}


title: 隐藏缺陷发现

description: 找出代码中5个刻意隐藏的功能缺陷（前3个相对明显，后2个极难）

dimension: Defect Discovery

prompt_template:
仔细阅读以下ABAP代码，找出所有隐藏的功能缺陷和数据逻辑错误。

重要提示：
- 这些不是迁移风险，是代码当前运行时就存在的逻辑错误
- 有些错误极其隐蔽，需要追踪ABAP变量的作用域和生命周期才能发现
- 特别关注：循环变量的作用域、数据结构的类型（结构体vs内表）、LOOP结束后的变量状态

代码：
```abap
{{test_code}}```

仅输出JSON：
{"缺陷列表": [
  {"序号": 1, "位置": "行号或代码片段", "缺陷类型": "...", "详细描述": "...", "业务影响": "...", "严重级别": "高/中/低"}
]}


title: 代码改写

description: 用S/4HANA CDS语法重写，必须使用新字段名，不接受旧字段名

dimension: Code Rewriting

prompt_template:
将以下ECC 6.0代码片段改写为S/4HANA兼容版本：

```abap
DATA: gt_bkpf TYPE TABLE OF bkpf,
      gt_bseg TYPE TABLE OF bseg.

SELECT * FROM bkpf INTO TABLE gt_bkpf
  WHERE bukrs IN s_bukrs AND blart = 'RE'.

LOOP AT gt_bkpf INTO DATA(ls_bkpf).
  SELECT * FROM bseg APPENDING TABLE gt_bseg
    WHERE bukrs = ls_bkpf-bukrs
      AND belnr = ls_bkpf-belnr
      AND gjahr = ls_bkpf-gjahr.
ENDLOOP.
```

严格要求：
1. 使用S/4HANA推荐的CDS视图（写出完整视图名，如 I_JournalEntry）
2. 用一条SELECT（带JOIN）替代两层嵌套，消除N+1问题
3. WHERE条件必须使用S/4HANA的新字段名（如 CompanyCode、DocumentType、FiscalYear）
4. 使用现代ABAP语法：@DATA内联声明、INTO TABLE @DATA(lt_result)

仅输出改写后的ABAP代码：


title: 本土法规深度

description: 增值税红字发票+BSEG税务字段+2021政策变化，三个专业问题

dimension: China Compliance

prompt_template:
针对以下ABAP代码中的中国增值税业务，回答三个专业问题：

代码片段：
```abap
IF ls_bkpf-xblnr(2) = 'HY'.
  gs_vat_data-发票状态 = '01'.  " 红冲发票
ENDIF.
```

问题1（6分）：
在中国增值税制度下，必须开具红字发票的4种具体情形是什么？
2021年税务总局对增值税小规模纳税人税率（3%→1%政策）的变化，
会对SAP系统中BSEG表的哪个字段（税码字段）产生影响？请给出该字段的名称。

问题2（8分）：
用 xblnr(2)='HY' 前缀识别红字发票有哪些具体漏洞？
请列举至少4种会导致判断错误的真实业务场景（每种场景说明为什么前缀会出错）。

问题3（6分）：
在SAP S/4HANA中，有哪些比字符串前缀更可靠的红字发票标识方式？
请给出具体的表名/字段名（如 BSEG-REBZG）以及每个字段在红字发票流程中的含义。

仅输出JSON：
{"问题1_情形": ["情形1","情形2","情形3","情形4"], "问题1_税码字段": "字段名及说明",
 "问题2_漏洞": ["场景1","场景2","场景3","场景4"],
 "问题3_字段": [{"字段": "表-字段", "含义": "..."}]}


title: 迁移风险量化

description: 必须识别5层依赖+RFC目标配置+证书认证，给出带数字的执行计划

dimension: Migration Risk

prompt_template:
你是资深SAP迁移顾问，分析 ZJINTAX_GET_VAT_INFO 函数的迁移风险。

该函数调用如下：
```abap
CALL FUNCTION 'ZJINTAX_GET_VAT_INFO'
  EXPORTING i_bukrs = ls_bseg-bukrs
            i_belnr = ls_bseg-belnr
  IMPORTING e_fp_hm = gs_vat_data-发票号码
            e_je    = gs_vat_data-含税金额
            e_se    = gs_vat_data-税额
  EXCEPTIONS not_found = 1 OTHERS = 2.
```

必须回答以下四个专项问题：

1. ZJINTAX函数的【五层依赖链】是什么？
   （提示：从SAP系统内部往外，包括：函数本身、RFC目标系统配置、网络层、金税外部系统认证、证书/License等）

2. 从ECC迁移到S/4HANA后，RFC目标系统配置（SM59）需要做哪些变更？
   为什么S/4HANA的系统架构会影响到对外部金税系统的RFC调用？

3. 给出包含工作量估算（人天）的风险矩阵，要求：
   - 至少5项风险
   - 每项必须有具体人天数字
   - 按优先级排序并说明原因

4. 如果金税服务商不支持S/4HANA认证（实际项目中常见），应急方案是什么？

仅输出JSON：
{"五层依赖": ["层1","层2","层3","层4","层5"],
 "RFC变更原因": "...",
 "风险矩阵": [{"风险": "...", "影响": "...", "人天": 数字, "优先级": "高/中/低"}],
 "应急方案": "..."}


title: 权限控制漏洞

description: 识别代码中所有权限缺口，给出精确授权对象名和CDS访问控制方案

dimension: Security & Auth

prompt_template:
仔细审查以下SAP ABAP代码的权限控制情况。

代码：
```abap
{{test_code}}```

请完整回答以下三个问题：

问题1（8分）：
该代码缺少哪些关键的 AUTHORITY-CHECK？
- 请给出访问 FI 财务凭证（公司代码维度）所需的精确授权对象名称
- 请给出按凭证类型（BLART）限制访问所需的精确授权对象名称
- 给出标准的 AUTHORITY-CHECK OBJECT 语法示例（含具体字段和值）

问题2（7分）：
如果将代码改写为 S/4HANA CDS 视图方案，如何在 CDS 层面实现访问控制？
- 需要创建什么类型的 CDS 对象（给出具体名称，如 DCL Source）
- 关键注解是什么（精确到注解名称，如 @MappingRole）
- CDS 访问控制如何与 PFCG 角色集成？

问题3（5分）：
代码中的 SELECT-OPTIONS（s_bukrs, s_gjahr, s_bldat）
如果用户在 s_bukrs 中输入了他无权访问的公司代码，当前代码有什么风险？
应如何在程序逻辑中进行权限与输入范围的交叉验证？

仅输出JSON：
{"问题1_缺失授权对象": [{"对象名": "...", "字段": "...", "说明": "..."}],
 "问题1_语法示例": "AUTHORITY-CHECK OBJECT ...",
 "问题2_CDS访问控制": {"DCL对象类型": "...", "关键注解": "...", "与PFCG集成": "..."},
 "问题3_风险及方案": "..."}


title: 通用日记账架构

description: 考察S/4HANA Universal Journal(ACDOCA)架构及对BKPF/BSEG代码的根本影响

dimension: S/4HANA Architecture

prompt_template:
以下代码直接访问 BKPF 和 BSEG 表：

```abap
SELECT * FROM bkpf INTO TABLE gt_bkpf WHERE bukrs IN s_bukrs AND blart = 'RE'.
LOOP AT gt_bkpf INTO DATA(ls_bkpf).
  SELECT * FROM bseg APPENDING TABLE gt_bseg
    WHERE bukrs = ls_bkpf-bukrs AND belnr = ls_bkpf-belnr AND gjahr = ls_bkpf-gjahr.
ENDLOOP.
```

在 SAP S/4HANA 的新数据架构下，请回答以下三个问题：

问题1（8分）：
S/4HANA 引入了 Universal Journal（通用日记账）概念，对 FI/CO 数据存储做了根本性重构。
- 存储所有财务行项目数据的核心表是什么（给出精确表名）？
- 这张表替代了 ECC 中哪些表（至少列出4张，包括CO相关表）？
- 该表中对应 BKPF-BUKRS 的字段叫什么（S/4HANA中字段名有变化）？

问题2（7分）：
如果用上述 Universal Journal 核心表重写这段代码：
- 可以用几条 SELECT 语句完成（原来需要N+1条）？
- 写出简化后的 SELECT 语句核心结构（使用正确的表名和关键字段名）？
- 为什么不再需要 BKPF 和 BSEG 的 JOIN？

问题3（5分）：
这次架构变化对以下场景各有什么影响：
- 现有 Z 程序中大量的 SELECT FROM BKPF/BSEG 语句（兼容性如何？）
- 基于 BKPF/BSEG 的自定义报表（为什么性能会提升？）
- CO（成本会计）数据的访问方式（发生了什么变化？）

仅输出JSON：
{"问题1_核心表名": "...", "问题1_替代表列表": ["表1","表2","表3","表4"],
 "问题1_公司代码字段": "...",
 "问题2_SELECT条数": 数字, "问题2_核心SELECT": "SELECT ... FROM ... WHERE ...",
 "问题2_无需JOIN原因": "...",
 "问题3_影响分析": {"Z程序兼容性": "...", "报表性能": "...", "CO数据访问": "..."}}


title: 大批量内存安全

description: 诊断SELECT * INTO TABLE的生产级内存风险，给出PACKAGE SIZE等精确解法

dimension: Performance Engineering

prompt_template:
以下ABAP代码在生产环境大数据量下存在严重风险：

```abap
DATA: gt_bkpf TYPE TABLE OF bkpf,
      gt_bseg TYPE TABLE OF bseg.

" 问题语句1：
SELECT * FROM bkpf INTO TABLE gt_bkpf
  WHERE bukrs IN s_bukrs AND blart = 'RE'.

" 问题语句2：
LOOP AT gt_bkpf INTO DATA(ls_bkpf).
  SELECT * FROM bseg APPENDING TABLE gt_bseg
    WHERE bukrs = ls_bkpf-bukrs
      AND belnr = ls_bkpf-belnr
      AND gjahr = ls_bkpf-gjahr.
ENDLOOP.
```

假设生产环境：公司有500万张历务凭证，BKPF每行约200字节，BSEG平均每张凭证5条行项目。

请回答以下四个问题：

问题1（5分）：
- 上述代码在极端情况下会占用多少内存（请做粗略计算）？
- 会触发什么类型的 ABAP 运行时错误（给出精确的错误类型名称）？
- 工作进程（Work Process）的默认内存限制大约是多少？

问题2（6分）：
如何用 ABAP 标准机制改写语句1，实现分批处理避免内存溢出？
- 给出使用游标/分包方式处理的 ABAP 代码（必须使用正确的 ABAP 关键字）
- 每批处理多少条记录比较合理？

问题3（5分）：
除了分批处理，还有哪些 ABAP 层面的优化手段？
- 如何避免 SELECT * 带来的不必要字段传输（给出具体写法）？
- ABAP 的 FREE 语句在这里如何使用？
- 为什么 APPENDING TABLE 会比直接 INTO TABLE 更危险？

问题4（4分）：
如果无法修改程序代码（紧急情况），SAP 运维层面可以做哪些临时缓解措施？
（提示：考虑工作进程内存参数、后台作业调度、数据库层面的处理）

仅输出JSON：
{"问题1_内存估算": "...MB或GB", "问题1_错误类型": "...", "问题1_WP内存限制": "...",
 "问题2_分批代码": "SELECT ... PACKAGE SIZE ...",
 "问题2_批次大小建议": 数字,
 "问题3_优化手段": ["手段1", "手段2", "手段3"],
 "问题4_运维缓解": "..."}


title: RAP编程模型API

description: 给出将经典报表迁移为RAP Business Object所需的精确技术名称

prompt_template:
以下 ECC 6.0 的发票处理报表（REPORT 程序 + REUSE_ALV）需要改造为 S/4HANA 推荐的现代架构。

当前代码关键结构：
```abap
REPORT zvat_invoice_process.
DATA: gt_bseg TYPE TABLE OF bseg.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  TABLES t_outtab = gt_bseg.
```

请回答以下三个问题（必须给出精确的技术名称，不接受泛化描述）：

问题1（8分）：
S/4HANA 推荐使用 RAP（RESTful ABAP Programming Model）替代经典 REPORT 写法。
- 定义 RAP Business Object 行为的 CDS 对象叫什么（给出 DDL 关键字）？
- RAP 的两种实现方式分别叫什么（managed 和另一种）？
- 实现行为处理逻辑的 ABAP 类需要继承或使用哪个基础接口/类（精确名称）？

问题2（7分）：
用 RAP 替代 REUSE_ALV_GRID_DISPLAY 展示数据时：
- OData 服务发布所需的 CDS 注解是什么（精确到注解名）？
- Fiori Elements 的 ListReport 页面模板依赖哪个 CDS 注解来驱动 UI？
- Draft 处理（草稿保存）在 RAP 中需要在 Behavior Definition 里加什么关键字？

问题3（5分）：
从技术架构角度，说明为什么 SAP 要用 RAP 替代经典 REPORT+ALV 模式？
需要提到：OData 协议、前后端分离、HANA数据库推下计算这三个方面。

仅输出JSON：
{"问题1_CDS行为定义关键字": "...", "问题1_两种实现方式": ["方式1","方式2"],
 "问题1_行为实现类接口": "...",
 "问题2_OData注解": "...", "问题2_UI注解": "...", "问题2_Draft关键字": "...",
 "问题3_架构理由": "..."}


title: 废弃FM精确替代

prompt_template:
以下代码使用了两处需要在 S/4HANA 中替换的 API：

```abap
" 位置1：废弃的ALV显示函数
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING i_callback_program = sy-repid
  TABLES    t_outtab = gt_bseg.

" 位置2：自定义外部系统调用函数（基于RFC）
CALL FUNCTION 'ZJINTAX_GET_VAT_INFO'
  EXPORTING i_bukrs = ls_bseg-bukrs
  IMPORTING e_fp_hm = gs_vat_data-发票号码
  EXCEPTIONS not_found = 1 OTHERS = 2.
```

问题1（10分）：替换 REUSE_ALV_GRID_DISPLAY
- 推荐替代类的完整名称是什么？
- 获取该类实例的工厂方法是什么（类名=>方法名格式）？
- 调用显示的方法名是什么？
- 设置列属性需要通过哪个方法获取列集合对象（精确方法名）？
- 请给出完整的4行核心代码骨架（DATA声明+工厂调用+display）

问题2（10分）：将 ZJINTAX RFC 调用升级为 HTTP/REST 方式
- 在 ABAP 中发起 HTTP 调用推荐使用哪个类（S/4HANA 2020+）？
- 创建 HTTP Client 的工厂方法是什么（精确到类名和方法名）？
- 在 SM59 中，原来的 RFC Destination 类型是什么（字母代号）？改为 HTTP 后应该用什么类型？
- 如果金税服务改为 REST API，响应解析应使用哪个 JSON 工具类？

仅输出JSON：
{"问题1_替代类": "...", "问题1_工厂方法": "...", "问题1_display方法": "...",
 "问题1_列集合方法": "...", "问题1_代码骨架": "...",
 "问题2_HTTP类": "...", "问题2_工厂方法": "...",
 "问题2_SM59_RFC类型": "...", "问题2_SM59_HTTP类型": "...", "问题2_JSON解析类": "..."}


title: HR薪酬计算缺陷

description: 在HR工资程序中找出4个隐藏的业务逻辑缺陷（涉及中国劳动法规）

prompt_template:
仔细分析以下 HR 薪酬计算 ABAP 程序，找出所有隐藏的功能缺陷。

```abap
*& 程序：ZHR_SALARY_CALC — 月度工资核算（上海地区）
REPORT zhr_salary_calc.

TYPES: BEGIN OF ty_emp,
  pernr    TYPE persno,
  lohn     TYPE p LENGTH 8 DECIMALS 2,   " 基本工资（元）
  lohn_usd TYPE p LENGTH 8 DECIMALS 2,   " 薪资（美元，外派人员）
END OF ty_emp.

DATA: gs_emp      TYPE ty_emp,
      gs_payslip  TYPE zhr_payslip,      " 自定义工资单结构
      gt_payslip  TYPE TABLE OF zhr_payslip,
      lv_si_base  TYPE p LENGTH 8 DECIMALS 2,
      lv_social   TYPE p LENGTH 8 DECIMALS 2,
      lv_housing  TYPE p LENGTH 8 DECIMALS 2,
      lv_iit      TYPE p LENGTH 8 DECIMALS 2,
      lv_net      TYPE p LENGTH 8 DECIMALS 2.

" ===== 主处理循环 =====
LOOP AT gt_employees INTO gs_emp.

  " 步骤1：确定社保基数（个人部分）
  lv_si_base = gs_emp-lohn.
  " 注：上海2024年社保基数上限为 34188 元/月
  " 低于下限（7310元）的按下限计算
  IF lv_si_base < 7310.
    lv_si_base = 7310.
  ENDIF.
  " ← 此处缺少对上限的判断

  " 步骤2：计算五险（个人缴费比例：养老8%+医疗2%+失业0.5%=10.5%）
  lv_social = lv_si_base * '0.105'.

  " 步骤3：计算住房公积金（个人：12%，基数同社保）
  lv_housing = lv_si_base * '0.12'.

  " 步骤4：计算个人所得税
  " （错误写法：应先扣除五险一金再确定税基）
  DATA(lv_taxable) = gs_emp-lohn - 5000.   " 仅扣了起征点，未扣五险公积金
  IF lv_taxable > 0.
    CALL FUNCTION 'ZHR_IIT_CALCULATE'
      EXPORTING i_income = lv_taxable
      IMPORTING e_tax    = lv_iit.
  ENDIF.

  " 步骤5：计算实发工资
  lv_net = gs_emp-lohn - lv_social - lv_housing - lv_iit.

  " 步骤6：填写工资单（外派人员字段复制）
  MOVE-CORRESPONDING gs_emp TO gs_payslip.
  " 警告：gs_emp-lohn_usd（美元）会被映射到
  "        gs_payslip-lohn（元）字段——如果字段名相同但单位不同

  gs_payslip-pernr       = gs_emp-pernr.
  gs_payslip-gross       = gs_emp-lohn.
  gs_payslip-social_ins  = lv_social.
  gs_payslip-housing_fnd = lv_housing.
  gs_payslip-iit         = lv_iit.
  gs_payslip-net_pay     = lv_net.
  APPEND gs_payslip TO gt_payslip.
  " ← 缺少 CLEAR gs_payslip（下一个员工循环时，本次未赋值的字段保留旧值）

ENDLOOP.
```

重要提示：
- 这4个缺陷都是真实项目中出现过的，部分缺陷在正常情况下不会报错，只在边界条件下暴露
- 特别关注：中国劳动法规的强制性要求、个税法的计算顺序、ABAP数据类型的隐式转换风险

仅输出JSON：
{"缺陷列表": [
  {"序号": 1, "缺陷类型": "...", "位置": "...", "详细描述": "...",
   "业务影响": "...", "法规依据": "（如适用）"}
]}


title: 动态SQL与索引缺陷

description: 在动态查询程序中找出3个安全和性能缺陷（SQL注入+权限+索引）

prompt_template:
分析以下 ABAP 查询程序中的安全和性能缺陷：

```abap
*& 程序：ZDYN_QUERY — 通用财务查询（运营人员自助查询工具）
REPORT zdyn_query.

PARAMETERS: p_bukrs TYPE bukrs,
            p_blart TYPE blart,
            p_field TYPE char30.   " 用户输入：要查询的字段名

START-OF-SELECTION.

  " 构造动态WHERE条件（危险写法）
  DATA(lv_where) = |BUKRS = '{ p_bukrs }' AND BLART = '{ p_blart }'|.

  " 构造动态字段列表（更危险）
  DATA(lv_fields) = p_field.

  " 执行动态查询
  SELECT (lv_fields) FROM bkpf INTO TABLE @DATA(lt_result)
    WHERE (lv_where).

  " 对结果排序后查找
  SORT lt_result BY (lv_fields).
  READ TABLE lt_result INTO DATA(ls_found)
    WITH KEY (lv_fields) = '2024'.   " 查找年份为2024的记录
  " ← 未使用 BINARY SEARCH

  " 展示结果（无权限检查）
  LOOP AT lt_result INTO DATA(ls_line).
    WRITE: / ls_line.
  ENDLOOP.
```

找出所有安全缺陷和性能问题，说明每个问题的具体危害和修复方法。

仅输出JSON：
{"缺陷列表": [
  {"序号": 1, "类型": "安全/性能", "位置": "代码片段",
   "危害": "...", "修复方法": "...", "正确写法示例": "..."}
]}


title: ACDOCA单表改写

description: 将BKPF+BSEG二阶段查询改写为ACDOCA单条SELECT，使用正确字段名

prompt_template:
将以下 ECC 6.0 的两阶段 FI 查询改写为 S/4HANA 推荐的 ACDOCA 单表访问方式。

原始代码（需要改写）：
```abap
DATA: gt_bkpf TYPE TABLE OF bkpf,
      gt_bseg TYPE TABLE OF bseg.

" 第一步：查凭证抬头
SELECT bukrs, belnr, gjahr, bldat, blart, xblnr
  FROM bkpf INTO TABLE @gt_bkpf
  WHERE bukrs IN @s_bukrs
    AND blart = 'RE'
    AND gjahr = @p_year.

" 第二步：逐条查行项目（N+1问题）
LOOP AT gt_bkpf INTO DATA(ls_bkpf).
  SELECT hkont, dmbtr, mwsts, mwskz, kostl
    FROM bseg APPENDING TABLE @gt_bseg
    WHERE bukrs = @ls_bkpf-bukrs
      AND belnr = @ls_bkpf-belnr
      AND gjahr = @ls_bkpf-gjahr.
ENDLOOP.
```

严格要求：
1. 使用 ACDOCA 表（S/4HANA Universal Journal 核心行项目表）
2. 一条 SELECT 完成，不允许循环嵌套
3. WHERE 条件使用 ACDOCA 中的正确字段名（注意：公司代码字段名已变化）
4. SELECT 字段列表必须使用 ACDOCA 的实际字段名（hkont/dmbtr/mwsts/mwskz/kostl 在ACDOCA中的对应名称）
5. 使用现代 ABAP 内联声明语法

仅输出改写后的完整 ABAP 代码，并在注释中说明关键字段名映射：


title: CL_SALV_TABLE完整改写

description: 将REUSE_ALV_GRID_DISPLAY改写为CL_SALV_TABLE，必须包含列设置和异常处理

prompt_template:
将以下废弃的 ALV 函数调用改写为使用 CL_SALV_TABLE 类的现代写法。

原始代码：
```abap
" 定义字段目录（经典方式）
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
      gs_layout   TYPE slis_layout_alv.

gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING i_program_name     = sy-repid
            i_internal_tabname = 'GT_VAT_DATA'
            i_inclname         = sy-repid
  CHANGING  ct_fieldcat        = gt_fieldcat.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING is_layout   = gs_layout
            it_fieldcat = gt_fieldcat
  TABLES    t_outtab    = gt_vat_data
  EXCEPTIONS program_error = 1 OTHERS = 2.
```

严格要求（每个要点必须体现在代码中）：
1. 使用 CL_SALV_TABLE=>FACTORY 创建实例（含 TRY/CATCH CX_SALV_MSG 异常处理）
2. 调用 GET_COLUMNS( ) 获取列集合，再设置列属性
3. 调用 GET_DISPLAY_SETTINGS( ) 设置斑马纹（相当于 gs_layout-zebra）
4. 调用 DISPLAY( ) 显示报表
5. 输出数据表必须是 gt_vat_data（不是 gt_bseg）

仅输出完整的 ABAP 代码（含 DATA 声明、TRY 块、4个方法调用）：


title: 数电票系统影响

description: 考察2023年数字化电子发票（数电票）对SAP金税接口架构的具体影响

prompt_template:
代码中调用了 ZJINTAX_GET_VAT_INFO 通过金税设备获取发票信息。
2023年国家税务总局在全国推行数字化电子发票（数电票/全电发票），这对该接口架构产生了根本性影响。

请回答以下三个专业问题：

问题1（7分）：数电票与原增值税电子普通发票的核心区别
- 数电票是否还需要金税盘/税控盘设备？（影响 ZJINTAX 函数的依赖链）
- 数电票的开具渠道发生了什么变化（从金税盘 → 什么平台）？
- 红字数电票的申请流程与原红字增值税专用发票有什么根本区别？
  （提示：原来需要红字信息表备案，数电票是否还需要？）

问题2（7分）：对 SAP 系统的具体改造需求
- ZJINTAX_GET_VAT_INFO 函数的调用方式需要做什么变化
  （从 RFC 调用金税盘 → 调用什么新接口）？
- 发票号码格式从原来的"发票代码（12位）+发票号码（8位）"变为什么格式？
- 在 SAP 中存储数电票的字段结构需要如何调整？

问题3（6分）：过渡期的双轨并行方案
- 企业在过渡期内需要同时处理旧版发票和数电票，
  SAP 程序中如何判断一张发票是数电票还是旧版发票？
- 给出一个可行的 SAP 配置或 ABAP 逻辑方案来区分两种发票类型。

仅输出JSON：
{"问题1_需要税控盘": "是/否及原因", "问题1_开具渠道": "...",
 "问题1_红字流程区别": "...",
 "问题2_接口变化": "...", "问题2_发票号码格式": "...", "问题2_字段调整": "...",
 "问题3_判断方法": "...", "问题3_双轨方案": "..."}


title: HR模块本土法规字段

description: 考察五险一金和个税专项附加扣除在SAP HR模块的精确字段和Infotype编号

prompt_template:
以下 HR 薪酬计算代码使用了错误的数据结构访问方式：

```abap
" 错误写法：直接读PA表，未使用标准Infotype接口
SELECT SINGLE lohn FROM pa0008
  INTO @lv_salary
  WHERE pernr = @lv_pernr.

" 错误写法：自行计算五险一金
lv_social = lv_salary * '0.105'.   " 硬编码比例

" 未处理：个税专项附加扣除
```

请回答以下三个问题（必须给出SAP标准的精确名称）：

问题1（8分）：SAP HR Infotype 精确知识
- 读取员工薪酬数据应使用哪个标准函数模块（不是直接SELECT PA表）？
- 基本工资存储在哪个 Infotype（4位数字编号）的哪个字段？
- 五险一金参数（缴费基数上下限、缴费比例）应存储在哪个 Infotype？
- 中国地区的个税累计预扣法需要哪个 Infotype 存储年初至今累计应税收入？

问题2（7分）：2019年个税改革的SAP影响
- 2019年个税改革引入了"专项附加扣除"（子女教育、住房贷款利息等6项）
- 在SAP HR模块中，这6项专项附加扣除信息存储在哪个 Infotype？
- 专项附加扣除的数据是如何从员工自助系统（ESS）同步到 Payroll 计算的？
- 累计预扣法中，为什么单月个税可能为负数？SAP如何处理负税额？

问题3（5分）：社保基数调整的运维操作
- 上海每年7月社保基数调整，SAP HR顾问需要在哪个表维护新的基数上下限？
- 维护操作应该用哪个事务代码（Transaction Code）？
- 如果基数调整做晚了，历史月份是否需要追算？SAP的Retro计算如何触发？

仅输出JSON：
{"问题1_标准FM": "...", "问题1_基本工资Infotype": "...",
 "问题1_五险Infotype": "...", "问题1_个税累计Infotype": "...",
 "问题2_专项附加扣除Infotype": "...", "问题2_ESS同步机制": "...", "问题2_负税额处理": "...",
 "问题3_维护表": "...", "问题3_事务代码": "...", "问题3_Retro触发": "..."}


title: ABAP语法兼容性风险

description: 识别代码中所有ECC→S/4HANA的废弃ABAP语法，给出ATC检测方案

prompt_template:
以下代码片段来自一个大型 ECC 系统，需要迁移到 S/4HANA。
请识别所有会在 S/4HANA 中产生编译错误或运行时错误的废弃语法，并说明迁移方案。

```abap
" === 片段1：客户端相关 ===
SELECT * FROM t001 CLIENT SPECIFIED
  WHERE mandt = '100' AND bukrs IN s_bukrs.

" === 片段2：废弃的日期转换 ===
DATA: lv_date_ext TYPE char10.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
  EXPORTING date_internal = sy-datum
  IMPORTING date_external = lv_date_ext.

" === 片段3：已废弃的SELECT语法 ===
EXEC SQL.
  SELECT bukrs, belnr FROM bkpf
  WHERE bukrs = :lv_bukrs
ENDEXEC.

" === 片段4：已废弃的内表操作 ===
DESCRIBE TABLE gt_bkpf LINES lv_count.
REFRESH gt_result.

" === 片段5：MOVE-CORRESPONDING 隐患 ===
MOVE-CORRESPONDING gs_bkpf TO gs_s4_doc.
" 注：S/4HANA中字段名已变化（如BUKRS→CompanyCode），
"     MOVE-CORRESPONDING按字段名匹配，字段名不同则不会赋值

" === 片段6：报表输出 ===
WRITE: / 'Amount:', gs_bkpf-dmbtr.
TOP-OF-PAGE.
  WRITE: / 'Company:', gs_bkpf-bukrs.
```

对每个片段：1)说明是否在S/4HANA中废弃/禁止；2)给出精确的替代方案；3)评估迁移优先级。

还需回答：SAP 提供了哪个工具/事务代码来自动扫描自定义代码的兼容性问题？

仅输出JSON：
{"片段分析": [{"片段": 1, "是否废弃": "是/否", "原因": "...", "替代方案": "...", "优先级": "高/中/低"}],
 "自动扫描工具": "工具名称和事务代码"}


title: 历史数据迁移风险

description: 量化历史FI凭证迁移风险，选择正确工具，给出数据质量保障方案

prompt_template:
迁移到 S/4HANA 时，需要将 ECC 系统中 5 年的历史 FI 凭证数据迁移过来。
（公司代码3个，约1200万张凭证，含增值税发票数据）

请回答以下四个专业问题：

问题1（6分）：迁移工具选择
SAP 提供了多种数据迁移工具，针对历史FI凭证迁移：
- LSMW（Legacy System Migration Workbench）是否适合迁移FI凭证？为什么？
- S/4HANA 推荐的标准数据迁移工具叫什么（事务代码）？
- BAPI_ACC_DOCUMENT_POST 在 S/4HANA 迁移中有什么限制？
  （提示：与 Universal Journal 的写入机制有关）

问题2（6分）：增值税数据的特殊风险
- 历史增值税发票数据（MWSKZ、MWSTS字段）迁移时，
  如果目标系统的税码配置与源系统不一致，会发生什么？
- 红字发票（REBZG字段）的关联关系在迁移后如何保证正确性？
- 中国金税系统的发票信息是否需要随SAP数据一起迁移？

问题3（5分）：迁移质量验证
- 列出3个必须执行的迁移后验证检查点（具体到可执行的SAP报表或事务代码）
- 如何验证迁移后的凭证借贷平衡？
- 如何验证增值税数据的完整性？

问题4（3分）：给出带优先级和人天估算的迁移风险矩阵（至少4项风险，每项需有人天数字）

仅输出JSON：
{"问题1_LSMW适合": "是/否及原因", "问题1_推荐工具": "...", "问题1_BAPI限制": "...",
 "问题2_税码不一致风险": "...", "问题2_红字关联": "...", "问题2_金税数据": "...",
 "问题3_验证检查点": ["检查点1","检查点2","检查点3"],
 "问题4_风险矩阵": [{"风险": "...", "人天": 数字, "优先级": "高/中/低"}]}


title: 动态SQL安全防御

description: 给出针对ABAP动态SQL注入的完整防御方案，包括CL_ABAP_DYN_PROG精确方法名

prompt_template:
以下 ABAP 代码存在严重的 SQL 注入漏洞：

```abap
PARAMETERS: p_bukrs TYPE char10,
            p_col   TYPE char30.    " 用户输入的列名

" 危险写法1：字符串拼接WHERE条件
DATA(lv_where) = |BUKRS = '{ p_bukrs }'|.

" 危险写法2：用户控制的字段名
DATA(lv_order) = p_col.

SELECT * FROM bkpf INTO TABLE @DATA(lt_result)
  WHERE (lv_where)
  ORDER BY (lv_order).
```

请回答以下三个问题：

问题1（8分）：ABAP 动态 SQL 的标准安全防御类
- SAP 提供了哪个标准类（精确类名）专门用于动态程序安全验证？
- 验证动态列名（p_col）安全性应调用该类的哪个方法（精确方法名）？
- 验证动态 WHERE 字符串安全性应调用哪个方法？
- 如果验证失败，该类会抛出什么异常（精确异常类名）？

问题2（7分）：参数化查询替代方案
- 如何用 ABAP 的参数化方式安全地传入 BUKRS 值（避免字符串拼接）？
- 给出重写后的安全 SELECT 语句（使用 @p_bukrs 宿主变量方式）
- 对于动态列名（ORDER BY字段），如何在不引入注入风险的情况下实现？

问题3（5分）：权限层面的纵深防御
- 仅靠输入验证是否足够？还需要在哪一层面补充控制？
- 给出一个"最小权限原则"在该场景下的具体实施方案

仅输出JSON：
{"问题1_防御类名": "...", "问题1_列名验证方法": "...",
 "问题1_WHERE验证方法": "...", "问题1_异常类名": "...",
 "问题2_安全SELECT": "SELECT ... FROM bkpf WHERE bukrs = @p_bukrs ...",
 "问题2_动态列解决方案": "...",
 "问题3_纵深防御": "..."}


title: 数据脱敏与隐私合规

description: 识别代码中的隐私数据风险，给出符合PIPL/GDPR的SAP数据脱敏方案

prompt_template:
代码输出的数据中包含敏感个人/企业信息：

```abap
BEGIN OF gs_vat_data,
  belnr      TYPE belnr_d,
  发票号码   TYPE char20,
  税额       TYPE wrbtr,
  含税金额   TYPE wrbtr,
  购买方名称 TYPE char100,    " ← 企业名称（可能含个体工商户真实姓名）
  购买方税号 TYPE char20,     " ← 纳税人识别号（企业/个人）
END OF gs_vat_data.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  TABLES t_outtab = gt_bseg.  " 输出了所有字段，包括购买方信息
```

请回答以下三个问题：

问题1（7分）：隐私数据识别与法规要求
- 哪些字段属于《个人信息保护法》（PIPL）规定的个人信息？
- 税号字段（购买方税号）在什么情况下属于个人信息（提示：个体工商户）？
- 哪些岗位的用户应该被限制看到完整的购买方名称和税号？

问题2（8分）：SAP 数据脱敏技术方案
- SAP 提供了哪个标准组件实现数据脱敏/匿名化
  （提示：SAP Information Lifecycle Management 或 SAP Data Custodian）？
- 在 ABAP 代码层，如何对税号字段做部分掩码
  （如：显示91310000****1234X）？给出具体的字符串处理代码。
- CDS 视图层面，如何用注解控制敏感字段的访问？
  （提示：@Semantics 或 @PersonalData 注解）

问题3（5分）：数据保留与删除
- 中国增值税发票数据的法定保存年限是多少？
- SAP 中如何实现超期数据的自动归档和删除（给出相关工具名称）？
- 删除时是否可以直接物理删除 BKPF/BSEG/ACDOCA 数据？

仅输出JSON：
{"问题1_个人信息字段": ["字段1","字段2"], "问题1_税号个人信息条件": "...",
 "问题1_限制岗位": ["岗位1","岗位2"],
 "问题2_SAP脱敏组件": "...", "问题2_掩码代码": "...", "问题2_CDS注解": "...",
 "问题3_保存年限": "...", "问题3_归档工具": "...", "问题3_能否物理删除": "..."}


title: Embedded Analytics注解

description: 给出将ABAP报表改造为S/4HANA嵌入式分析CDS视图的精确注解名称

prompt_template:
当前 ABAP 增值税报表需要改造为 S/4HANA Embedded Analytics 方案，
利用 SAP HANA 的计算能力在数据库层完成聚合，通过 Analytical CDS 视图对接 Fiori 分析应用。

请回答以下三个问题（必须给出精确的 CDS 注解名称，不接受泛化描述）：

问题1（8分）：Analytical CDS 视图的核心注解
S/4HANA 的 Analytical CDS 视图有严格的分层架构（Interface → Consumption），
请给出以下精确注解名称：
- 声明一个 CDS 视图为分析查询（可被 Analysis for Office/Power BI 直接连接）的注解是？
- 声明数据类别（事实表/维度表/立方体）的注解是？（给出3种取值）
- 声明度量值（可聚合字段，如税额 SUM）的注解是？
- 声明维度（分组维度，如公司代码、会计期间）的注解格式是？

问题2（7分）：字段级别注解
- 将某个字段标记为"关键指标"（显示在报表的Values区域）需要什么注解？
- 将字段标记为日历年月（YYYYMM格式的会计期间）以支持时间序列分析的注解是？
- 声明字段为外键关联到维度视图的注解格式是？

问题3（5分）：部署与消费
- 分析 CDS 视图如何发布为 OData 服务供 Analysis for Office 连接
  （不需要写 Gateway 代码，纯注解驱动，给出精确注解）？
- 在 SAP BW/4HANA 场景下，如何将 CDS 视图作为数据源？

仅输出JSON：
{"问题1_查询注解": "...", "问题1_数据类别注解": "...", "问题1_三种类别取值": ["CUBE","FACT","DIMENSION"],
 "问题1_度量注解": "...", "问题1_维度注解格式": "...",
 "问题2_关键指标注解": "...", "问题2_日历注解": "...", "问题2_外键注解": "...",
 "问题3_OData发布注解": "...", "问题3_BW数据源": "..."}


title: FI-CO集成架构变化

description: 考察S/4HANA中FI与CO数据集成架构的根本变化及对现有报表的影响

prompt_template:
在 ECC 中，FI（财务会计）和 CO（管理会计）是相互独立的模块，
通过定期对账/调解来保持一致性。S/4HANA 对此做了根本性的架构改变。

请回答以下三个问题：

问题1（8分）：ECC vs S/4HANA 的 FI-CO 集成变化
- 在 ECC 中，FI 凭证过账后，CO 数据写入哪些表？（至少列出2张表，含COEP）
- S/4HANA 中，FI 过账时 CO 数据写入哪张表？（与 FI 数据是同一张表吗？）
- "实时 FI-CO 集成"（Universal Journal）意味着什么？
  传统的 FI-CO 对账报表（如 KE5T、FAGLCOFI）还需要运行吗？
- 利润中心会计（PCA，Profit Center Accounting）在 S/4HANA 中如何变化？

问题2（7分）：CO-PA（盈利能力分析）的架构演变
- ECC 中的 CO-PA 有哪两种类型？（基于科目 vs 基于成本要素）
- S/4HANA 推荐的 CO-PA 类型是哪种？为什么另一种被淡化？
- 基于 ACDOCA 的 CO-PA 报表，与 ECC 中 KE30 报表有什么本质区别？
- SAP S/4HANA 中的 "Group Valuation"（集团估价）存储在哪个分类账（Ledger）？

问题3（5分）：对现有 ABAP 报表的影响
- 原来从 COEP 表取 CO 实际数据的程序，在 S/4HANA 中还能用吗？
- 原来的 KE30 CO-PA 报表定义（Operating Concern）需要如何处理？
- 给出一个从 ACDOCA 取代 COEP 数据的 SELECT 语句核心结构

仅输出JSON：
{"问题1_ECC_CO表": ["表1","表2"], "问题1_S4_CO写入": "...",
 "问题1_对账报表还需要": "是/否及原因", "问题1_PCA变化": "...",
 "问题2_COPA两种类型": ["类型1","类型2"], "问题2_推荐类型": "...",
 "问题2_KE30区别": "...", "问题2_集团估价分类账": "...",
 "问题3_COEP兼容性": "...", "问题3_KE30处理": "...",
 "问题3_ACDOCA替代SELECT": "SELECT ... FROM acdoca WHERE ..."}


title: 索引与执行计划

description: 分析BKPF表索引结构，使用ST05诊断慢查询，给出索引优化建议

prompt_template:
以下查询在生产系统中经常超时（500万张凭证，查询耗时超过30秒）：

```abap
SELECT * FROM bkpf INTO TABLE @gt_bkpf
  WHERE bukrs IN @s_bukrs      " 公司代码（3个值）
    AND blart = 'RE'            " 凭证类型（供应商发票）
    AND gjahr = @p_year         " 财年
    AND bldat IN @s_bldat.      " 凭证日期范围
```

请回答以下四个问题：

问题1（6分）：BKPF 的标准索引
- BKPF 表的主键（Primary Key）由哪些字段组成？
- SAP 为 BKPF 创建了哪些标准二级索引？（至少列出 BKPF~1 的字段组成）
- 上述查询的 WHERE 条件（bukrs+blart+gjahr+bldat）能命中哪个索引？
  如果不能命中，查询会走什么方式？

问题2（5分）：ST05 SQL Trace 使用
- ST05 是 SAP 的什么工具？如何激活它来捕获上述查询的执行计划？
- 在 ST05 结果中，如何判断一个查询是否走了全表扫描（Full Table Scan）？
- 除了 ST05，还有哪个事务代码可以查看数据库执行计划（SAP HANA场景）？

问题3（5分）：索引优化方案
- 针对上述查询，建议创建什么样的复合索引（字段顺序很重要）？
- 在 SAP 中创建自定义索引使用什么事务代码？
- 字段顺序为什么重要？对于 IN 操作符的字段（bukrs IN s_bukrs），
  应该放在索引的第几位？

问题4（4分）：HANA 特有的优化
- SAP HANA 数据库的列式存储（Column Store）对这个查询有什么影响？
- HANA 的"代码下推"（Code Push-Down）如何帮助减少从数据库传输到应用层的数据量？
- 在 S/4HANA 中，是否还需要手动创建二级索引？原因是什么？

仅输出JSON：
{"问题1_主键字段": ["mandt","bukrs","gjahr","belnr"], "问题1_BKPF1索引": "...",
 "问题1_查询命中索引": "是/否及原因",
 "问题2_ST05用途": "...", "问题2_全表扫描标志": "...", "问题2_HANA执行计划TC": "...",
 "问题3_建议索引字段": "...", "问题3_创建索引TC": "...", "问题3_字段顺序原因": "...",
 "问题4_列式存储影响": "...", "问题4_代码下推": "...", "问题4_还需手动索引": "..."}


title: 并行处理架构

description: 设计ABAP并行处理方案处理500万凭证，给出CL_ABAP_PARALLEL精确用法

prompt_template:
当前程序顺序处理500万张凭证，每张凭证需调用一次金税接口，
预计需要48小时才能完成。需要设计并行处理方案将时间压缩到4小时以内。

```abap
" 当前顺序处理（太慢）：
LOOP AT gt_bkpf INTO DATA(ls_bkpf).
  CALL FUNCTION 'ZJINTAX_GET_VAT_INFO'
    EXPORTING i_bukrs = ls_bkpf-bukrs
              i_belnr = ls_bkpf-belnr
    IMPORTING e_fp_hm = gs_vat_data-发票号码.
ENDLOOP.
```

请回答以下三个问题：

问题1（8分）：ABAP 并行处理方案对比
S/4HANA 中有以下几种并行处理方式，请说明各自的适用场景和精确 API：
- 方案A：异步 RFC（STARTING NEW TASK）
  - 精确语法？最多能启动多少个并行任务？如何收集结果？
- 方案B：CL_ABAP_PARALLEL 类（S/4HANA 2021+推荐）
  - 创建实例的语法？run_method 需要实现什么接口？
- 方案C：SPTA/SM37B 后台作业并行框架
  - 适用什么场景？如何分割数据包？

问题2（7分）：针对本场景的推荐方案设计
- 推荐选择哪个方案？为什么（考虑：依赖外部金税系统、结果需要汇总）？
- 如何将500万凭证分割成并行处理的数据包（给出分割策略）？
- 如何处理金税接口的并发限制（外部系统通常有QPS限制）？
- 结果汇总时如何避免并发写入内表的竞争条件（Race Condition）？

问题3（5分）：监控与容错
- 如何监控并行任务的执行状态（给出 SAP 事务代码）？
- 如果某个并行任务超时或失败，如何做到断点续传？
- 给出一个简单的重试机制的 ABAP 伪代码思路

仅输出JSON：
{"问题1_异步RFC语法": "CALL FUNCTION ... STARTING NEW TASK ...",
 "问题1_异步RFC最大任务数": "...",
 "问题1_CL_ABAP_PARALLEL创建": "...", "问题1_run接口": "...",
 "问题1_SPTA场景": "...",
 "问题2_推荐方案": "...", "问题2_数据分割策略": "...",
 "问题2_QPS限制处理": "...", "问题2_Race_Condition": "...",
 "问题3_监控TC": "...", "问题3_断点续传": "...", "问题3_重试伪代码": "..."}


title: Clean Core与BTP限制

description: 识别哪些经典ABAP语法在BTP ABAP Cloud中被禁止，并给出Released API使用规则

dimension: Modern Ecosystem

prompt_template:
SAP 推行 "Clean Core" 原则，要求 Z 程序在迁移到 BTP ABAP 环境（ABAP Cloud）后
不得直接访问 SAP 内部表或使用未发布的 API。

以下代码段包含多种在 ABAP Cloud 中被限制的写法：

```abap
" 片段1：直接访问SAP标准表
SELECT * FROM t001 INTO TABLE @DATA(lt_bukrs).

" 片段2：跨Client访问
SELECT * FROM usr02 CLIENT SPECIFIED
  WHERE mandt = '200'.

" 片段3：使用内部类（非released API）
DATA(lo_handler) = NEW cl_gui_alv_grid( ).

" 片段4：直接RFC调用外部系统
CALL FUNCTION 'ZJINTAX_GET_VAT_INFO' DESTINATION 'JINTAX_RFC'.

" 片段5：Native SQL
EXEC SQL.
  SELECT * FROM bkpf WHERE mandt = :sy-mandt
ENDEXEC.
```

请回答以下三个问题：

问题1（8分）：ABAP Cloud Profile 分层
- SAP 将 ABAP API 分为哪几个"发布合同"等级（给出英文名称，至少3个）？
- 哪个等级的 API 在 BTP ABAP Cloud 中可以安全使用？
- 哪个等级表示"SAP 内部使用，不向客户开放"？
- 以上5个代码片段中，哪些在 BTP ABAP Cloud 中会被 ATC Check 标记为错误？

问题2（7分）：Clean Core 替代方案
- 替代片段1（访问T001表）的 Released CDS 视图是什么？
- 替代片段5（EXEC SQL）的推荐方式是什么（BTP中允许的数据库访问方式）？
- SAP 提供了哪个在线查询工具，可以检索所有 Released API？（给出URL格式或工具名）

问题3（5分）：工具与流程
- SAP 提供了哪个 ATC Check 变体专门检测 Clean Core 违规？
- "三层扩展模型"（Three-Tier Extensibility）中，最受限的一层叫什么？
- 在 S/4HANA On-Premise 中，是否可以暂时绕过 Clean Core 限制？如何做？

仅输出JSON：
{"问题1_发布合同等级": ["等级1","等级2","等级3"], "问题1_可用等级": "...",
 "问题1_内部等级": "...", "问题1_BTP错误片段": [1,2,3,4,5],
 "问题2_T001替代CDS": "...", "问题2_替代EXEC_SQL": "...", "问题2_API查询工具": "...",
 "问题3_ATC检查": "...", "问题3_最受限层": "...", "问题3_On_Premise绕过": "..."}


title: ABAP单元测试设计

description: 为ZVAT程序的核心逻辑编写ABAP Unit Test，使用Test Double mock金税接口

prompt_template:
为以下 ZVAT_INVOICE_PROCESS 程序的核心计算逻辑（红字发票判断 + 金税接口）
设计 ABAP 单元测试。

核心被测代码：
```abap
" 需要测试的逻辑1：红字发票判断
IF ls_bkpf-xblnr(2) = 'HY'.
  gs_vat_data-发票状态 = '01'.
ELSE.
  gs_vat_data-发票状态 = '00'.
ENDIF.

" 需要测试的逻辑2：调用金税接口
CALL FUNCTION 'ZJINTAX_GET_VAT_INFO'
  EXPORTING i_bukrs = ls_bseg-bukrs
            i_belnr = ls_bseg-belnr
  IMPORTING e_fp_hm = gs_vat_data-发票号码
  EXCEPTIONS not_found = 1 OTHERS = 2.
```

请回答以下三个问题：

问题1（8分）：ABAP Unit Test 基础语法
- 定义一个 ABAP 测试类需要哪个关键字（给出完整的 CLASS 定义行语法）？
- 测试方法需要什么方法属性标记？
- 用于断言"两个值相等"的精确方法名（含类名，如 CL_XX=>METHOD）是什么？
- SETUP 和 TEARDOWN 方法分别在什么时候执行？
- 给出一个测试红字发票判断逻辑的完整测试方法骨架

问题2（7分）：Test Double（测试替身）
- SAP 提供了哪个标准类（精确类名）用于创建函数模块的 Test Double？
- 用该类 mock ZJINTAX_GET_VAT_INFO 函数，使其返回固定测试数据，需要调用哪个方法？
- 如何在测试运行结束后清除所有注册的 Test Double？
- 如果 ZJINTAX_GET_VAT_INFO 不是函数模块而是类方法，
  应该用哪种机制来实现 mock（提示：接口注入）？

问题3（5分）：测试覆盖率与 CI 集成
- 查看 ABAP 单元测试覆盖率使用哪个事务代码？
- 在 ABAP Development Tools (ADT) 中如何运行所有测试并查看结果？
- SAP ATC (ABAP Test Cockpit) 与 ABAP Unit 的关系是什么？

仅输出JSON：
{"问题1_测试类语法": "CLASS lth_test DEFINITION ... FOR TESTING",
 "问题1_测试方法标记": "...", "问题1_断言方法": "...",
 "问题1_setup执行时机": "...", "问题1_测试骨架": "...",
 "问题2_TestDouble类": "...", "问题2_mock方法": "...",
 "问题2_清除方法": "...", "问题2_类方法mock": "...",
 "问题3_覆盖率TC": "...", "问题3_ADT运行": "...", "问题3_ATC关系": "..."}


title: Fiori Launchpad集成

description: 将ZVAT_INVOICE_PROCESS报表配置为Fiori Launchpad Tile，含语义对象和意图导航

prompt_template:
需要将 ZVAT_INVOICE_PROCESS 报表以 Fiori Launchpad Tile 方式提供给用户，
用户点击 Tile 后能直接进入报表的选择屏幕。

请回答以下三个问题：

问题1（8分）：Fiori Launchpad 核心配置概念
- 在 Fiori Launchpad 中，导航目标（Navigation Target）由哪两个核心要素组成
  （给出精确英文名称）？
- 经典 ABAP 报表（REPORT 程序）发布为 Tile 时，使用哪种 Tile 类型（精确技术名称）？
  （提示：区分 Dynamic Tile、Static Tile、Custom Tile）
- "目标映射"（Target Mapping）将 Intent 映射到什么类型的启动对象？
  对于 ABAP 报表，启动对象类型的精确名称是什么？
- 配置 Launchpad 使用哪个事务代码？

问题2（7分）：PFCG 角色与 Launchpad 权限
- 要让用户能在 Launchpad 看到某个 Tile，需要在 PFCG 角色里维护什么？
- 角色中的 "Fiori Tile Catalog" 菜单项是通过什么机制添加的？
- 如果用户能看到 Tile 但点击后报授权错误，通常缺少哪类权限对象
  （FI 报表场景下）？
- 开发环境和生产环境的 Launchpad 配置如何通过传输请求（Transport）传输？

问题3（5分）：URL Scheme 与深链接
- Fiori Intent 的 URL 格式是什么
  （给出形如 #SemanticObject-Action?param=value 的示例）？
- 如何为不同岗位用户显示不同的 Tile（动态可见性控制）？
- 给出一个完整的将 ZVAT_INVOICE_PROCESS 配置为 Tile 的 Intent URL 示例

仅输出JSON：
{"问题1_导航目标两要素": ["要素1","要素2"], "问题1_Tile类型": "...",
 "问题1_启动对象类型": "...", "问题1_事务代码": "...",
 "问题2_PFCG配置": "...", "问题2_Catalog添加机制": "...",
 "问题2_权限对象": "...", "问题2_传输方式": "...",
 "问题3_URL格式": "#SemanticObject-Action...", "问题3_动态可见性": "...",
 "问题3_示例URL": "..."}


title: BADI增强框架设计

description: 设计New BADI方案替代硬编码ZJINTAX调用，给出SE18定义和精确CALL BADI语法

prompt_template:
当前代码中 CALL FUNCTION 'ZJINTAX_GET_VAT_INFO' 是硬编码的金税接口调用。
为了支持未来不同厂商的金税接口（如换用数电票平台API），需要将其改造为
SAP Business Add-In（BAdI）可插拔架构。

请回答以下三个问题：

问题1（8分）：New BAdI 的核心语法
- 调用 BAdI 实现的标准 ABAP 语法（精确关键字）：先获取实例，再调用方法的两步写法？
- 与旧版（Classic BAdI 使用 CL_EXITHANDLER_GET_INSTANCE）相比，
  New BAdI 的调用方式有什么根本区别？
- BAdI 定义（Definition）使用哪个事务代码？实现（Implementation）使用哪个？
- 如果一个 BAdI 允许多个实现同时激活（Multiple Use），如何在 CALL BADI 中
  控制只调用过滤条件匹配的实现？

问题2（7分）：BAdI 接口设计
- 为 ZJINTAX 金税接口设计一个 BAdI 接口，需要定义什么类型的 CDS/ABAP 对象
  （精确说明创建什么，接口名应以什么开头）？
- 在 Enhancement Spot（增强点）中定义 BAdI 时，Enhancement Spot 的创建事务代码是什么？
- 如果某些公司代码使用 A 厂商金税，另一些使用 B 厂商，
  应该使用哪种 BAdI 类型（提示：Filter-Dependent BAdI）？过滤字段如何定义？

问题3（5分）：与经典增强方式对比
- 除 BAdI 外，ABAP 还有哪些增强机制？列出3种（给出精确技术名称）
- 在 S/4HANA 中，哪种增强方式最符合 Clean Core 原则？
- 如何查找标准 SAP 代码中已有的 BAdI 定义（开发工具中如何搜索）？

仅输出JSON：
{"问题1_GET_BADI语法": "GET BADI ...", "问题1_CALL_BADI语法": "CALL BADI ...",
 "问题1_vs经典区别": "...", "问题1_定义TC": "...", "问题1_实现TC": "...",
 "问题1_多实现过滤": "...",
 "问题2_接口类型": "...", "问题2_接口命名规则": "...",
 "问题2_EnhancementSpot_TC": "...", "问题2_过滤BADI": "...",
 "问题3_其他增强机制": ["机制1","机制2","机制3"],
 "问题3_CleanCore推荐": "...", "问题3_查找方法": "..."}


title: LUW事务一致性

description: 分析LOOP中调用ZJINTAX的LUW风险，给出UPDATE TASK和锁机制精确方案

prompt_template:
以下代码在 LOOP 中调用外部金税接口，并将结果写回 SAP 自定义表：

```abap
LOOP AT gt_bseg INTO DATA(ls_bseg).
  " 调用外部系统获取发票信息
  CALL FUNCTION 'ZJINTAX_GET_VAT_INFO'
    EXPORTING i_bukrs = ls_bseg-bukrs
              i_belnr = ls_bseg-belnr
    IMPORTING e_fp_hm = gs_vat_data-发票号码
    EXCEPTIONS not_found = 1 OTHERS = 2.

  IF sy-subrc = 0.
    " 写入自定义表
    MODIFY ztax_invoice FROM gs_vat_data.
    COMMIT WORK.   " ← 每条记录都提交一次！
  ENDIF.
ENDLOOP.
```

请回答以下三个问题：

问题1（8分）：LUW 概念与当前代码的问题
- SAP LUW 和 数据库 LUW（DB LUW）有什么根本区别？
  （提示：SAP LUW 可以跨越多个对话步骤）
- COMMIT WORK 在上述代码中每条记录都执行，会产生什么后果？
  （从数据一致性、锁的角度分析——如果第500条失败，前499条已提交怎么办？）
- "原子性"在 SAP 场景下如何保证？如何让所有 MODIFY 语句要么全部成功要么全部回滚？

问题2（7分）：UPDATE TASK 延迟提交机制
- "CALL FUNCTION ... IN UPDATE TASK" 的作用是什么？
- V1 Update 和 V2 Update 的区别是什么？哪个适合本场景的财务数据写入？
- 如果金税接口调用成功但后续 UPDATE TASK 失败，
  SAP 如何通知用户并支持重新执行？（给出相关工具/事务代码）
- 给出将 MODIFY ztax_invoice 改为 UPDATE TASK 模式的代码结构

问题3（5分）：锁机制
- 在写入 ztax_invoice 前，如何防止并发写入（给出 ABAP 锁机制的精确调用方式）？
- SAP 锁机制使用哪个前缀命名的函数模块来加锁/解锁？
- "Optimistic Locking" 和 "Pessimistic Locking" 在 SAP 中分别对应什么场景？

仅输出JSON：
{"问题1_SAP_vs_DB_LUW": "...", "问题1_COMMIT每条问题": "...", "问题1_原子性方案": "...",
 "问题2_UPDATE_TASK作用": "...", "问题2_V1_vs_V2": "...",
 "问题2_失败通知工具": "...", "问题2_代码结构": "CALL FUNCTION ... IN UPDATE TASK ...",
 "问题3_锁函数前缀": "...", "问题3_加锁方式": "...", "问题3_乐观vs悲观": "..."}


title: Integration Suite接口现代化

description: 将ZJINTAX RFC改造为SAP Integration Suite iFlow，给出精确组件名称和配置

prompt_template:
当前代码使用 RFC 同步调用外部金税系统（ZJINTAX_GET_VAT_INFO），
这种直接耦合在 S/4HANA Cloud 架构下存在以下问题：
- 金税系统宕机时 SAP 同步等待，影响业务流程
- RFC 不支持现代 REST/JSON 接口（大多数新版金税系统已转为 REST API）
- 无法监控、重试、记录接口调用日志

SAP 推荐使用 SAP Integration Suite（原 SAP Cloud Platform Integration）来解耦。

请回答以下三个问题：

问题1（8分）：SAP Integration Suite 核心组件
- Integration Suite 中，一个集成流程的图形化配置对象叫什么（精确英文名）？
- 连接 S/4HANA 与 Integration Suite 的标准连接器叫什么
  （提示：S/4HANA 侧使用 Communication Arrangement）？
- 从 S/4HANA 调用 Integration Suite 时，身份认证推荐使用哪种机制
  （不再是用户名/密码，给出具体机制名）？
- 调用外部 REST API（金税系统新接口）使用哪种 Adapter 类型？

问题2（7分）：消息映射与错误处理
- 在 iFlow 中，将 SAP BAPI 返回的 XML 结构转换为金税系统的 JSON 格式，
  使用哪种 Mapping 方式（给出 Integration Suite 中的具体名称）？
- 如果金税系统返回错误，iFlow 如何配置重试机制
  （给出具体的 Exception Subprocess 配置方式）？
- Integration Suite 的消息持久化（确保消息不丢失）通过什么机制实现？

问题3（5分）：监控与运维
- 在 Integration Suite 中，查看接口调用日志和消息跟踪使用哪个工具/URL 路径？
- 如何从 S/4HANA 的 ABAP 程序中异步调用 iFlow
  （不等待金税接口返回，直接继续业务流程）？
- 在企业内网部署场景下，Integration Suite（云端）如何访问金税系统（本地网络）？
  给出连接组件的精确名称。

仅输出JSON：
{"问题1_iFlow名称": "...", "问题1_S4连接器": "...",
 "问题1_认证机制": "...", "问题1_REST_Adapter": "...",
 "问题2_Mapping类型": "...", "问题2_重试配置": "...", "问题2_持久化机制": "...",
 "问题3_监控工具": "...", "问题3_异步调用方式": "...", "问题3_本地网络组件": "..."}