import json import logging from datetime import datetime from typing import Dict, Any, List, Optional from pydantic import BaseModel, Field, ValidationError from pydantic_settings import BaseSettings # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) class Settings(BaseSettings): """Application settings loaded from environment variables or .env file.""" generated_on: str = datetime.now().isoformat() settings = Settings() class Subcategory(BaseModel): label: str value: Optional[str] = None previous_value: Optional[str] = None sub_label: Optional[str] = None columns: Optional[List[Dict[str, Any]]] = None values: Optional[List[Dict[str, Any]]] = None class Category(BaseModel): category: str subcategories: List[Subcategory] total: Optional[str] = None previous_total: Optional[str] = None class NoteMetadata(BaseModel): note_number: str generated_on: str class NoteTemplate(BaseModel): title: str full_title: str structure: List[Category] metadata: NoteMetadata notes_and_disclosures: Optional[List[str]] = None def validate_note_templates(note_templates: Dict[str, Any]) -> Dict[str, NoteTemplate]: """ Validate and parse note_templates dict into Pydantic models. Returns a dict of validated NoteTemplate objects. """ validated_templates = {} for key, value in note_templates.items(): try: # Ensure generated_on is set from settings if not present if "metadata" in value and "generated_on" in value["metadata"]: value["metadata"]["generated_on"] = settings.generated_on validated_templates[key] = NoteTemplate(**value) except ValidationError as ve: logger.warning(f"Validation error for note {key}: {ve}") return validated_templates # The original note_templates dict (unchanged, but can be loaded from a JSON file if preferred) note_templates = { "2": { "title": "Share Capital", "full_title": "2. Share Capital", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Authorised Share Capital", "subcategories": [ { "label": "Equity Shares of ₹10 each", "value": "{authorised_equity_2024}", "previous_value": "{authorised_equity_2023}" } ], "total": "{authorised_total_2024}", "previous_total": "{authorised_total_2023}" }, { "category": "Issued, Subscribed and Paid-up Share Capital", "subcategories": [ { "label": "Equity Shares of ₹10 each fully paid up", "value": "{issued_equity_2024}", "previous_value": "{issued_equity_2023}" } ], "total": "{issued_total_2024}", "previous_total": "{issued_total_2023}" }, { "category": "Reconciliation of Shares", "subcategories": [ { "label": "Number of Shares at the beginning", "value": "{shares_beginning_2024}", "previous_value": "{shares_beginning_2023}" }, { "label": "Changes during the year", "value": "{shares_changes_2024}", "previous_value": "{shares_changes_2023}" }, { "label": "Number of Shares at the end", "value": "{shares_end_2024}", "previous_value": "{shares_end_2023}" } ] } ], "metadata": { "note_number": "2", "generated_on": "{generated_on}" } }, "3": { "title": "Reserves and Surplus", "full_title": "3. Reserves and Surplus", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Share Premium Account", "value": "{share_premium_2024}", "previous_value": "{share_premium_2023}" }, { "label": "Surplus in Statement of Profit and Loss", "value": "{surplus_profit_loss_2024}", "previous_value": "{surplus_profit_loss_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "3", "generated_on": "{generated_on}" } }, "4": { "title": "Long Term Borrowings", "full_title": "4. Long Term Borrowings", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Secured", "subcategories": [ { "label": "Term Loans from Banks", "value": "{term_loans_banks_2024}", "previous_value": "{term_loans_banks_2023}" } ], "total": "{secured_total_2024}", "previous_total": "{secured_total_2023}" } ], "metadata": { "note_number": "4", "generated_on": "{generated_on}" } }, "5": { "title": "Deferred Tax Liability (Net)", "full_title": "5. Deferred Tax Liability (Net)", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Deferred Tax Liability", "value": "{deferred_tax_liability_2024}", "previous_value": "{deferred_tax_liability_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "5", "generated_on": "{generated_on}" } }, "6": { "title": "Trade Payables", "full_title": "6. Trade Payables", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Unsecured, considered good", "subcategories": [ { "label": "Outstanding for a period exceeding six months from the date they are due for payment", "value": "{over_six_months_2024}", "previous_value": "{over_six_months_2023}" }, { "label": "Other payables", "value": "{other_payables_2024}", "previous_value": "{other_payables_2023}" } ], "total": "{unsecured_total_2024}", "previous_total": "{unsecured_total_2023}" }, { "category": "Age wise analysis of Trade payables as on 31.03.2024", "subcategories": [ { "label": "Particulars", "sub_label": "Outstanding for following periods from due date of payment", "columns": [ {"header": "0 - 6 months", "value": "{zero_six_2024}"}, {"header": "6 months - 1 Year", "value": "{six_one_2024}"}, {"header": "1 - 2 Years", "value": "{one_two_2024}"}, {"header": "2 - 3 Years", "value": "{two_three_2024}"}, {"header": "More than 3 Years", "value": "{more_three_2024}"}, {"header": "Total", "value": "{age_total_2024}"} ] }, { "label": "Undisputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{undisputed_good_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{undisputed_good_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{undisputed_good_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{undisputed_good_two_three_2024}"}, {"period": "More than 3 Years", "value": "{undisputed_good_more_three_2024}"}, {"period": "Total", "value": "{undisputed_good_total_2024}"} ] }, { "label": "Disputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{disputed_good_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{disputed_good_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{disputed_good_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{disputed_good_two_three_2024}"}, {"period": "More than 3 Years", "value": "{disputed_good_more_three_2024}"}, {"period": "Total", "value": "{disputed_good_total_2024}"} ] }, { "label": "Total", "values": [ {"period": "0 - 6 months", "value": "{total_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{total_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{total_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{total_two_three_2024}"}, {"period": "More than 3 Years", "value": "{total_more_three_2024}"}, {"period": "Total", "value": "{age_total_2024}"} ] } ] }, { "category": "Age wise analysis of Trade payables as on 31.03.2023", "subcategories": [ { "label": "Particulars", "sub_label": "Outstanding for following periods from due date of payment", "columns": [ {"header": "0 - 6 months", "value": "{zero_six_2023}"}, {"header": "6 months - 1 Year", "value": "{six_one_2023}"}, {"header": "1 - 2 Years", "value": "{one_two_2023}"}, {"header": "2 - 3 Years", "value": "{two_three_2023}"}, {"header": "More than 3 Years", "value": "{more_three_2023}"}, {"header": "Total", "value": "{age_total_2023}"} ] }, { "label": "Undisputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{undisputed_good_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{undisputed_good_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{undisputed_good_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{undisputed_good_two_three_2023}"}, {"period": "More than 3 Years", "value": "{undisputed_good_more_three_2023}"}, {"period": "Total", "value": "{undisputed_good_total_2023}"} ] }, { "label": "Disputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{disputed_good_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{disputed_good_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{disputed_good_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{disputed_good_two_three_2023}"}, {"period": "More than 3 Years", "value": "{disputed_good_more_three_2023}"}, {"period": "Total", "value": "{disputed_good_total_2023}"} ] }, { "label": "Total", "values": [ {"period": "0 - 6 months", "value": "{total_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{total_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{total_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{total_two_three_2023}"}, {"period": "More than 3 Years", "value": "{total_more_three_2023}"}, {"period": "Total", "value": "{age_total_2023}"} ] } ] } ], "metadata": { "note_number": "6", "generated_on": "{generated_on}" } }, "7": { "title": "Other Current Liabilities", "full_title": "7. Other Current Liabilities", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Current Maturities of Long Term Borrowings", "value": "{current_maturities_2024}", "previous_value": "{current_maturities_2023}" }, { "label": "Outstanding Liabilities for Expenses", "value": "{outstanding_liabilities_2024}", "previous_value": "{outstanding_liabilities_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "7", "generated_on": "{generated_on}" } }, "8": { "title": "Short Term Provisions", "full_title": "8. Short Term Provisions", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Provision for Taxation", "value": "{provision_taxation_2024}", "previous_value": "{provision_taxation_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "8", "generated_on": "{generated_on}" } }, "9": { "title": "Fixed Assets", "full_title": "9. Fixed Assets", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Tangible Assets", "subcategories": [ { "label": "Gross Block", "value": "{gross_block_2024}", "previous_value": "{gross_block_2023}" }, { "label": "Accumulated Depreciation", "value": "{accumulated_depreciation_2024}", "previous_value": "{accumulated_depreciation_2023}" }, { "label": "Net Block", "value": "{net_block_2024}", "previous_value": "{net_block_2023}" } ], "total": "{tangible_total_2024}", "previous_total": "{tangible_total_2023}" }, { "category": "Intangible Assets", "subcategories": [ { "label": "Gross Block", "value": "{intangible_gross_block_2024}", "previous_value": "{intangible_gross_block_2023}" }, { "label": "Accumulated Amortisation", "value": "{accumulated_amortisation_2024}", "previous_value": "{accumulated_amortisation_2023}" }, { "label": "Net Block", "value": "{intangible_net_block_2024}", "previous_value": "{intangible_net_block_2023}" } ], "total": "{intangible_total_2024}", "previous_total": "{intangible_total_2023}" }, { "category": "Capital Work-in-Progress", "subcategories": [ { "label": "Capital Work-in-Progress", "value": "{cwip_2024}", "previous_value": "{cwip_2023}" } ], "total": "{cwip_total_2024}", "previous_total": "{cwip_total_2023}" } ], "metadata": { "note_number": "9", "generated_on": "{generated_on}" } }, "10": { "title": "Long Term Loans and Advances", "full_title": "10. Long Term Loans and Advances", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Unsecured, considered good", "subcategories": [ { "label": "Long Term - Security Deposits", "value": "{security_deposits_2024}", "previous_value": "{security_deposits_2023}" } ], "total": "{unsecured_total_2024}", "previous_total": "{unsecured_total_2023}" } ], "metadata": { "note_number": "10", "generated_on": "{generated_on}" } }, "11": { "title": "Inventories", "full_title": "11. Inventories", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Consumables", "subcategories": [], "total": "{consumables_2024}", "previous_total": "{consumables_2023}" } ], "metadata": { "note_number": "11", "generated_on": "{generated_on}" } }, "12": { "title": "Trade Receivables", "full_title": "12. Trade Receivables", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Unsecured, considered good", "subcategories": [ { "label": "Outstanding for a period exceeding six months from the date they are due for payment", "value": "{over_six_months_2024}", "previous_value": "{over_six_months_2023}" }, { "label": "Other receivables", "value": "{other_receivables_2024}", "previous_value": "{other_receivables_2023}" } ], "total": "{unsecured_total_2024}", "previous_total": "{unsecured_total_2023}" }, { "category": "Age wise analysis of Trade receivables as on 31.03.2024", "subcategories": [ { "label": "Particulars", "sub_label": "Outstanding for following periods from due date of payment", "columns": [ {"header": "0 - 6 months", "value": "{zero_six_2024}"}, {"header": "6 months - 1 Year", "value": "{six_one_2024}"}, {"header": "1 - 2 Years", "value": "{one_two_2024}"}, {"header": "2 - 3 Years", "value": "{two_three_2024}"}, {"header": "More than 3 Years", "value": "{more_three_2024}"}, {"header": "Total", "value": "{age_total_2024}"} ] }, { "label": "Undisputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{undisputed_good_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{undisputed_good_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{undisputed_good_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{undisputed_good_two_three_2024}"}, {"period": "More than 3 Years", "value": "{undisputed_good_more_three_2024}"}, {"period": "Total", "value": "{undisputed_good_total_2024}"} ] }, { "label": "Undisputed", "sub_label": "- Considered doubtful", "values": [ {"period": "0 - 6 months", "value": "{undisputed_doubtful_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{undisputed_doubtful_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{undisputed_doubtful_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{undisputed_doubtful_two_three_2024}"}, {"period": "More than 3 Years", "value": "{undisputed_doubtful_more_three_2024}"}, {"period": "Total", "value": "{undisputed_doubtful_total_2024}"} ] }, { "label": "Disputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{disputed_good_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{disputed_good_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{disputed_good_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{disputed_good_two_three_2024}"}, {"period": "More than 3 Years", "value": "{disputed_good_more_three_2024}"}, {"period": "Total", "value": "{disputed_good_total_2024}"} ] }, { "label": "Disputed", "sub_label": "- Considered doubtful", "values": [ {"period": "0 - 6 months", "value": "{disputed_doubtful_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{disputed_doubtful_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{disputed_doubtful_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{disputed_doubtful_two_three_2024}"}, {"period": "More than 3 Years", "value": "{disputed_doubtful_more_three_2024}"}, {"period": "Total", "value": "{disputed_doubtful_total_2024}"} ] }, { "label": "Total", "values": [ {"period": "0 - 6 months", "value": "{total_zero_six_2024}"}, {"period": "6 months - 1 Year", "value": "{total_six_one_2024}"}, {"period": "1 - 2 Years", "value": "{total_one_two_2024}"}, {"period": "2 - 3 Years", "value": "{total_two_three_2024}"}, {"period": "More than 3 Years", "value": "{total_more_three_2024}"}, {"period": "Total", "value": "{age_total_2024}"} ] } ] }, { "category": "Age wise analysis of Trade receivables as on 31.03.2023", "subcategories": [ { "label": "Particulars", "sub_label": "Outstanding for following periods from due date of payment", "columns": [ {"header": "0 - 6 months", "value": "{zero_six_2023}"}, {"header": "6 months - 1 Year", "value": "{six_one_2023}"}, {"header": "1 - 2 Years", "value": "{one_two_2023}"}, {"header": "2 - 3 Years", "value": "{two_three_2023}"}, {"header": "More than 3 Years", "value": "{more_three_2023}"}, {"header": "Total", "value": "{age_total_2023}"} ] }, { "label": "Undisputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{undisputed_good_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{undisputed_good_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{undisputed_good_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{undisputed_good_two_three_2023}"}, {"period": "More than 3 Years", "value": "{undisputed_good_more_three_2023}"}, {"period": "Total", "value": "{undisputed_good_total_2023}"} ] }, { "label": "Undisputed", "sub_label": "- Considered doubtful", "values": [ {"period": "0 - 6 months", "value": "{undisputed_doubtful_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{undisputed_doubtful_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{undisputed_doubtful_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{undisputed_doubtful_two_three_2023}"}, {"period": "More than 3 Years", "value": "{undisputed_doubtful_more_three_2023}"}, {"period": "Total", "value": "{undisputed_doubtful_total_2023}"} ] }, { "label": "Disputed", "sub_label": "- Considered good", "values": [ {"period": "0 - 6 months", "value": "{disputed_good_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{disputed_good_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{disputed_good_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{disputed_good_two_three_2023}"}, {"period": "More than 3 Years", "value": "{disputed_good_more_three_2023}"}, {"period": "Total", "value": "{disputed_good_total_2023}"} ] }, { "label": "Disputed", "sub_label": "- Considered doubtful", "values": [ {"period": "0 - 6 months", "value": "{disputed_doubtful_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{disputed_doubtful_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{disputed_doubtful_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{disputed_doubtful_two_three_2023}"}, {"period": "More than 3 Years", "value": "{disputed_doubtful_more_three_2023}"}, {"period": "Total", "value": "{disputed_doubtful_total_2023}"} ] }, { "label": "Total", "values": [ {"period": "0 - 6 months", "value": "{total_zero_six_2023}"}, {"period": "6 months - 1 Year", "value": "{total_six_one_2023}"}, {"period": "1 - 2 Years", "value": "{total_one_two_2023}"}, {"period": "2 - 3 Years", "value": "{total_two_three_2023}"}, {"period": "More than 3 Years", "value": "{total_more_three_2023}"}, {"period": "Total", "value": "{age_total_2023}"} ] } ] } ], "metadata": { "note_number": "12", "generated_on": "{generated_on}" } }, "13": { "title": "Cash and Bank Balances", "full_title": "13. Cash and Bank Balances", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Cash and cash equivalents", "subcategories": [ { "label": "Balances with banks in current accounts", "value": "{bank_balances_2024}", "previous_value": "{bank_balances_2023}" }, { "label": "Cash on hand", "value": "{cash_on_hand_2024}", "previous_value": "{cash_on_hand_2023}" } ] }, { "category": "Other Bank Balances", "subcategories": [ { "label": "Fixed Deposits with ICICI Bank", "value": "{fixed_deposits_2024}", "previous_value": "{fixed_deposits_2023}" } ] }, { "category": "Total", "subcategories": [], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "13", "generated_on": "{generated_on}" } }, "14": { "title": "Short Term Loans and Advances", "full_title": "14. Short Term Loans and Advances", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Unsecured, considered good", "subcategories": [ { "label": "Prepaid Expenses", "value": "{prepaid_expenses_2024}", "previous_value": "{prepaid_expenses_2023}" }, { "label": "Other Advances", "value": "{other_advances_2024}", "previous_value": "{other_advances_2023}" } ] }, { "category": "Other loans and advances", "subcategories": [ { "label": "Advance tax", "value": "{advance_tax_2024}", "previous_value": "{advance_tax_2023}" }, { "label": "Balances with statutory/government authorities", "value": "{statutory_balances_2024}", "previous_value": "{statutory_balances_2023}" } ] }, { "category": "Total", "subcategories": [], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "14", "generated_on": "{generated_on}" } }, "15": { "title": "Other Current Assets", "full_title": "15. Other Current Assets", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Interest accrued on fixed deposits", "subcategories": [], "total": "{interest_accrued_2024}", "previous_total": "{interest_accrued_2023}" } ], "metadata": { "note_number": "15", "generated_on": "{generated_on}" } }, "16": { "title": "Revenue from Operations", "full_title": "16. Revenue from Operations", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Sale of Services", "subcategories": [ { "label": "Domestic", "value": "{domestic_2024}", "previous_value": "{domestic_2023}" }, { "label": "Exports", "value": "{exports_2024}", "previous_value": "{exports_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "16", "generated_on": "{generated_on}" } }, "17": { "title": "Other Income", "full_title": "17. Other Income", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Interest income", "value": "{interestincome_2024}", "previous_value": "{interestincome_2023}" }, { "label": "Foreign exchange gain (Net)", "value": "{foreignexchangegainnet_2024}", "previous_value": "{foreignexchangegainnet_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "17", "generated_on": "{generated_on}" } }, "18": { "title": "Cost of Materials Consumed", "full_title": "18. Cost of Materials Consumed", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Opening Stock", "value": "{openingstock_2024}", "previous_value": "{openingstock_2023}" }, { "label": "Add: Purchases", "value": "{purchases_2024}", "previous_value": "{purchases_2023}" }, { "label": "", "value": "{subtotal_2024}", "previous_value": "{subtotal_2023}" }, { "label": "Less: Closing Stock", "value": "{closingstock_2024}", "previous_value": "{closingstock_2023}" } ], "total": "{costmaterialsconsumed_2024}", "previous_total": "{costmaterialsconsumed_2023}" } ], "metadata": { "note_number": "18", "generated_on": "{generated_on}" } }, "19": { "title": "Employee Benefit Expense", "full_title": "19. Employee Benefit Expense", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Salaries, wages and bonus", "value": "{salarieswagesandbonus_2024}", "previous_value": "{salarieswagesandbonus_2023}" }, { "label": "Contribution to PF & ESI", "value": "{contributiontopfesi_2024}", "previous_value": "{contributiontopfesi_2023}" }, { "label": "Staff welfare expenses", "value": "{staffwelfareexpenses_2024}", "previous_value": "{staffwelfareexpenses_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "19", "generated_on": "{generated_on}" } }, "20": { "title": "Other Expenses", "full_title": "20. Other Expenses", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "BA / BE NOC Charges", "value": "{babenoccharges_2024}", "previous_value": "{babenoccharges_2023}" }, { "label": "BA Expenses", "value": "{baexpenses_2024}", "previous_value": "{baexpenses_2023}" }, { "label": "Payments to Volunteers", "value": "{paymentstovolunteers_2024}", "previous_value": "{paymentstovolunteers_2023}" }, { "label": "Other Operating Expenses", "value": "{otheroperatingexpenses_2024}", "previous_value": "{otheroperatingexpenses_2023}" }, { "label": "Laboratory testing charges", "value": "{laboratorytestingcharges_2024}", "previous_value": "{laboratorytestingcharges_2023}" }, { "label": "Rent", "value": "{rent_2024}", "previous_value": "{rent_2023}" }, { "label": "Rates & Taxes", "value": "{ratesandtaxes_2024}", "previous_value": "{ratesandtaxes_2023}" }, { "label": "Fees & licenses", "value": "{feesandlicenses_2024}", "previous_value": "{feesandlicenses_2023}" }, { "label": "Insurance", "value": "{insurance_2024}", "previous_value": "{insurance_2023}" }, { "label": "Membership & Subscription Charges", "value": "{membershipandsubscriptioncharges_2024}", "previous_value": "{membershipandsubscriptioncharges_2023}" }, { "label": "Postage & Communication Cost", "value": "{postageandcommunicationcost_2024}", "previous_value": "{postageandcommunicationcost_2023}" }, { "label": "Printing and stationery", "value": "{printingandstationery_2024}", "previous_value": "{printingandstationery_2023}" }, { "label": "CSR Fund Expenses", "value": "{csrfundexpenses_2024}", "previous_value": "{csrfundexpenses_2023}" }, { "label": "Telephone & Internet", "value": "{telephoneandinternet_2024}", "previous_value": "{telephoneandinternet_2023}" }, { "label": "Travelling and Conveyance", "value": "{travellingandconveyance_2024}", "previous_value": "{travellingandconveyance_2023}" }, { "label": "Translation Charges", "value": "{translationcharges_2024}", "previous_value": "{translationcharges_2023}" }, { "label": "Electricity Charges", "value": "{electricitycharges_2024}", "previous_value": "{electricitycharges_2023}" }, { "label": "Security Charges", "value": "{securitycharges_2024}", "previous_value": "{securitycharges_2023}" }, { "label": "Annual Maintenance Charges", "value": "{annualmaintenancecharges_2024}", "previous_value": "{annualmaintenancecharges_2023}" }, { "label": "Repairs and maintenance - Electrical", "value": "{repairsandmaintenanceelectrical_2024}", "previous_value": "{repairsandmaintenanceelectrical_2023}" }, { "label": "Repairs and maintenance - Office", "value": "{repairsandmaintenanceoffice_2024}", "previous_value": "{repairsandmaintenanceoffice_2023}" }, { "label": "Repairs and maintenance - Machinery", "value": "{repairsandmaintenancemachinery_2024}", "previous_value": "{repairsandmaintenancemachinery_2023}" }, { "label": "Repairs and maintenance - Vehicles", "value": "{repairsandmaintenancevehicles_2024}", "previous_value": "{repairsandmaintenancevehicles_2023}" }, { "label": "Repairs and maintenance - Others", "value": "{repairsandmaintenanceothers_2024}", "previous_value": "{repairsandmaintenanceothers_2023}" }, { "label": "Business Development Expenses", "value": "{businessdevelopmentexpenses_2024}", "previous_value": "{businessdevelopmentexpenses_2023}" }, { "label": "Professional & Consultancy Fees", "value": "{professionalandconsultancyfees_2024}", "previous_value": "{professionalandconsultancyfees_2023}" }, { "label": "Payment to Auditors", "value": "{paymenttoauditors_2024}", "previous_value": "{paymenttoauditors_2023}" }, { "label": "Bad Debts Written Off", "value": "{baddebtswrittenoff_2024}", "previous_value": "{baddebtswrittenoff_2023}" }, { "label": "Fire Extinguishers Refilling Charges", "value": "{fireextinguishersrefillingcharges_2024}", "previous_value": "{fireextinguishersrefillingcharges_2023}" }, { "label": "Food Expenses for Guests", "value": "{foodexpensesforguests_2024}", "previous_value": "{foodexpensesforguests_2023}" }, { "label": "Diesel Expenses", "value": "{dieselexpenses_2024}", "previous_value": "{dieselexpenses_2023}" }, { "label": "Interest Under 234 C Fy 2021-22", "value": "{interestunder234cfy202122_2024}", "previous_value": "{interestunder234cfy202122_2023}" }, { "label": "Loan Processing Charges", "value": "{loanprocessingcharges_2024}", "previous_value": "{loanprocessingcharges_2023}" }, { "label": "Sitting Fee of Directors", "value": "{sittingfeeofdirectors_2024}", "previous_value": "{sittingfeeofdirectors_2023}" }, { "label": "Customs Duty Payment", "value": "{customsdutypayment_2024}", "previous_value": "{customsdutypayment_2023}" }, { "label": "Transportation and Unloading Charges", "value": "{transportationandunloadingcharges_2024}", "previous_value": "{transportationandunloadingcharges_2023}" }, { "label": "Software Equipment", "value": "{softwareequipment_2024}", "previous_value": "{softwareequipment_2023}" }, { "label": "Miscellaneous expenses", "value": "{miscellaneousexpenses_2024}", "previous_value": "{miscellaneousexpenses_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "20", "generated_on": "{generated_on}" }, "notes_and_disclosures": [ "* Fees is net of GST which is taken as input tax credit." ] }, "21": { "title": "Depreciation and Amortisation Expense", "full_title": "21. Depreciation and Amortisation Expense", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Depreciation & amortisation", "value": "{depreciationamortisation_2024}", "previous_value": "{depreciationamortisation_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "21", "generated_on": "{generated_on}" } }, "22": { "title": "Loss on Sale of Assets & Investments", "full_title": "22. Loss on Sale of Assets & Investments", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Short Term Loss on Sale of Investments (Non Derivative Loss)", "value": "{shorttermlossonSaleofinvestmentsnonderivativeLoss_2024}", "previous_value": "{shorttermlossonSaleofinvestmentsnonderivativeLoss_2023}" }, { "label": "Long term loss on sale of investments", "value": "{longtermlossonSaleofinvestments_2024}", "previous_value": "{longtermlossonSaleofinvestments_2023}" }, { "label": "Loss on Sale of Fixed Assets", "value": "{lossonSaleoffixedassets_2024}", "previous_value": "{lossonSaleoffixedassets_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "22", "generated_on": "{generated_on}" } }, "23": { "title": "Finance Costs", "full_title": "23. Finance Costs", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Bank & Finance Charges", "value": "{bankfinancecharges_2024}", "previous_value": "{bankfinancecharges_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "23", "generated_on": "{generated_on}" } }, "24": { "title": "Payment to Auditor", "full_title": "24. Payment to Auditor", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "For Audit fee", "value": "{forauditfee_2024}", "previous_value": "{forauditfee_2023}" }, { "label": "For Tax Audit / Certification Fees", "value": "{fortaxauditcertificationfees_2024}", "previous_value": "{fortaxauditcertificationfees_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "24", "generated_on": "{generated_on}" } }, "25": { "title": "Earnings in Foreign Currency", "full_title": "25. Earnings in Foreign Currency", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Inflow", "subcategories": [ { "label": "Income from export of services", "value": "{incomefromexportofservices_2024}", "previous_value": "{incomefromexportofservices_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "25", "generated_on": "{generated_on}" } }, "26": { "title": "Particulars of Un-hedged Foreign Currency Exposure", "full_title": "26. Particulars of Un-hedged Foreign Currency Exposure", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Inflow", "subcategories": [ { "label": "Income from export of services", "value": "{incomefromexportofservices_2024}", "previous_value": "{incomefromexportofservices_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "26", "generated_on": "{generated_on}" }, "notes_and_disclosures": [ "(i) There is no derivate contract outstanding as at the Balance Sheet date.", "(ii) Particulars of un-hedged foreign currency exposure as at the Balance Sheet date" ] }, "27": { "title": "Contingent Liabilities", "full_title": "27. Contingent Liabilities", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Claims against the company not acknowledged as debts", "value": "{claims_not_acknowledged_2024}", "previous_value": "{claims_not_acknowledged_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "27", "generated_on": "{generated_on}" } }, "28": { "title": "Commitments", "full_title": "28. Commitments", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Capital Commitments", "value": "{capital_commitments_2024}", "previous_value": "{capital_commitments_2023}" } ], "total": "{total_2024}", "previous_total": "{total_2023}" } ], "metadata": { "note_number": "28", "generated_on": "{generated_on}" } }, "29": { "title": "Related Party Disclosures", "full_title": "29. Related Party Disclosures", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Key Management Personnel", "subcategories": [ { "label": "Remuneration", "value": "{remuneration_kmp_2024}", "previous_value": "{remuneration_kmp_2023}" } ], "total": "{total_kmp_2024}", "previous_total": "{total_kmp_2023}" } ], "metadata": { "note_number": "29", "generated_on": "{generated_on}" } }, "30": { "title": "Segment Reporting", "full_title": "30. Segment Reporting", "structure": [ { "category": "In Lakhs", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "Segment Revenue", "subcategories": [ { "label": "Segment A", "value": "{segment_a_revenue_2024}", "previous_value": "{segment_a_revenue_2023}" }, { "label": "Segment B", "value": "{segment_b_revenue_2024}", "previous_value": "{segment_b_revenue_2023}" } ], "total": "{segment_total_2024}", "previous_total": "{segment_total_2023}" } ], "metadata": { "note_number": "30", "generated_on": "{generated_on}" } }, "31": { "title": "Earnings Per Share (EPS)", "full_title": "31. Earnings Per Share (EPS)", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Basic EPS", "value": "{basic_eps_2024}", "previous_value": "{basic_eps_2023}" }, { "label": "Diluted EPS", "value": "{diluted_eps_2024}", "previous_value": "{diluted_eps_2023}" } ], "total": "{total_eps_2024}", "previous_total": "{total_eps_2023}" } ], "metadata": { "note_number": "31", "generated_on": "{generated_on}" } }, "32": { "title": "Additional Disclosures", "full_title": "32. Additional Disclosures", "structure": [ { "category": "", "subcategories": [ { "label": "March 31, 2024", "value": "{march_2024_total}" }, { "label": "March 31, 2023", "value": "{march_2023_total}" } ] }, { "category": "", "subcategories": [ { "label": "Additional Information A", "value": "{additional_info_a_2024}", "previous_value": "{additional_info_a_2023}" }, { "label": "Additional Information B", "value": "{additional_info_b_2024}", "previous_value": "{additional_info_b_2023}" } ], "total": "{total_additional_2024}", "previous_total": "{total_additional_2023}" } ], "metadata": { "note_number": "32", "generated_on": "{generated_on}" } } } # Validate note_templates on import validated_note_templates = validate_note_templates(note_templates) # Optionally, expose validated_note_templates for import elsewhere __all__ = ["validated_note_templates"] # Example usage (for testing or debugging) if __name__ == "__main__": logger.info(f"Loaded {len(validated_note_templates)} validated note templates.") # Print one example note template structure example_key = next(iter(validated_note_templates)) logger.info(f"Example Note Template [{example_key}]:\n{validated_note_templates[example_key].json(indent=2)}")