> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# प्रश्नावली रिपोर्ट: उत्तर JSON स्कीमा

> Didit प्रश्नावली रिपोर्ट संदर्भ: V3 निर्णय रिस्पॉन्स में अनुभाग, आइटम, एलिमेंट प्रकार, शर्तीय दृश्यता और प्रति-आइटम उत्तर।

प्रश्नावली रिपोर्ट में वह संरचित फ़ॉर्म शामिल होता है जो उपयोगकर्ता को दिखाया गया था, किसी भी सशर्त शाखा के माध्यम से उनका चुना गया पथ, और प्रत्येक दृश्यमान आइटम का उत्तर। इसे प्रति नोड लौटाया जाता है, इसलिए मल्टी-इंस्टेंस वर्कफ़्लो (उदाहरण के लिए, प्रति UBO एक प्रश्नावली) में प्रत्येक आवृत्ति के लिए एक प्रविष्टि होती है।

![संरचित उत्तरों, अनुभागों और एलिमेंट प्रकारों को दर्शाने वाली Didit KYC प्रश्नावली रिपोर्ट](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/questionnaire-report.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=9e483a61e829c6b94dd2dc7592a2c59b)

## विवरण

प्रत्येक प्रश्नावली रिस्पॉन्स निम्नलिखित का विवरण देता है:

* **प्रश्नावली संस्करण** जो उपयोगकर्ता ने देखा (शीर्षक, विवरण, भाषाएं, संस्करण मेटाडेटा, अनुभाग)।
* फ़ॉर्म के ग्राफ़ के माध्यम से उपयोगकर्ता द्वारा वास्तव में लिए गए पथ के लिए **दृश्यमान आइटम** — सशर्त तर्क द्वारा छिपाए गए आइटम रिस्पॉन्स से हटा दिए जाते हैं।
* प्रत्येक दृश्यमान इंटरैक्टिव आइटम के लिए **उत्तर**, उस संरचना में जो इसके `element_type` से मेल खाती है।
* संपूर्ण रिस्पॉन्स के लिए एक एकल **स्थिति**।

लेआउट एलिमेंट का उत्तर देने के बजाय उन्हें पुनर्गठित किया जाता है: प्रत्येक `SECTION_HEADER` एक अनुभाग सीमा बन जाता है (इसका शीर्षक और विवरण अनुभाग का `title`/`description` बन जाता है), जबकि `HEADING`, `PARAGRAPH`, और `SEPARATOR` बिना किसी `answer` कुंजी के `items[]` में रहते हैं ताकि रिपोर्ट वही दृश्य संरचना बनाए रखे जो उपयोगकर्ता ने देखी थी।

## यह कहाँ दिखाई देता है

जब भी कोई प्रश्नावली सुविधा चलती है, तो प्रश्नावली रिपोर्ट KYC और KYB दोनों सत्रों के लिए `GET /v3/session/{sessionId}/decision/` में बहुवचन ऐरे **`questionnaire_responses[]`** के रूप में दिखाई देती है। जब तक कम से कम एक प्रश्नावली इंस्टेंस शुरू नहीं हो जाता, तब तक यह फ़ील्ड `null` रहता है। प्रत्येक प्रविष्टि में एक `node_id` होता है ताकि मल्टी-इंस्टेंस वर्कफ़्लो यह स्पष्ट कर सकें कि इसे किस ग्राफ़ चरण ने उत्पन्न किया है।

```text theme={null}
GET /v3/session/{sessionId}/decision/
  ──▶ { "questionnaire_responses": [ { node_id, questionnaire_id, title, status, sections, … }, … ] }
```

## आइटम संरचना

प्रामाणिक स्कीमा के लिए [डेटा मॉडल संदर्भ में प्रश्नावली रिस्पॉन्स](https://docs.didit.me/hi/reference/data-models.md#प्रश्नावली-प्रतिक्रिया) देखें।

```typescript theme={null}
interface QuestionnaireResponse {
  questionnaire_id: string;          // UUID of the questionnaire version that was answered
  title: string;                     // Questionnaire name, as set in the Console
  description: string | null;
  languages: string[];               // Supported language codes
  default_language: string;          // Default language code
  is_active: boolean;
  is_simple_questionnaire: boolean;  // true = flat list, false = branching graph
  questionnaire_group_id: string;    // UUID shared by all versions of the same questionnaire
  version: number;                   // Version number within the group
  published_at: string | null;       // ISO 8601 — when this version was published
  status: "Approved" | "In Review" | "Not Finished";
  sections: Array<{
    title: string | null;            // From the SECTION_HEADER that opens the section
    description: string | null;
    items: QuestionnaireItem[];
  }>;
  node_id: string | null;            // Workflow graph node that ran this questionnaire
}

interface QuestionnaireItem {
  uuid: string;                      // Form element UUID
  value: string;                     // Stable node id of the element within the questionnaire graph
  element_type:
    | "SHORT_TEXT" | "LONG_TEXT"
    | "DROPDOWN" | "SINGLE_CHOICE" | "MULTIPLE_CHOICE"
    | "NUMBER" | "EMAIL" | "PHONE" | "ADDRESS" | "COUNTRY"
    | "DATE_PICKER" | "TIME"
    | "CONSENT"
    | "FILE_UPLOAD" | "IMAGE"
    | "REPEATABLE_GROUP"
    | "HEADING" | "PARAGRAPH" | "SEPARATOR";   // layout-only — no answer key
  is_required: boolean;
  title: string | null;              // Localized
  description: string | null;        // Localized help text, or null when none is set
  placeholder: string | null;        // Localized
  choices: Array<{                   // DROPDOWN / SINGLE_CHOICE / MULTIPLE_CHOICE
    label: string;                   // Localized
    value: string;                   // Stable across languages
    requires_text_input?: boolean;   // Selecting this option triggers a free-text follow-up
  }> | null;
  max_files: number | null;          // FILE_UPLOAD / IMAGE upload cap (1–5)
  required_if: {                     // Conditional requirement rule, or null
    rules: Array<{ field: string; operator: string; value?: unknown }>;
    logic: "and" | "or";
  } | null;
  repeatable_config: {               // REPEATABLE_GROUP only, or null
    min_items?: number;
    max_items?: number;
    item_label?: string;             // Localized
    fields: Array<object>;           // Sub-field definitions (value, element_type, title, …)
  } | null;
  answer?: Answer | null;            // Omitted on HEADING / PARAGRAPH / SEPARATOR; null when unanswered
}
```

`SECTION_HEADER` एलिमेंट कभी भी `items[]` में दिखाई नहीं देते — वे एक नया अनुभाग खोलते हैं और उसका `title` और `description` प्रदान करते हैं।

### एलिमेंट प्रकार

| एलिमेंट प्रकार | उत्तर संरचना | नोट्स |
| - | - | - |
| `SHORT_TEXT`, `LONG_TEXT` | `{ value: string }` | फ्री टेक्स्ट। |
| `EMAIL`, `DATE_PICKER`, `TIME` | `{ value: string }` | टाइप किए गए टेक्स्ट वेरिएंट। |
| `NUMBER` | `{ value: number }` | JSON संख्या — संख्यात्मक के रूप में सर्वर-साइड सत्यापित। |
| `COUNTRY` | `{ value: string }` | ISO 3166-1 alpha-3 कोड (उदा. `"ESP"`), सर्वर-साइड सत्यापित। |
| `PHONE` | `{ value: { countryCode, callingCode, number } }` | संरचित फ़ोन ऑब्जेक्ट। |
| `ADDRESS` | `{ value: { street, streetExtraInfo, city, state, postalCode, country } }` | संरचित पता ऑब्जेक्ट। |
| `DROPDOWN`, `SINGLE_CHOICE` | `{ value: string, text?: string }` | `value` विकल्प मान है; `text` तब भरा जाता है जब चुने गए विकल्प में `requires_text_input: true` होता है। |
| `MULTIPLE_CHOICE` | `{ value: string[], text?: string }` | विकल्प मानों का ऐरे। |
| `CONSENT` | `{ value: boolean }` | JSON बूलियन। |
| `FILE_UPLOAD`, `IMAGE` | `{ files: string[] }` | प्रत्येक प्रविष्टि एक प्री-साइन्ड URL है। |
| `REPEATABLE_GROUP` | `{ items: Array<{ [fieldValue]: Answer }> }` | प्रति पुनरावृत्ति एक ऑब्जेक्ट, जो प्रत्येक उप-फ़ील्ड के `value` द्वारा उसके अपने उत्तर ऑब्जेक्ट के साथ कुंजीबद्ध होता है। |
| `HEADING`, `PARAGRAPH`, `SEPARATOR` | *(कोई `answer` कुंजी नहीं)* | शुद्ध लेआउट — संरचना के लिए `items[]` में रखा गया। |

एक दृश्यमान इंटरैक्टिव आइटम जिसका उपयोगकर्ता ने कभी उत्तर नहीं दिया, वह `"answer": null` के साथ लौटाया जाता है।

### सशर्त दृश्यता

जब कोई प्रश्नावली एक ग्राफ़ (सशर्त तर्क) को परिभाषित करती है, तो केवल वही आइटम शामिल होते हैं जो उपयोगकर्ता द्वारा वास्तव में लिए गए पथ पर होते हैं। जिस शाखा का उपयोगकर्ता ने पालन नहीं किया, उसके द्वारा छिपाया गया आइटम `sections[].items` में दिखाई **नहीं** देता — भले ही वह टेम्पलेट में मौजूद हो। जिन अनुभागों में कोई दृश्यमान आइटम नहीं बचता, उन्हें पूरी तरह से हटा दिया जाता है।

## स्थिति मान

रिस्पॉन्स-स्तरीय `status` तीन मानों में से एक होता है। आंतरिक रूप से, प्लेटफ़ॉर्म-व्यापी प्राथमिकता Declined > In Review > Approved का उपयोग करके बेस स्थिति (`Approved`, या `In Review` जब वर्कफ़्लो मैन्युअल समीक्षा के लिए बाध्य करता है) को किसी भी मेल खाने वाले कस्टम स्थिति नियमों के साथ संयोजित किया जाता है; फिर प्रश्नावली-स्तरीय `Declined` परिणाम को `In Review` में मैप किया जाता है ताकि ऑपरेटर समीक्षा के दौरान अंतिम निपटान को संभाल सकें।

| स्थिति | अर्थ |
| - | - |
| `Not Finished` | उपयोगकर्ता ने अभी तक प्रश्नावली सबमिट नहीं की है। |
| `In Review` | सबमिट किया गया और मैन्युअल समीक्षा की प्रतीक्षा में है (वर्कफ़्लो मैन्युअल समीक्षा के लिए बाध्य करता है, या किसी स्थिति नियम ने रिस्पॉन्स को एस्केलेट किया है)। |
| `Approved` | सबमिट किया गया और स्वीकृत। |

## चेतावनियाँ

प्रश्नावलियाँ एक एकल चेतावनी कोड जारी करती हैं, जो तब उत्पन्न होता है जब प्रश्नावली नोड पर कॉन्फ़िगर किया गया एक **कस्टम स्थिति नियम** किसी उत्तर से मेल खाता है:

| टैग | विवरण |
| - | - |
| `CUSTOM_STATUS_RULE_TRIGGERED` | एक वर्कफ़्लो स्थिति नियम ने प्रश्नावली उत्तर का मूल्यांकन किया और सुविधा स्थिति को बदल दिया (या पुष्टि की)। |

चेतावनी का `additional_data`, नियम द्वारा परिभाषित किए जाने पर `field`, `operator`, `rule_value`, `actual_value`, `target_status`, और `score` ले जाता है। इसका `log_type` नियम की लक्षित स्थिति का अनुसरण करता है: Declined के लिए `error`, In Review के लिए `warning`, अन्यथा `information`।

अन्य सुविधाओं के विपरीत, प्रश्नावली प्रविष्टि में `warnings[]` ऐरे एम्बेड नहीं होता है — ट्रिगर किए गए नियम के लॉग सत्र पर `feature: "QUESTIONNAIRE"` के तहत रिकॉर्ड किए जाते हैं और Console समीक्षा स्क्रीन में सामने आते हैं (यह भी देखें [व्यवसाय सत्यापन चेतावनियों की सूची](https://docs.didit.me/hi/business-verification/warnings.md#प्रश्नावली); वही कोड KYC सत्रों पर भी लागू होता है)।

## उदाहरण — धन का स्रोत प्रश्नावली

```json theme={null}
{
  "questionnaire_responses": [
    {
      "questionnaire_id": "9f7485e0-b00b-4d56-9d3e-7859b68d1213",
      "title": "Source of Funds",
      "description": "Reply to this questionnaire to help us understand the source of funds.",
      "languages": ["en"],
      "default_language": "en",
      "is_active": true,
      "is_simple_questionnaire": true,
      "questionnaire_group_id": "2b6a9d40-13a8-4b1e-9a6c-3f1d2e4b5a60",
      "version": 1,
      "published_at": "2025-11-02T09:14:55.000000Z",
      "status": "Approved",
      "sections": [
        {
          "title": null,
          "description": null,
          "items": [
            {
              "uuid": "618636d9-7d5c-41ce-b8d0-1ab2a4be20db",
              "value": "question_1",
              "element_type": "DROPDOWN",
              "is_required": true,
              "title": "What is your primary source of funds?",
              "description": null,
              "placeholder": null,
              "choices": [
                { "label": "Salary", "value": "salary" },
                { "label": "Business Income", "value": "business_income" },
                { "label": "Savings", "value": "savings" },
                { "label": "Investments", "value": "investments" },
                { "label": "Inheritance/Gift", "value": "inheritance_gift" },
                { "label": "Other", "value": "other", "requires_text_input": true }
              ],
              "max_files": 1,
              "required_if": null,
              "repeatable_config": null,
              "answer": { "value": "salary" }
            },
            {
              "uuid": "2d16b527-72be-42e0-8e96-b164b818386c",
              "value": "question_2",
              "element_type": "LONG_TEXT",
              "is_required": true,
              "title": "Provide details of the primary source.",
              "description": null,
              "placeholder": null,
              "choices": null,
              "max_files": 1,
              "required_if": null,
              "repeatable_config": null,
              "answer": { "value": "Software engineer at Acme Ltd since 2018." }
            },
            {
              "uuid": "1bf8a2a3-14ee-48a8-bb3d-175481aae4aa",
              "value": "question_3",
              "element_type": "SINGLE_CHOICE",
              "is_required": true,
              "title": "Will any funds originate from third parties?",
              "description": null,
              "placeholder": null,
              "choices": [
                { "label": "Yes", "value": "yes", "requires_text_input": true },
                { "label": "No", "value": "no" }
              ],
              "max_files": 1,
              "required_if": null,
              "repeatable_config": null,
              "answer": { "value": "yes", "text": "One-off gift from parents, EUR 8,000." }
            },
            {
              "uuid": "a90a073d-e098-404c-bbce-5130d8b12a13",
              "value": "question_4",
              "element_type": "FILE_UPLOAD",
              "is_required": true,
              "title": "Upload a proof of funds document",
              "description": null,
              "placeholder": null,
              "choices": null,
              "max_files": 3,
              "required_if": null,
              "repeatable_config": null,
              "answer": {
                "files": [
                  "https://<media-host>/.../payslip-jul.pdf",
                  "https://<media-host>/.../payslip-aug.pdf"
                ]
              }
            }
          ]
        }
      ],
      "node_id": "feature_questionnaire"
    }
  ]
}
```

## उदाहरण — पूरा नहीं हुआ

```json theme={null}
{
  "questionnaire_responses": [
    {
      "questionnaire_id": "9f7485e0-b00b-4d56-9d3e-7859b68d1213",
      "title": "Source of Funds",
      "description": "Reply to this questionnaire to help us understand the source of funds.",
      "languages": ["en"],
      "default_language": "en",
      "is_active": true,
      "is_simple_questionnaire": true,
      "questionnaire_group_id": "2b6a9d40-13a8-4b1e-9a6c-3f1d2e4b5a60",
      "version": 1,
      "published_at": "2025-11-02T09:14:55.000000Z",
      "status": "Not Finished",
      "sections": [
        {
          "title": null,
          "description": null,
          "items": [
            {
              "uuid": "618636d9-7d5c-41ce-b8d0-1ab2a4be20db",
              "value": "question_1",
              "element_type": "DROPDOWN",
              "is_required": true,
              "title": "What is your primary source of funds?",
              "description": null,
              "placeholder": null,
              "choices": [
                { "label": "Salary", "value": "salary" },
                { "label": "Other", "value": "other", "requires_text_input": true }
              ],
              "max_files": 1,
              "required_if": null,
              "repeatable_config": null,
              "answer": null
            }
          ]
        }
      ],
      "node_id": "feature_questionnaire"
    }
  ]
}
```

जब उपयोगकर्ता प्रश्नावली चरण तक पहुँच गया है लेकिन उसने अभी तक उत्तर सबमिट नहीं किए हैं, तो रिस्पॉन्स `status: "Not Finished"` के साथ लौटाया जाता है और प्रत्येक दृश्यमान आइटम पर `"answer": null` होता है। जो सत्र कभी इस चरण तक नहीं पहुँचा, वह कोई प्रविष्टि उत्पन्न नहीं करता — जब कोई इंस्टेंस मौजूद नहीं होता है तो `questionnaire_responses` `null` रहता है।

## नोट्स

* **फ़ाइल URLs की समय-सीमा समाप्त हो जाती है।** `answer.files` की प्रविष्टियाँ प्री-साइन्ड URLs हैं (डिफ़ॉल्ट रूप से 4 घंटे की वैधता)। जब आपको नए URLs की आवश्यकता हो, तो निर्णय endpoint को पुनः फ़ेच करें।
* **स्थानीयकरण।** जब प्रश्नावली इसका समर्थन करती है, तो आइटम का `title`, `description`, `placeholder`, विकल्प का `label`, और सेक्शन का `title`/`description` अंग्रेज़ी में लौटाए जाते हैं, अन्यथा प्रश्नावली की `default_language` में। विकल्प का `value` सभी भाषाओं में स्थिर रहता है ताकि आप इसके आधार पर सुरक्षित रूप से अपना व्यवसाय लॉजिक तय कर सकें।
* **आइटम `description` एलिमेंट का हेल्प टेक्स्ट होता है।** प्रश्नों सहित कोई भी आइटम इसे रख सकता है, और जब कोई सेट न हो तो यह `null` होता है। `SEPARATOR` में यह कभी नहीं होता है।

## संबंधित

> [card] [प्रश्नावलियों का अवलोकन](https://docs.didit.me/hi/core-technology/questionnaires/overview.md)
>
> वर्कफ़्लो में प्रश्नावलियों को कैसे बनाएँ, उनका वर्ज़न कैसे प्रबंधित करें और उन्हें कैसे जोड़ें।

> [card] [डेटा मॉडल — प्रश्नावली रिस्पॉन्स](https://docs.didit.me/hi/reference/data-models.md#प्रश्नावली-प्रतिक्रिया)
>
> इस ऑब्जेक्ट के लिए प्रामाणिक फ़ील्ड-दर-फ़ील्ड स्कीमा।

> [card] [सत्र प्राप्त करें](https://docs.didit.me/hi/sessions-api/retrieve-session.md)
>
> V3 निर्णय payload के लिए endpoint संदर्भ।


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.