{
  "info": {
    "name": "Text Imports and Drafts — Exchange 4.3",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Set token and textImportText. Use direct import OR draft workflow for an operation. Keep the idempotency key and original expectedVersion on retries. External references must identify actual distinct source operations. Examples validate only."
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "http://localhost:3000"
    },
    {
      "key": "token",
      "value": ""
    },
    {
      "key": "textImportText",
      "value": "مشتری: C001\nدریافتی: 1000 USD\nپرداختی: 910 EUR\nکارمزد: 0.5\nنرخ یورویی دریافتی: 0.92"
    },
    {
      "key": "textPreviewId",
      "value": ""
    },
    {
      "key": "textImportKey",
      "value": ""
    },
    {
      "key": "importId",
      "value": ""
    },
    {
      "key": "draftId",
      "value": ""
    },
    {
      "key": "draftVersion",
      "value": ""
    },
    {
      "key": "draftPreviewId",
      "value": ""
    },
    {
      "key": "draftExpectedVersion",
      "value": ""
    },
    {
      "key": "draftCommitKey",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Examples — validation only",
      "item": [
        {
          "name": "trade",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"مشتری: C001\\nدریافتی: 1000 USD\\nپرداختی: 910 EUR\\nکارمزد: 0.5\\nنرخ یورویی دریافتی: 0.92\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "settled",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"نوع: معامله\\nمشتری: C001\\nدریافتی: ۱٬۰۰۰ USD\\nپرداختی: ۹۱۰ EUR\\nکارمزد: ۰٫۵\\nنرخ یورویی دریافتی: ۰٫۹۲\\nتسویه: کامل\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "partial",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"نوع: معامله\\nمشتری: C001\\nدریافتی: 1000 USD\\nپرداختی: 910 EUR\\nنرخ یورویی دریافتی: 0.92\\nتسویه: جزئی\\nدریافت واقعی: 500 USD\\nپرداخت واقعی: 200 EUR\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "byRate",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"نوع: معامله\\nمشتری: C001\\nدریافتی: 1000 USD\\nنرخ توافقی: 0.91\\nارز پرداختی: EUR\\nنرخ یورویی دریافتی: 0.92\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "receive",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"نوع: دریافت\\nمشتری: C001\\nمبلغ: 100 USD\\nنرخ یورویی: 0.92\\nتخصیص: AUTO\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "pay",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"نوع: پرداخت\\nمشتری: C001\\nمبلغ: 90 EUR\\nتخصیص: NONE\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "batch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"مشتری: C001\\nدریافتی: 1000 USD\\nپرداختی: 910 EUR\\nکارمزد: 0.5\\nنرخ یورویی دریافتی: 0.92\\n---\\nنوع: دریافت\\nمشتری: C001\\nمبلغ: 100 USD\\nنرخ یورویی: 0.92\\nتخصیص: AUTO\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "linked",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"شناسه رکورد: T1\\nمشتری: C001\\nدریافتی: 1000 USD\\nپرداختی: 910 EUR\\nکارمزد: 0.5\\nنرخ یورویی دریافتی: 0.92\\n---\\nنوع: دریافت\\nمشتری: C001\\nمبلغ: 100 USD\\nنرخ یورویی: 0.92\\nتخصیص: AUTO\\nمعامله: @T1\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        },
        {
          "name": "referenced",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/validate",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"مرجع خارجی: BANK-2026-001\\nنوع: دریافت\\nمشتری: C001\\nمبلغ: 100 USD\\nنرخ یورویی: 0.92\\nتخصیص: AUTO\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": []
        }
      ]
    },
    {
      "name": "Preview and confirm",
      "item": [
        {
          "name": "1. Preview selected text",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/preview",
            "body": {
              "mode": "raw",
              "raw": "{{textImportPreviewBody}}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.variables.set('textImportPreviewBody', JSON.stringify({text:pm.collectionVariables.get('textImportText')}));"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(pm.response.code===200)pm.collectionVariables.set('textPreviewId',pm.response.json().data.previewId);"
                ]
              }
            }
          ]
        },
        {
          "name": "2. Commit / retry SAME operation",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{textImportKey}}"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports",
            "body": {
              "mode": "raw",
              "raw": "{{textImportCommitBody}}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(!pm.collectionVariables.get('textImportKey'))pm.collectionVariables.set('textImportKey',pm.variables.replaceIn('{{$guid}}'));",
                  "const b={text:pm.collectionVariables.get('textImportText')};const p=pm.collectionVariables.get('textPreviewId');if(p)b.previewId=p;pm.variables.set('textImportCommitBody',JSON.stringify(b));"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(pm.response.code===201)pm.collectionVariables.set('importId',pm.response.json().data.importId);"
                ]
              }
            }
          ]
        },
        {
          "name": "3. Read result and live document states",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": "{{baseUrl}}/api/text-imports/{{importId}}"
          }
        }
      ]
    },
    {
      "name": "Save, edit and confirm a draft",
      "item": [
        {
          "name": "1. Save new draft",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-drafts",
            "body": {
              "mode": "raw",
              "raw": "{{draftCreateBody}}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.variables.set('draftCreateBody',JSON.stringify({title:'پیش‌نویس آزمایشی',text:pm.collectionVariables.get('textImportText')}));"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(pm.response.code===200){const d=pm.response.json().data;pm.collectionVariables.set('draftId',d.id);pm.collectionVariables.set('draftVersion',d.version);pm.collectionVariables.unset('draftCommitKey');pm.collectionVariables.unset('draftPreviewId');}"
                ]
              }
            }
          ]
        },
        {
          "name": "2. Save edits (optional)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-drafts/{{draftId}}",
            "body": {
              "mode": "raw",
              "raw": "{{draftEditBody}}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.variables.set('draftEditBody',JSON.stringify({expectedVersion:Number(pm.collectionVariables.get('draftVersion')),text:pm.collectionVariables.get('textImportText')}));"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(pm.response.code===200){pm.collectionVariables.set('draftVersion',pm.response.json().data.version);pm.collectionVariables.unset('draftPreviewId');}"
                ]
              }
            }
          ]
        },
        {
          "name": "3. Preview saved version",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/api/text-drafts/{{draftId}}/preview",
            "body": {
              "mode": "raw",
              "raw": "{{draftPreviewBody}}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.variables.set('draftPreviewBody',JSON.stringify({expectedVersion:Number(pm.collectionVariables.get('draftVersion'))}));"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(pm.response.code===200){const d=pm.response.json().data;pm.collectionVariables.set('draftPreviewId',d.previewId);pm.collectionVariables.set('draftExpectedVersion',d.draft.version);}"
                ]
              }
            }
          ]
        },
        {
          "name": "4. Confirm / retry SAME draft version",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{draftCommitKey}}"
              }
            ],
            "url": "{{baseUrl}}/api/text-drafts/{{draftId}}/commit",
            "body": {
              "mode": "raw",
              "raw": "{{draftCommitBody}}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(!pm.collectionVariables.get('draftCommitKey'))pm.collectionVariables.set('draftCommitKey',pm.variables.replaceIn('{{$guid}}'));",
                  "pm.variables.set('draftCommitBody',JSON.stringify({expectedVersion:Number(pm.collectionVariables.get('draftExpectedVersion')),previewId:pm.collectionVariables.get('draftPreviewId')}));"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if(pm.response.code===201)pm.collectionVariables.set('importId',pm.response.json().data.result.importId);"
                ]
              }
            }
          ]
        }
      ]
    }
  ]
}