{
  "info": {
    "name": "VRS RFID API v1",
    "description": "Тээврийн хэрэгслийн RFID тагийн лавлагааны API (зөвхөн унших).\n\nАшиглахын өмнө `VRS-RFID-API.postman_environment.json` орчныг импортлоод `base_url`, `token` хоёрыг бөглөнө үү.\n\nДэлгэрэнгүй заавар: docs/API.md",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://rfid.mrt.gov.mn",
      "type": "string"
    },
    {
      "key": "vehicle_id",
      "value": "<ТХ-ийн ID>",
      "type": "string"
    },
    {
      "key": "plate_no",
      "value": "<УЛСЫН ДУГААР>",
      "type": "string"
    },
    {
      "key": "tid",
      "value": "<TID КОД>",
      "type": "string"
    }
  ],
  "event": [
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Бүх хүсэлтэд үйлчлэх ерөнхий шалгалт",
          "pm.test('JSON хариу ирсэн', function () {",
          "    pm.response.to.be.json;",
          "});",
          "",
          "pm.test('X-Request-Id толгой ирсэн', function () {",
          "    pm.expect(pm.response.headers.has('X-Request-Id')).to.be.true;",
          "});",
          "",
          "const body = pm.response.json();",
          "pm.test('success талбартай', function () {",
          "    pm.expect(body).to.have.property('success');",
          "});",
          "",
          "if (body.success === false) {",
          "    pm.test('алдаанд error.code байна', function () {",
          "        pm.expect(body.error).to.have.property('code');",
          "    });",
          "    console.log('Алдаа:', body.error.code, '| request_id:', body.meta && body.meta.request_id);",
          "}"
        ]
      }
    }
  ],
  "item": [
    {
      "name": "1. Ping — токен шалгах",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/ping",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "ping"
          ]
        },
        "description": "Токен зөв эсэх, ямар эрхтэй, минутын хязгаар хэд болохыг харуулна. Интеграци эхлүүлэхдээ эхлээд үүнийг дуудна."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('200 буцсан', () => pm.response.to.have.status(200));",
              "pm.test('клиентийн нэр ирсэн', function () {",
              "    pm.expect(pm.response.json().data).to.have.property('client');",
              "});"
            ]
          }
        }
      ],
      "response": [
        {
          "name": "200 OK",
          "originalRequest": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ping",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ping"
              ]
            }
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "body": "{\n    \"success\": true,\n    \"data\": {\n        \"client\": \"****\",\n        \"name\": \"****\",\n        \"abilities\": [\"rfid:read\"],\n        \"rate_limit\": 60,\n        \"expires_at\": null\n    },\n    \"meta\": {\n        \"request_id\": \"****\",\n        \"queried_at\": \"****\"\n    }\n}"
        }
      ]
    },
    {
      "name": "2. Таг лавлах — vehicle_id-гаар",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/rfid-tags?vehicle_id={{vehicle_id}}",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "rfid-tags"
          ],
          "query": [
            {
              "key": "vehicle_id",
              "value": "{{vehicle_id}}",
              "description": "VRS дэх ТХ-ийн дотоод ID"
            }
          ]
        },
        "description": "Тээврийн хэрэгслийн дотоод ID-гаар тагийн мэдээлэл лавлана."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('200 буцсан', () => pm.response.to.have.status(200));",
              "const d = pm.response.json().data;",
              "pm.test('tags массив ирсэн', () => pm.expect(d.tags).to.be.an('array'));",
              "pm.test('tag_count нь tags-ийн уртай тэнцүү', () => pm.expect(d.tag_count).to.eql(d.tags.length));",
              "",
              "// Дараагийн хүсэлтэд ашиглахаар plate_no-г хадгална",
              "if (d.plate_no) { pm.collectionVariables.set('plate_no', d.plate_no); }"
            ]
          }
        }
      ],
      "response": [
        {
          "name": "200 OK — нэг тагтай",
          "originalRequest": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/rfid-tags?vehicle_id=<ТХ-ийн ID>",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "rfid-tags"
              ],
              "query": [
                {
                  "key": "vehicle_id",
                  "value": "<ТХ-ийн ID>"
                }
              ]
            }
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "body": "{\n    \"success\": true,\n    \"data\": {\n        \"vehicle_id\": <ТХ-ийн ID>,\n        \"plate_no\": \"<УЛСЫН ДУГААР>\",\n        \"tag_count\": 1,\n        \"has_active_tag\": false,\n        \"tags\": [\n            {\n                \"tag_id\": 0,\n                \"serial_number\": \"****\",\n                \"tid\": \"****\",\n                \"epc\": \"****D4CAC986EB9\",\n                \"qrcode\": \"****\",\n                \"is_active\": false,\n                \"is_inconsistent\": false,\n                \"status\": 1,\n                \"created_date\": \"****\",\n                \"updated_date\": null\n            }\n        ]\n    },\n    \"meta\": {\n        \"request_id\": \"****\",\n        \"queried_at\": \"****\",\n        \"pii\": false\n    }\n}"
        },
        {
          "name": "200 OK — таг наагаагүй ТХ",
          "originalRequest": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/rfid-tags?vehicle_id=87",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "rfid-tags"
              ],
              "query": [
                {
                  "key": "vehicle_id",
                  "value": "87"
                }
              ]
            }
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "body": "{\n    \"success\": true,\n    \"data\": {\n        \"vehicle_id\": 0,\n        \"plate_no\": \"****\",\n        \"tag_count\": 0,\n        \"has_active_tag\": false,\n        \"tags\": []\n    },\n    \"meta\": {\n        \"request_id\": \"…\",\n        \"queried_at\": \"****\",\n        \"pii\": false\n    }\n}"
        }
      ]
    },
    {
      "name": "3. Таг лавлах — plate_no-гоор",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/rfid-tags?plate_no={{plate_no}}",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "rfid-tags"
          ],
          "query": [
            {
              "key": "plate_no",
              "value": "{{plate_no}}",
              "description": "Улсын дугаар. Хоосон зай/зураас, том-жижиг үсэг хамаарахгүй"
            }
          ]
        },
        "description": "Улсын дугаараар лавлана. Postman кирилл үсгийг автоматаар URL-encode хийнэ.\n\nХэрэв өөрийн кодоос дуудаж байгаа бол encodeURIComponent() ашиглана."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('200 буцсан', () => pm.response.to.have.status(200));",
              "pm.test('vehicle_id ирсэн', () => pm.expect(pm.response.json().data.vehicle_id).to.be.a('number'));"
            ]
          }
        }
      ],
      "response": []
    },
    {
      "name": "4. Тагаас ТХ олох — TID-гаар",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/vehicle-by-tag?tid={{tid}}",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "vehicle-by-tag"
          ],
          "query": [
            {
              "key": "tid",
              "value": "{{tid}}"
            }
          ]
        },
        "description": "Тагийн TID кодоор тээврийн хэрэгслийн ерөнхий мэдээлэл авна.\n\nvehicle:read эрх шаардана. inspection:read эрхтэй бол оношилгооны блок нэмж ирнэ."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('200 буцсан', () => pm.response.to.have.status(200));",
              "const d = pm.response.json().data;",
              "pm.test('vehicle блок ирсэн', () => pm.expect(d.vehicle).to.have.property('plate_no'));",
              "pm.test('tag блок ирсэн', () => pm.expect(d.tag).to.have.property('tid'));",
              "",
              "const meta = pm.response.json().meta;",
              "if (meta.inspection) {",
              "    pm.test('оношилгооны блок ирсэн', () => pm.expect(d).to.have.property('inspection'));",
              "} else {",
              "    console.log('inspection:read эрхгүй тул оношилгоо ирээгүй');",
              "}"
            ]
          }
        }
      ],
      "response": []
    },
    {
      "name": "5. Тагаас ТХ олох — сериал дугаараар",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/vehicle-by-tag?serial_number=<СЕРИАЛ ДУГААР>",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "vehicle-by-tag"
          ],
          "query": [
            {
              "key": "serial_number",
              "value": "<СЕРИАЛ ДУГААР>"
            }
          ]
        },
        "description": "Нэг л талбараар хайна. tid, epc, qrcode, serial_number, tag_id-ийн алийг нь ч ашиглаж болно."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('200 эсвэл 404', () => pm.expect([200, 404]).to.include(pm.response.code));",
              "if (pm.response.code === 200) {",
              "    pm.test('matched_by зөв', () => pm.expect(pm.response.json().meta.matched_by).to.eql('serial_number'));",
              "}"
            ]
          }
        }
      ],
      "response": []
    },
    {
      "name": "6. Алдаа — хоёр талбар зэрэг (422)",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/vehicle-by-tag?tid={{tid}}&epc=ABC",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "vehicle-by-tag"
          ],
          "query": [
            {
              "key": "tid",
              "value": "{{tid}}"
            },
            {
              "key": "epc",
              "value": "ABC"
            }
          ]
        },
        "description": "Зөвхөн нэг талбараар хайх ёстойг харуулна."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('422 буцсан', () => pm.response.to.have.status(422));",
              "pm.test('VALIDATION_ERROR', () => pm.expect(pm.response.json().error.code).to.eql('VALIDATION_ERROR'));"
            ]
          }
        }
      ],
      "response": []
    },
    {
      "name": "7. Алдаа — параметргүй (422)",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/rfid-tags",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "rfid-tags"
          ]
        },
        "description": "vehicle_id эсвэл plate_no-гийн аль нэгийг заавал дамжуулна."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('422 буцсан', () => pm.response.to.have.status(422));",
              "pm.test('VALIDATION_ERROR', () => pm.expect(pm.response.json().error.code).to.eql('VALIDATION_ERROR'));"
            ]
          }
        }
      ],
      "response": []
    },
    {
      "name": "8. Алдаа — олдоогүй ТХ (404)",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/rfid-tags?vehicle_id=999999999",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "rfid-tags"
          ],
          "query": [
            {
              "key": "vehicle_id",
              "value": "999999999"
            }
          ]
        }
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('404 буцсан', () => pm.response.to.have.status(404));",
              "pm.test('VEHICLE_NOT_FOUND', () => pm.expect(pm.response.json().error.code).to.eql('VEHICLE_NOT_FOUND'));"
            ]
          }
        }
      ],
      "response": []
    },
    {
      "name": "9. Алдаа — токенгүй (401)",
      "request": {
        "auth": {
          "type": "noauth"
        },
        "method": "GET",
        "header": [
          {
            "key": "Accept",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{base_url}}/api/v1/rfid-tags?vehicle_id={{vehicle_id}}",
          "host": [
            "{{base_url}}"
          ],
          "path": [
            "api",
            "v1",
            "rfid-tags"
          ],
          "query": [
            {
              "key": "vehicle_id",
              "value": "{{vehicle_id}}"
            }
          ]
        },
        "description": "Authorization толгойгүйгээр дуудахад ямар хариу ирэхийг харуулна."
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('401 буцсан', () => pm.response.to.have.status(401));",
              "pm.test('UNAUTHENTICATED', () => pm.expect(pm.response.json().error.code).to.eql('UNAUTHENTICATED'));"
            ]
          }
        }
      ],
      "response": []
    }
  ],
  "description": "Тээврийн хэрэгслийн RFID тагийн лавлагааны API (зөвхөн унших).\n\nОрчныг импортлоод `token`-оо бөглөнө. Хүсэлт доторх `<…>` хаалттай утгуудыг өөрийн жинхэнэ утгаар солино.\n\nДэлгэрэнгүй заавар: /docs"
}
