# CF Approved — Mandatory Document & Details List --- ## CRED-6084 — 2026-03-18 ### Overview Updated the CF Approved mandatory checklist to support both **document uploads** and **application detail updates** as separate, structured requirements. The webhook response was restructured to send `document_requirements` and `update_fields` instead of a flat comma-separated document list. A new DB column `mandatory_details_list` was added to store detail-type requirements separately from document-type requirements. --- ### Database Change **Migration:** `2026_03_18_130911_mandatory_details_list.php` Added a new column to `consumer_application_element`: ``` mandatory_details_list TEXT NULLABLE ``` Previously, everything was stored together in `mandatory_document_list`. After this change: - `mandatory_document_list` — stores only document-type checklist items (e.g. `electricity_bill,pan_card`) - `mandatory_details_list` — stores only detail/field-type checklist items (e.g. `father_name,profession_type`) --- ### CF Approved Dropdown — Full Reference Table | (A) Dropdown Name | (B) Additional Info / Sub-list | (C) M-Connect Upload Document API | (D) Update Application Details API | (E) Webhook Response | |---|---|---|---|---| | Electricity bill | — | `ELECTRICITY_BILL` | — | Upload `ELECTRICITY_BILL` document | | Rent agreement | — | `RENT_AGREEMENT` | — | Upload `RENT_AGREEMENT` document | | Sale Deed *(renamed: Name change)* | — | `SALE_DEED`, `PROPERTY_TAX_INVOICE` | — | Upload **any one** of: `SALE_DEED`, `PROPERTY_TAX_INVOICE` | | CPV | — | — | — | Info: *Field visit is mandatory for this application* | | E-mandate | — | — | — | Info: *E-mandate is mandatory for this application* | | Bank statement *(renamed: Bank statement for applied tenure and applied amount)* | — | `BANK_STATEMENT` | — | Upload last 6 months bank statement under `BANK_STATEMENT` for applied tenure and applied amount | | Current address proof | `Voter_Id`, `APPLICANT_AADHAAR_FRONT`, `APPLICANT_AADHAAR_BACK`, `Electricity_bill`, `Rent_Agreement`, `Bank_statement`, `Passport`, `GAS_BILL`, `UTILITY_BILL_VALIDATION` | Same as column B | — | Upload **any 1** from: `VOTAR_ID_FRONT`, `APPLICANT_AADHAAR_FRONT`, `APPLICANT_AADHAAR_BACK`, `ELECTRICITY_BILL`, `RENT_AGREEMENT`, `BANK_STATEMENT`, `PASSPORT`, `GAS_BILL`, `UTILITY_BILL_VALIDATION` | | Pan card | — | `PAN` | — | Upload `PAN` document | | Aadhar card | — | `APPLICANT_AADHAAR_FRONT`, `APPLICANT_AADHAAR_BACK` | — | Upload both `APPLICANT_AADHAAR_FRONT` and `APPLICANT_AADHAAR_BACK` | | Business Proof *(Shopact, GST Certificate or Udhyog Aadhar)* | `Shop_Act`, `GST_Certificate`, `Udyog_Aadhar_Certificate` | Same as column B | — | Upload **any 1** of: `SHOP_ACT`, `GST_CERTIFICATE`, `UDYOG_AADHAR_CERTIFICATE` | | Income proof *(Salary slip, ITR, Form-16)* | `Bank_statement`, `Salary_Slip`, `ITR`, `Form-16` | Same as column B | — | Upload **any 1** of: `SALARY_SLIP`, `ITR`, `FORM_16` | | Credit approved video *(atta chakki)* | — | — | — | Details pending as per lender requirement | | Details pending as per lender requirement | — | — | `father_name`, `mother_name`, `religion`, `employment_address`, `aadhar_number` | Update the following fields: Father name, Mother Name, Religion, Employment address, Aadhar number | | Owner details to be included as Co-applicant | `CO_APPLICANT_PAN`, `CO_APPLICANT_AADHAAR_FRONT`, `CO_APPLICANT_AADHAAR_BACK` | Same as column B | Co-applicant name, mobile number, email, gender, DOB, relation, father name, aadhar, PAN, address status, address, city, state, pincode, employment status | Webhook shares all co-applicant fields listed in column D + documents from column C | | Quotation *(renamed: solar_quotation / final bill / quotation)* | — | `SOLAR_QUOTATION` | — | Upload `SOLAR_QUOTATION` document | | Co-applicant bureau repayment proof | 1. Statement of account (not bank statement) from where repayment is done, 2. EMI deduction bank statement from where repayment is done | `STATEMENT_OF_ACCOUNT`, `EMI_DEDUCTION_BANK_STATEMENT` | — | Upload **any 1** of: `STATEMENT_OF_ACCOUNT`, `EMI_DEDUCTION_BANK_STATEMENT` | | Personal Discussion | — | — | — | Info: *PD call is mandatory for this application* | | Terrace/Rooftop rights ownership Proof | — | `SALE_DEED`, `PROPERTY_TAX_INVOICE` | — | Upload **any 1**: `Sale_deed`, `property_tax_invoice` | | Additional Terrace/Rooftop rights ownership Proof | — | `Property_ownership_proof` (with geo location) | — | Upload under `Property_ownership_proof` document | | Corrected solar system details | solar financing for, sub-category of solar, power type, inverter, panel name, gross project amount, E-bill amount, service provider, KW, subsidy amount | — | Same as column B | Webhook shares all solar system fields listed in column B | | Corrected employment details | Profession type, Company name, Income | — | Same as column B | Webhook shares: `profession_type`, `company_name`, `income` | | Completed application form | Applicant name, PAN number, Installation Address status, Current Address status, Permanent Address status + full address lines, pincode, state, city for each address type | — | Same as column B | Webhook shares all address fields. When an address type is selected, all sub-fields are included (e.g. `installation_address_line_1`, `installation_address_line_2`, `installation_address_pincode`, `installation_address_state`, `installation_address_city`) | --- ### Webhook — Updated Response Structure **Webhook type:** `Mandatory-Document-Webhook` The webhook payload was changed from a flat list of document strings to a structured object with two keys: #### Before (old format) ```json { "type": "Mandatory-Document-Webhook", "data": { "docs": ["electricity_bill", "pan_card", "bank_statement"] } } ``` #### After (new format) ```json { "type": "Mandatory-Document-Webhook", "data": { "document_requirements": [ { "category": "electricity_bill", "rule": "ALL", "docs": ["ELECTRICITY_BILL"] }, { "category": "current_address_proof", "rule": "ANY_ONE", "docs": [ "VOTAR_ID_FRONT", "VOTAR_ID_BACK", "APPLICANT_AADHAAR_FRONT", "APPLICANT_AADHAAR_BACK", "ELECTRICITY_BILL", "RENT_AGREEMENT", "BANK_STATEMENT", "PASSPORT", "GAS_BILL", "UTILITY_BILL_VALIDATION" ] }, { "category": "co_applicant_bureau_repayment_proof", "rule": "ANY_ONE", "docs": ["STATEMENT_OF_ACCOUNT", "EMI_DEDUCTION_BANK_STATEMENT"] } ], "update_fields": [ { "category": "application_form", "fields": ["applicant_name", "pan_number", "installation_address", "installation_address_city", "installation_address_pincode", "installation_address_state"] }, { "category": "employment_details", "fields": ["profession_type", "company_name", "monthly_income"] }, { "category": "solar_system_details", "fields": ["sub_category_of_solar", "power_type", "inverter", "panel_name", "gross_project_amount", "e_bill_amount", "service_provider", "kw", "subsidy_amount"] }, { "category": "co_applicant_details", "fields": [ "co_applicant_name", "co_applicant_mobile_number", "co_applicant_email", "co_applicant_gender", "co_applicant_dob", "co_applicant_relation", "co_applicant_father_name", "co_applicant_aadhar", "co_applicant_pan", "co_applicant_address_status", "co_applicant_address", "co_applicant_city", "co_applicant_state", "co_applicant_pincode", "co_applicant_employment_status" ] } ] } } ``` **`rule` values:** - `ALL` — all listed documents must be uploaded - `ANY_ONE` — any one of the listed documents is sufficient **`type: INFO` entries** (CPV, E-mandate, Personal Discussion) are sent as informational messages and do not appear in `document_requirements`. --- ### Document Key Mapping (Admin Dropdown → API Document Names) | Admin Key (dropdown value) | API Document Keys | Rule | |---|---|---| | `electricity_bill` | `ELECTRICITY_BILL` | ALL | | `rent_agreement` | `RENT_AGREEMENT` | ALL | | `sale_deed` | `SALE_DEED`, `PROPERTY_TAX_INVOICE` | ANY_ONE | | `pan_card` | `PAN` | ALL | | `bank_statement` | `BANK_STATEMENT` | ALL | | `gas_bill` | `GAS_BILL` | ALL | | `aadhar_card` | `APPLICANT_AADHAAR_FRONT`, `APPLICANT_AADHAAR_BACK` | ALL | | `current_address_proof` | `VOTAR_ID_FRONT`, `VOTAR_ID_BACK`, `APPLICANT_AADHAAR_FRONT`, `APPLICANT_AADHAAR_BACK`, `ELECTRICITY_BILL`, `RENT_AGREEMENT`, `BANK_STATEMENT`, `PASSPORT`, `GAS_BILL`, `UTILITY_BILL_VALIDATION` | ANY_ONE | | `business_proof` | `SHOP_ACT`, `GST_CERTIFICATE`, `UDYOG_AADHAR_CERTIFICATE` | ANY_ONE | | `income_proof` | `SALARY_SLIP`, `ITR`, `FORM_16` | ANY_ONE | | `co_applicant_bureau_repayment_proof` | `STATEMENT_OF_ACCOUNT`, `EMI_DEDUCTION_BANK_STATEMENT` | ANY_ONE | | `owner_details_to_be_included_as_co_applicant` | `CO_APPLICANT_PAN`, `CO_APPLICANT_AADHAAR_FRONT`, `CO_APPLICANT_AADHAAR_BACK` | ALL | | `terrace_rooftop_rights_ownership_proof` | `SALE_DEED`, `PROPERTY_TAX_INVOICE` | ANY_ONE | | `additional_terrace_rooftop_rights_ownership_proof` | `Property_ownership_proof` | ALL | | `proforma` *(renamed: solar_quotation)* | `SOLAR_QUOTATION` | ALL | | `cpv` | — | INFO: Field visit is mandatory | | `emandate` | — | INFO: E-mandate is mandatory | | `personal_discussion` | — | INFO: PD call is mandatory | | `atta_chakki` | — | Excluded from webhook | --- ### Detail Field Mapping (Update Application API) Detail fields are stored in `mandatory_details_list` and grouped by category in the webhook `update_fields` array. | Category | Fields | |---|---| | `application_form` | `applicant_name`, `pan_number`, `installation_address`, `permanent_address`, `current_address`, `installation_address_status`, `current_address_status`, `permanent_address_status` | | `employment_details` | `profession_type`, `company_name`, `income` | | `solar_system_details` | `sub_category_of_solar`, `power_type`, `inverter`, `panel_name`, `gross_project_amount`, `e_bill_amount`, `service_provider`, `kw`, `subsidy_amount` | | `additional_requirement` | `father_name`, `mother_name`, `religion`, `employment_address`, `aadhar_number` | **Address auto-expansion:** When an address field is selected, the webhook automatically includes all its sub-fields: | Address field | Auto-injected sub-fields | |---|---| | `installation_address` | `installation_address_city`, `installation_address_pincode`, `installation_address_state` | | `permanent_address` | `permanent_address_city`, `permanent_address_pincode`, `permanent_address_state` | | `current_address` | `current_address_city`, `current_address_pincode`, `current_address_state`, `current_address_status` | **Note:** `religion` is excluded from webhook payload even though it appears in `additional_requirement`. --- ### Update Application API — Field to DB Column Map | Detail Field | DB Column | Table | |---|---|---| | `applicant_name` | `name` | `consumer_application` | | `pan_number` | `pan_card` | `consumer_application` | | `installation_address` | `installation_address_line_1` | `consumer_application_element` | | `permanent_address` | `permanent_address_line_1` | `consumer_application` | | `current_address` | `current_address_line_1` | `consumer_application` | | `installation_address_status` | `installation_address_status` | `consumer_application_element` | | `current_address_status` | `current_address_status` | `consumer_application` | | `permanent_address_status` | `permanent_address_status` | `consumer_application` | | `profession_type` | `employee_status` | `consumer_application` | | `company_name` | `company_name` | `consumer_application` | | `income` | `monthly_income` | `consumer_application` | | `sub_category_of_solar` | `type_of_customer` | `consumer_application_element` | | `power_type` | `solar_power_type` | `consumer_application_element` | | `inverter` | `inverter` | `consumer_application_element` | | `panel_name` | `panel` | `consumer_application_element` | | `gross_project_amount` | `inverter_gross_project_amount` | `consumer_application_element` | | `e_bill_amount` | `inverter_monthly_power_bill` | `consumer_application_element` | | `service_provider` | `discom_service_provider` | `consumer_application_element` | | `kw` | `inverter_KW_installation` | `consumer_application_element` | | `subsidy_amount` | `inverter_subsidy_amount` | `consumer_application_element` | | `father_name` | `father_name` | `consumer_application_element` | | `mother_name` | `mother_name` | `consumer_application_element` | | `religion` | `applicant_religion` | `consumer_application_element` | | `employment_address` | `work_address_line_1` | `consumer_application` | | `aadhar_number` | `aadhaar_card` | `consumer_application` | --- ### Checklist Completion Logic Changes | Checklist Item | Change | |---|---| | `bank_statement` / `3_month_bank_statement` / `6_month_bank_statement` | All three variants treated equivalently; case-insensitive `stripos` match on `bank_statement` in filename | | `current_address_proof` | Changed from exact file match to checking any acceptable address doc (Voter ID, Aadhaar, Electricity bill, Rent agreement, Bank statement, Passport, Gas bill) | | `income_proof` | `form16` key updated to `FORM_16` | | `terrace_rooftop_rights_ownership_proof` | Added new case; accepts `SALE_DEED` or `PROPERTY_TAX_INVOICE` | | `additional_terrace_rooftop_rights_ownership_proof` | Added new case; accepts `Property_ownership_proof` | | `co_applicant_bureau_repayment_proof` | Key renamed from `co-applicant bureau repayment proof`; now accepts `STATEMENT_OF_ACCOUNT` or `EMI_DEDUCTION_BANK_STATEMENT` | | `owner_details_to_be_included_as_co_applicant` | Was always `false`; now checks for `co_applicant_pan_card`, `co_applicant_aadhar_card`, `co_applicant_aadhar_card_back` in uploaded files | | `atta_chakki` | Added fallback check against `credit_approval_video` in uploaded files | | `additional_ownership_proof` | **Removed** from checklist | --- ### Files Changed | File | Summary | |---|---| | `app/Http/Controllers/Admin/ConsumerApplicationController.php` | Webhook restructure, docMapping, fieldCategories, split mandatory_document_list / mandatory_details_list, checklist logic fixes | | `app/Http/Controllers/ApiController.php` | Removed duplicate DB update of `mandatory_document_list` (now handled by `saveMandatoryDocument`) | | `app/ConsumerApplicationElement.php` | Minor update (fillable or cast for new column) | | `database/migrations/2026_03_18_130911_mandatory_details_list.php` | New migration adding `mandatory_details_list` column | | `resources/views/admin/consumer-application/edit_v1.blade.php` | Frontend dropdown updates, renamed items, new items added | | `resources/views/admin/layouts/footer.blade.php` | Supporting JS/UI changes for checklist |