# iSynth 反应数据规范：完整字段说明

规范版本 1.9.0。本页一次列出全部输入类型、字段说明、取值和示例，无需登录或运行 JavaScript，可直接将本页链接提供给 AI。

[在线阅读](https://isynth.ichemdata.com/schemas/reaction-reference.zh.html) · [JSON Schema](https://isynth.ichemdata.com/schemas/reaction-object.schema.json)

## 如何使用

人工贡献使用简化表格；AI、实验室软件和平台对接使用 Reaction JSON。JSON Schema 约束数据交换和校验，不要求用户手填全部字段，也不等同于数据库表结构。

每次实验生成一条 Reaction → 校验并核对原文 → 上传到私有草稿 → 查看反应预览 → 提交审核。上传时每条记录序列化为 reaction_record 列中的 JSON 字符串，作者、来源与许可在数据集信息中单独填写。

网页提供反应结构、阶段条件和测量结果视图，同时保留原始文件与完整 JSONL 下载。发布且检索准备完成后，可通过 MCP 查询并读取完整记录。

[完整提交流程与示例](https://isynth.ichemdata.com/zh/guides/reaction-data) · [upload_records request](https://isynth.ichemdata.com/examples/structured-upload.json)

## 论文提取

JSON Schema（Draft 2020-12）定义字段、类型与嵌套结构；模型输出的是符合它的反应 JSON 数据，不是 Schema 本身。示例按字段说明顺序展示，JSON 对象的键顺序不影响校验；segments 数组顺序表示实验先后。

提供论文正文、补充信息及本页。每次实验输出一个 Reaction；多次实验使用 JSONL，每行一个对象。未报告的可选字段省略，来源不清楚的描述保留为文字。

先核对结构，再校验物料引用、量值与测量归属，最后回查原文。MCP 可先调用 get_reaction_contract(view="extraction")，再调用 validate_reaction_records；校验不保存数据。无法打开链接的模型可直接使用下载规范包中的文件。

[提取指令与提示词](https://isynth.ichemdata.com/schemas/extraction-instructions.md) · [普通反应示例](https://isynth.ichemdata.com/schemas/reaction-literature.example.json)

## 填写约定

- 常规范围使用 lower、upper 和 unit，例如 20–25 °C 写为 {"lower":20,"upper":25,"unit":"°C"}。单侧界限使用 value 与 qualifier，例如 <0 °C。特殊边界表述保留在 raw。

- 自定义参数完整保存于 JSONB。登记参数的名称、类型、单位和位置后，可通过 API/MCP 的 parameter_filters 筛选；先用 get_parameter_catalog 查询支持范围。同组条件须匹配同一阶段，缺失或单位不明的值不参与数值筛选。参数登记表：/schemas/reaction-parameter-registry.json。

- 手性位点说明本次考察的位置，比较对象说明数值的含义：ee/er 比较完整的一对对映体，de/dr 比较所述非对映体。多个手性中心仍可测 ee/er；固定其余中心只改变一个中心，通常属于 de/dr。

- stereocentres 使用原文位次，不等于 SMILES 原子序号。多位点、天然产物或分组比例须保留原文比较对象；不从位点列表推断异构体分组。

- 一个 JSON 对象对应一次实验，统一使用 materials、initial_state、segments、products 和 measurements。

- materials 定义投入物料，products 定义产物；起始投料和后续加料均使用 Charge，用量与浓度并列填写。

- 普通反应通常一个阶段，一锅多步按顺序增加阶段。未报告阶段信息时，segments 填空数组。

- 阶段条件填 conditions，未填写的沿用前值；duration 只属于当前阶段。操作及定性观察填 text。仅原文明示的阶段产物填本段 products，阶段测量填本段 measurements；最终结果填根对象，不重复填入最后一个阶段。

- Charge.material 引用投入物料编号；Measurement.subject 引用被测物料或产物编号。所有指标统一使用 measurements。

- 保留来源单位。value 与 unit 表示量值；无法拆分时可以只填 raw。

- 补充结构化属性统一填 parameters；补充文字统一填 text。后续阶段省略条件会沿用前值，null 明确停止沿用，不表示数值 0。

- 已有 1.8.0、1.7.0、1.6.0、1.5.0、1.4.0、1.3.0、1.2.0、1.1.0、1.0.0 记录继续按原规则读取，原始数据不改写。

## Reaction

一次实验统一记录物料、起始投料、反应阶段和结果。普通反应填写一个阶段，一锅多步按顺序增加阶段。

### 对象示例

```json
{
  "schema_version": "1.9.0",
  "reaction_identifier": "EXP-0001",
  "materials": [
    {
      "id": "alcohol",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CCO"
        }
      ],
      "role": "reactant"
    },
    {
      "id": "reagent",
      "identifiers": [
        {
          "type": "NAME",
          "value": "acetic anhydride"
        }
      ],
      "role": "reagent"
    }
  ],
  "initial_state": {
    "inputs": [
      {
        "material": "alcohol",
        "amount": {
          "value": 0.25,
          "unit": "mmol",
          "raw": "0.25 mmol"
        }
      },
      {
        "material": "reagent"
      }
    ]
  },
  "segments": [
    {
      "conditions": {
        "temperature": {
          "value": 25,
          "unit": "°C",
          "raw": "25 °C"
        }
      }
    }
  ],
  "products": [
    {
      "id": "product",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CCOC(C)=O"
        }
      ]
    }
  ],
  "measurements": [
    {
      "subject": "product",
      "type": "yield",
      "value": {
        "value": 80,
        "scale": "percent",
        "raw": "80%"
      }
    }
  ],
  "provenance": {
    "reference": "Fictional teaching record; Example A"
  },
  "text": "Fictional format illustration, not a measured result. Unreported amounts, method and calculation bases are omitted."
}
```

### Reaction.schema_version

**类型:** `"1.9.0"` · 必填

数据格式版本，保留示例中的 1.9.0。

示例:

```json
"1.9.0"
```

### Reaction.reaction_identifier

**类型:** `string` · 必填

来源中的实验编号，例如 EXP-0001 或 Table 2, entry 5，用于区分同一来源中的实验。

示例:

```json
"EXP-0001"
```

### Reaction.materials

**类型:** `Material[]` · 必填

投入物料的定义；产物填写在结果的 products 中。

示例:

```json
[{"id":"alcohol","identifiers":[{"type":"SMILES","value":"CCO"}],"role":"reactant"},{"id":"reagent","identifiers":[{"type":"NAME","value":"acetic anhydride"}],"role":"reagent"}]
```

### Reaction.initial_state

**类型:** `InitialState` · 必填

实验开始时的投料与条件；普通反应也使用此结构。

示例:

```json
{"inputs":[{"material":"alcohol","amount":{"value":0.25,"unit":"mmol","raw":"0.25 mmol"}},{"material":"reagent"}]}
```

### Reaction.segments

**类型:** `Segment[]` · 必填

按顺序填写反应阶段。普通反应通常一个阶段；未报告阶段条件或过程时填空数组。

示例:

```json
[{"conditions":{"temperature":{"value":25,"unit":"°C","raw":"25 °C"}}}]
```

### Reaction.products

**类型:** `Product[]` · 按需填写

实验最终报告的产物。

示例:

```json
[{"id":"product_1","identifiers":[{"type":"SMILES","value":"C[C@H](O)c1ccccc1"}],"role":"desired_product","text":"Isolated target product","parameters":{"reported_stereochemistry":"(S)"}}]
```

### Reaction.measurements

**类型:** `Measurement[]` · 按需填写

整体实验的测量结果。每项填写 subject、type 和 value，可同时记录转化率、产率和立体选择性。

示例:

```json
[{"subject":"reactant_1","type":"conversion","value":{"value":90,"scale":"percent"},"text":"Determined by GC."}]
```

### Reaction.workup

**类型:** `string` · 按需填写

后处理与纯化的文字描述。

### Reaction.provenance

**类型:** `Provenance` · 按需填写

文章来源的 DOI 与引用。

示例:

```json
{"reference":"Fictional teaching record; Example A"}
```

### Reaction.text

**类型:** `string` · 按需填写

整个实验的其他补充说明。

示例:

```json
"Fictional format illustration, not a measured result. Unreported amounts, method and calculation bases are omitted."
```

### Reaction.parameters

**类型:** `object` · 按需填写

补充实验属性，如 run_id。反应条件填写在 Conditions.parameters。

示例:

```json
{"run_id":"RUN-0001"}
```

## Identifier

SMILES / INCHI 保存结构，INCHIKEY 保存结构索引键，NAME 保存名称或缩写（如 DCM），CUSTOM 保存论文内编号（如 1a，需保留来源位置）。同一物料可有多个有据可查的标识；不从名称或编号猜结构。

### 对象示例

```json
{
  "type": "SMILES",
  "value": "CCO"
}
```

### Identifier.type

**类型:** `string` · 必填

说明 value 使用哪种标识格式，例如 SMILES、INCHI 或 NAME；与 value 一起组成一个标识对象。

允许值: `SMILES`, `NAME`, `INCHI`, `INCHIKEY`, `CUSTOM`, `UNRESOLVED`

示例:

```json
"SMILES"
```

### Identifier.value

**类型:** `string` · 必填

与 type 对应的标识文本。例如 type 为 SMILES 时填写 CCO；type 为 NAME 时可填写 ethanol。

示例:

```json
"CCO"
```

## Quantity

一个量值，例如 {"value":1,"unit":"mmol"}。用于用量、温度、时间或测量值；raw 可保留原文。

### 对象示例

```json
[
  {
    "value": 25,
    "unit": "°C"
  },
  {
    "unit": "°C",
    "raw": "20–25 °C",
    "lower": 20,
    "upper": 25
  },
  {
    "value": 25,
    "unit": "°C",
    "raw": "25 ± 2 °C",
    "uncertainty": 2
  },
  {
    "value": 5,
    "scale": "percent",
    "raw": "<5%",
    "qualifier": "<"
  }
]
```

### Quantity.value

**类型:** `number` · 按需填写

数值。物理量配合 unit 填写；百分数配合 scale: percent 填写，例如 80% 的 value 为 80。

示例:

```json
25
```

### Quantity.scale

**类型:** `string` · 按需填写

无量纲比例的表示方式：percent 为百分数（80 表示 80%）；fraction 为小数比例（0.8 表示 80%）。与 unit 二选一。

允许值: `percent`, `fraction`

示例:

```json
"percent"
```

### Quantity.unit

**类型:** `string` · 按需填写

物理量的单位，如 mmol、°C、h；相对投料量可用 equiv 或 mol%。百分数使用 scale。

示例:

```json
"°C"
```

### Quantity.raw

**类型:** `string` · 按需填写

原始表述，不能与结构化数值矛盾。

示例:

```json
"20–25 °C"
```

### Quantity.qualifier

**类型:** `string` · 按需填写

单个数值的限定符，如 <5% 或约 25 °C。双边范围使用 lower 和 upper。

允许值: `=`, `<`, `<=`, `>`, `>=`, `~`

示例:

```json
"<"
```

### Quantity.lower

**类型:** `number` · 按需填写

范围下界，例如 20–25 °C 中的 20。

示例:

```json
20
```

### Quantity.upper

**类型:** `number` · 按需填写

范围上界，例如 20–25 °C 中的 25。

示例:

```json
25
```

### Quantity.uncertainty

**类型:** `number` · 按需填写

原文报告的 ± 不确定度。例如 25 ± 2 °C 填 2，与 value 使用同一单位。

示例:

```json
2
```

## Material

投入物料的结构、名称与角色；用量和浓度填写在投料项 Charge 中。

### 对象示例

```json
{
  "id": "reactant_1",
  "identifiers": [
    {
      "type": "SMILES",
      "value": "CCO"
    }
  ],
  "role": "reactant",
  "is_limiting": true,
  "text": "Ethanol used as the limiting reactant",
  "parameters": {
    "purity": "99.5%"
  }
}
```

### Material.id

**类型:** `string` · 必填

当前反应内的物料编号，例如 reactant_1、product_1，用于关联投料与测量。

示例:

```json
"reactant_1"
```

### Material.identifiers

**类型:** `Identifier[]` · 按需填写

物料的化学标识，每项填写 type 和 value。通常一个已有标识即可；多个标识应对应同一物料。

示例:

```json
[{"type":"SMILES","value":"CCO"}]
```

### Material.role

**类型:** `string` · 必填

物料或结果在实验中的角色。

允许值: `reactant`, `reagent`, `catalyst`, `solvent`, `intermediate`, `mixture`, `unknown`

示例:

```json
"reactant"
```

### Material.is_limiting

**类型:** `boolean` · 按需填写

来源明确的整体限量反应物或试剂填 true，明确非限量填 false，未知省略。equiv、mol% 和整体产率通常以它为参照。

示例:

```json
true
```

### Material.text

**类型:** `string` · 按需填写

补充物料说明，例如“粗中间体未经纯化直接使用”。

示例:

```json
"Ethanol used as the limiting reactant"
```

### Material.parameters

**类型:** `object` · 按需填写

补充物料属性，例如 purity: "99.5%"。

示例:

```json
{"purity":"99.5%"}
```

## Charge

一项投料：material 指向投入物料，amount 记录用量，concentration 记录本次所用试剂的浓度或配方。

### 对象示例

```json
{
  "material": "reagent_1",
  "amount": {
    "value": 2,
    "unit": "mL"
  },
  "concentration": {
    "raw": "2.5 M solution in hexanes"
  }
}
```

### Charge.material

**类型:** `string` → Material.id · 必填

投入物料的 id，例如 reagent_1；相同物料多次加入时复用此编号。

示例:

```json
"reagent_1"
```

### Charge.amount

**类型:** `Quantity` · 按需填写

本次投料量，例如 1 mmol。起始投料和后续加料均使用此字段。

示例:

```json
{"value":2,"unit":"mL"}
```

### Charge.concentration

**类型:** `Quantity` · 按需填写

本次所用试剂的浓度或配方，如“2.5 M solution in hexanes”或“60% dispersion in mineral oil”。与 amount 并列填写。

示例:

```json
{"raw":"2.5 M solution in hexanes"}
```

## Conditions

反应条件。后续阶段省略的条件沿用前值；null 是 JSON 空值，表示停止沿用该条件，并不表示数值 0。持续时间填 Segment.duration。

### 对象示例

```json
{
  "temperature": {
    "value": 25,
    "unit": "°C"
  },
  "pressure": {
    "value": 1,
    "unit": "atm"
  },
  "atmosphere": "nitrogen",
  "parameters": {
    "humidity": {
      "raw": "40% RH"
    },
    "light_source_type": "blue LED",
    "wavelength": "450 nm"
  }
}
```

### Conditions.temperature

**类型:** `Quantity | null` · 按需填写

温度 Quantity。

示例:

```json
{"value":25,"unit":"°C"}
```

### Conditions.pressure

**类型:** `Quantity | null` · 按需填写

压力 Quantity。

示例:

```json
{"value":1,"unit":"atm"}
```

### Conditions.atmosphere

**类型:** `string | null` · 按需填写

已报告的气氛。

示例:

```json
"nitrogen"
```

### Conditions.parameters

**类型:** `object | null` · 按需填写

少量补充条件，按名称和量值填写，如 milling_frequency: {value: 30, unit: "Hz"}。后续阶段省略该参数会沿用前值；设为 null 停止沿用；parameters: null 停止沿用全部补充条件。

示例:

```json
{"milling_frequency":{"value":30,"unit":"Hz"}}
```

## InitialState

反应开始时已投入的物料和条件。inputs 引用 materials 中的编号；溶剂也作为物料填写。

### 对象示例

```json
{
  "inputs": [
    {
      "material": "reactant_1",
      "amount": {
        "value": 1,
        "unit": "mmol",
        "raw": "1 mmol"
      }
    },
    {
      "material": "solvent_1",
      "amount": {
        "value": 2,
        "unit": "mL",
        "raw": "2 mL"
      }
    }
  ],
  "conditions": {
    "temperature": {
      "value": 0,
      "unit": "°C"
    }
  },
  "text": "The starting materials were charged at 0 °C."
}
```

### InitialState.inputs

**类型:** `Charge[]` · 必填

开始时加入的物料；每项填写 material 编号，按需填写本次 amount。

示例:

```json
[{"material":"reactant_1","amount":{"value":1,"unit":"mmol","raw":"1 mmol"}},{"material":"solvent_1","amount":{"value":2,"unit":"mL","raw":"2 mL"}}]
```

### InitialState.conditions

**类型:** `Conditions` · 按需填写

开始时的条件；持续时间填写在对应片段的 duration 中。

示例:

```json
{"temperature":{"value":0,"unit":"°C"}}
```

### InitialState.text

**类型:** `string` · 按需填写

当前对象的补充文字。阶段中记录操作与观察，测量中记录方法与样品，物料中记录补充物料说明。

示例:

```json
"The starting materials were charged at 0 °C."
```

## Segment

按顺序记录投料、条件、时间、操作与观察。通常填写这些信息即可；原文另有阶段产物或定量结果时，再填写 products 或 measurements。

### 对象示例

```json
{
  "added_materials": [
    {
      "material": "reagent_1",
      "amount": {
        "value": 1,
        "unit": "mmol"
      }
    }
  ],
  "conditions": {
    "temperature": {
      "value": 0,
      "unit": "°C"
    }
  },
  "duration": {
    "value": 1,
    "unit": "h"
  },
  "text": "The reagent was added dropwise. The solution turned yellow."
}
```

### Segment.added_materials

**类型:** `Charge[]` · 按需填写

本片段新增的投料，相同物料复用编号。

示例:

```json
[{"material":"reagent_1","amount":{"value":1,"unit":"mmol"}}]
```

### Segment.conditions

**类型:** `Conditions` · 按需填写

本片段的条件；填写新值即可改变条件，未填写的沿用前值，null 表示不再沿用。

示例:

```json
{"temperature":{"value":0,"unit":"°C"}}
```

### Segment.duration

**类型:** `Quantity` · 按需填写

仅此片段的持续时间，例如 1 h。

示例:

```json
{"value":1,"unit":"h"}
```

### Segment.text

**类型:** `string` · 按需填写

本阶段的操作与定性观察，如滴加方式、颜色变化、析出沉淀或 TLC 观察。

示例:

```json
"The reagent was added dropwise. The solution turned yellow and a precipitate formed."
```

### Segment.products

**类型:** `Product[]` · 按需填写

原文明示的阶段产物或中间体；最终产物填写在 Reaction.products。

示例:

```json
[{"id":"intermediate_1","identifiers":[{"type":"NAME","value":"Intermediate A (source label)"}],"role":"intermediate"}]
```

### Segment.measurements

**类型:** `Measurement[]` · 按需填写

本阶段的定量测量；subject 指向被测物料或产物编号。定性观察填写在 text。

示例:

```json
[{"subject":"reactant_1","type":"conversion","value":{"value":90,"scale":"percent"},"text":"Determined by GC."}]
```

## Product

产物的结构、角色与补充属性。测量值统一填写在所属反应或阶段的 measurements，通过 subject 引用此产物编号。

### 对象示例

```json
{
  "id": "product_1",
  "identifiers": [
    {
      "type": "SMILES",
      "value": "C[C@H](O)c1ccccc1"
    }
  ],
  "role": "desired_product",
  "text": "Isolated target product",
  "parameters": {
    "reported_stereochemistry": "(S)"
  }
}
```

### Product.id

**类型:** `string` · 必填

当前反应内唯一的产物编号，如 product_1。

示例:

```json
"product_1"
```

### Product.identifiers

**类型:** `Identifier[]` · 按需填写

物料的化学标识，每项填写 type 和 value。通常一个已有标识即可；多个标识应对应同一物料。

示例:

```json
[{"type":"SMILES","value":"C[C@H](O)c1ccccc1"}]
```

### Product.role

**类型:** `string` · 按需填写

产物角色，例如 desired_product（目标产物）、byproduct（副产物）或 intermediate（中间体）。

允许值: `desired_product`, `byproduct`, `intermediate`, `unknown`

示例:

```json
"desired_product"
```

### Product.text

**类型:** `string` · 按需填写

补充产物说明，例如分离得到的目标产物。

示例:

```json
"Isolated target product"
```

### Product.parameters

**类型:** `object` · 按需填写

补充产物属性。原文构型可写为 reported_stereochemistry: "(2R,3S)"。

示例:

```json
{"reported_stereochemistry":"(S)"}
```

## Measurement

一项测量：被测对象 subject、指标 type、数值 value 及补充说明。同一对象的多个指标或多次测量分别填写。

### 对象示例

```json
{
  "subject": "product_1",
  "type": "ee",
  "value": {
    "value": 96,
    "scale": "percent",
    "raw": "96%"
  },
  "stereocentres": "(2R,5S)",
  "basis": "(2R,5S):(2S,5R)",
  "text": "Isolated target diastereomer fraction analysed by chiral HPLC."
}
```

### Measurement.subject

**类型:** `string` → Material.id / Product.id · 必填

被测对象的编号：转化率引用反应物，如 reactant_1；产率或产物选择性引用产物，如 product_1。

示例:

```json
"reactant_1"
```

### Measurement.type

**类型:** `string` · 必填

测量指标，如 yield（产率）、conversion（转化率）、ee、de、er、dr；产物绝对量使用 amount。

允许值: `yield`, `conversion`, `ee`, `de`, `er`, `dr`, `ez`, `rr`, `selectivity`, `purity`, `amount`, `observation`, `custom`

示例:

```json
"ee"
```

### Measurement.value

**类型:** `Quantity` · 必填

明确报告的数值或标识值。

示例:

```json
{"value":96,"scale":"percent","raw":"96%"}
```

### Measurement.stereocentres

**类型:** `string` · 按需填写

本次考察位点及其目标构型。一个写 5S；多个按原文位次升序写 (2R,5S)，使用英文括号、逗号，不加空格、不重复位次。只列本次考察的位点，已固定的位点不必重复。R/S 表示绝对构型，原文的假不对称构型保留小写 r/s；支持 3aR 等位次。编号沿用原文，不是 SMILES 原子序号。

示例:

```json
"5S"
```

### Measurement.basis

**类型:** `string` · 按需填写

已知的比较对象，按比例顺序用英文冒号分隔，如 (2R,5S):(2R,5R)。分组用方括号与加号，如 [(2R,5S)+(2S,5R)]:[(2R,5R)+(2S,5S)]。原文的 syn:anti 等名称可直接保留；未知时省略。

示例:

```json
"(2R,5S):(2S,5R)"
```

### Measurement.text

**类型:** `string` · 按需填写

用一句话说明测量方法、样品等，例如“分离产物经手性 HPLC 测定”。自定义指标也在这里注明名称。

示例:

```json
"Isolated product analysed by chiral HPLC."
```

## Provenance

文章来源：论文 DOI 与文献引用。实验原始文件由平台另行保存。

### 对象示例

```json
{
  "doi": "10.1234/isynth.example",
  "reference": "Fictional article for documentation examples"
}
```

### Provenance.doi

**类型:** `string` · 按需填写

来源论文的 DOI 或 DOI 链接，例如 10.1234/isynth.example（虚构示例）。

示例:

```json
"10.1234/isynth.example"
```

### Provenance.reference

**类型:** `string` · 按需填写

来源文献的题名或引用文字；没有 DOI 时也可填写。

示例:

```json
"Fictional article for documentation examples"
```

## 完整的一锅多步示例

```json
{
  "schema_version": "1.9.0",
  "reaction_identifier": "EXP-0002",
  "materials": [
    {
      "id": "reactant_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "C[C@H](O)c1ccccc1"
        }
      ],
      "role": "reactant"
    },
    {
      "id": "reagent_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CC(=O)OC(C)=O"
        }
      ],
      "role": "reagent"
    },
    {
      "id": "solvent_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CC#N"
        }
      ],
      "role": "solvent"
    }
  ],
  "initial_state": {
    "inputs": [
      {
        "material": "reactant_1",
        "amount": {
          "value": 1,
          "unit": "mmol",
          "raw": "1 mmol"
        }
      },
      {
        "material": "solvent_1",
        "amount": {
          "value": 2,
          "unit": "mL",
          "raw": "2 mL"
        }
      }
    ],
    "conditions": {
      "temperature": {
        "value": 0,
        "unit": "°C"
      }
    }
  },
  "segments": [
    {
      "added_materials": [
        {
          "material": "reagent_1",
          "amount": {
            "value": 1,
            "unit": "mmol"
          }
        }
      ],
      "duration": {
        "value": 1,
        "unit": "h"
      },
      "text": "The reagent was added dropwise at 0 °C, and the solution turned yellow. After 1 h, an aliquot was taken for HPLC.",
      "measurements": [
        {
          "subject": "reactant_1",
          "type": "conversion",
          "value": {
            "value": 95,
            "scale": "percent",
            "raw": "95 %"
          },
          "text": "Method: HPLC."
        }
      ]
    },
    {
      "added_materials": [
        {
          "material": "reagent_1",
          "amount": {
            "value": 1,
            "unit": "mmol"
          }
        }
      ],
      "conditions": {
        "temperature": {
          "value": 80,
          "unit": "°C"
        }
      },
      "duration": {
        "value": 3,
        "unit": "h"
      },
      "text": "The same mixture was heated to 80 °C for 3 h."
    }
  ],
  "products": [
    {
      "id": "product_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CC(=O)O[C@H](C)c1ccccc1"
        }
      ]
    }
  ],
  "measurements": [
    {
      "subject": "product_1",
      "type": "yield",
      "value": {
        "value": 80,
        "scale": "percent",
        "raw": "80 %"
      },
      "text": "Method: isolated."
    },
    {
      "subject": "product_1",
      "type": "ee",
      "value": {
        "value": 94,
        "scale": "percent",
        "raw": "94 %"
      },
      "text": "Method: chiral HPLC."
    }
  ],
  "workup": "The reaction mixture was worked up and purified as reported.",
  "provenance": {
    "reference": "Fictional documentation fixture. All quantities and observations illustrate format only; no experiment or source paper is claimed."
  },
  "text": "FORMAT EXAMPLE ONLY. Not a laboratory instruction or a reported experimental result."
}
```

## 校验与程序接入

数据必须通过 JSON Schema 和语义规则校验。MCP 客户端可调用 get_reaction_contract(view="object") 获取当前规范。

[JSON Schema](https://isynth.ichemdata.com/schemas/reaction-object.schema.json) · [语义规则](https://isynth.ichemdata.com/schemas/reaction-semantic-rules.md) · [公开规范接口](https://isynth.ichemdata.com/api/reaction-contract?view=object)
