{
  "version": "1.0",
  "modules": [
    {
      "name": "Calculator Configuration",
      "prefix": "/calculator-defaults",
      "endpoints": [
        {
          "method": "GET",
          "path": "/",
          "summary": "Get Calculator Defaults",
          "description": "Retrieves the current calculator defaults and validation constraints. Returns the singleton configuration record used to populate default values and validate loan calculation inputs.",
          "response": {
            "schema_name": "CalculatordefaultsResponse",
            "fields": [
              {
                "name": "default_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "min_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "max_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "str",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "str",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "GET",
          "path": "/{defaults_id}",
          "summary": "Get Calculator Defaults By ID",
          "description": "Retrieves calculator defaults by unique identifier. Returns 404 if the specified defaults record does not exist.",
          "path_params": [
            {
              "name": "defaults_id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "CalculatordefaultsResponse",
            "fields": [
              {
                "name": "default_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "min_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "max_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "str",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "str",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "PUT",
          "path": "/{defaults_id}",
          "summary": "Update Calculator Defaults",
          "description": "Updates calculator defaults and validation constraints. Validates that minimum values do not exceed maximum values for principal, interest rate, and term. Returns 404 if the defaults record does not exist, 400 for constraint violations.",
          "path_params": [
            {
              "name": "defaults_id",
              "type": "str"
            }
          ],
          "request_body": {
            "schema_name": "CalculatordefaultsUpdate",
            "fields": [
              {
                "name": "default_principal",
                "type": "Decimal | None",
                "required": false
              },
              {
                "name": "default_interest_rate",
                "type": "Decimal | None",
                "required": false
              },
              {
                "name": "default_term_months",
                "type": "int | None",
                "required": false
              },
              {
                "name": "min_principal",
                "type": "Decimal | None",
                "required": false
              },
              {
                "name": "max_principal",
                "type": "Decimal | None",
                "required": false
              },
              {
                "name": "min_interest_rate",
                "type": "Decimal | None",
                "required": false
              },
              {
                "name": "max_interest_rate",
                "type": "Decimal | None",
                "required": false
              },
              {
                "name": "min_term_months",
                "type": "int | None",
                "required": false
              },
              {
                "name": "max_term_months",
                "type": "int | None",
                "required": false
              }
            ]
          },
          "response": {
            "schema_name": "CalculatordefaultsResponse",
            "fields": [
              {
                "name": "default_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "min_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "max_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "str",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "str",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "POST",
          "path": "/",
          "summary": "Create Calculator Defaults",
          "description": "Creates a new calculator defaults configuration record. Validates that minimum values do not exceed maximum values for principal, interest rate, and term. Returns 400 for constraint violations.",
          "request_body": {
            "schema_name": "CalculatordefaultsCreate",
            "fields": [
              {
                "name": "default_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "min_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "max_term_months",
                "type": "int",
                "required": false
              }
            ]
          },
          "response": {
            "schema_name": "CalculatordefaultsResponse",
            "fields": [
              {
                "name": "default_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "default_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "min_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "max_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "min_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "max_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "str",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "str",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 201
        }
      ]
    },
    {
      "name": "Loan Calculations",
      "prefix": "/loan-calculations",
      "endpoints": [
        {
          "method": "POST",
          "path": "/",
          "summary": "Create Loan Calculation",
          "description": "Creates a new loan calculation record with computed monthly payment, total payment, and total interest based on principal, annual interest rate, and loan term. Validates inputs against system constraints and stores the calculation with a session identifier for tracking.",
          "request_body": {
            "schema_name": "LoancalculationCreate",
            "fields": [
              {
                "name": "principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "annual_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "monthly_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_interest",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "session_id",
                "type": "str",
                "required": false
              }
            ]
          },
          "response": {
            "schema_name": "LoancalculationResponse",
            "fields": [
              {
                "name": "principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "annual_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "monthly_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_interest",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "session_id",
                "type": "str",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 201
        },
        {
          "method": "GET",
          "path": "/{calculation_id}",
          "summary": "Get Loan Calculation",
          "description": "Retrieves a stored loan calculation by ID. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "calculation_id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "LoancalculationResponse",
            "fields": [
              {
                "name": "principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "annual_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "monthly_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_interest",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "session_id",
                "type": "str",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "GET",
          "path": "/",
          "summary": "List Loan Calculations",
          "description": "Returns a paginated list of loan calculations. Supports optional filtering by session_id to retrieve calculations for a specific user session.",
          "query_params": [
            {
              "name": "limit",
              "type": "int",
              "required": false,
              "default": 20
            },
            {
              "name": "offset",
              "type": "int",
              "required": false,
              "default": 0
            },
            {
              "name": "session_id",
              "type": "str",
              "required": false
            }
          ],
          "response": {
            "schema_name": "PaginatedLoancalculationResponse",
            "fields": [
              {
                "name": "items",
                "type": "List[LoancalculationResponse]",
                "required": true,
                "is_list": true,
                "item_fields": [
                  {
                    "name": "principal",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "annual_interest_rate",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "loan_term_months",
                    "type": "int",
                    "required": false
                  },
                  {
                    "name": "monthly_payment",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "total_payment",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "total_interest",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "session_id",
                    "type": "str",
                    "required": false
                  },
                  {
                    "name": "id",
                    "type": "StrId",
                    "required": true
                  },
                  {
                    "name": "created_at",
                    "type": "datetime",
                    "required": true
                  },
                  {
                    "name": "updated_at",
                    "type": "datetime",
                    "required": true
                  }
                ]
              },
              {
                "name": "total",
                "type": "int",
                "required": true
              },
              {
                "name": "limit",
                "type": "int",
                "required": true
              },
              {
                "name": "offset",
                "type": "int",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "PUT",
          "path": "/{calculation_id}",
          "summary": "Update Loan Calculation",
          "description": "Updates an existing loan calculation. All fields are optional; only provided fields will be updated. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "calculation_id",
              "type": "str"
            }
          ],
          "request_body": {
            "schema_name": "LoancalculationUpdate",
            "fields": [
              {
                "name": "principal",
                "type": "Decimal",
                "required": false,
                "nullable": true
              },
              {
                "name": "annual_interest_rate",
                "type": "Decimal",
                "required": false,
                "nullable": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false,
                "nullable": true
              },
              {
                "name": "monthly_payment",
                "type": "Decimal",
                "required": false,
                "nullable": true
              },
              {
                "name": "total_payment",
                "type": "Decimal",
                "required": false,
                "nullable": true
              },
              {
                "name": "total_interest",
                "type": "Decimal",
                "required": false,
                "nullable": true
              },
              {
                "name": "session_id",
                "type": "str",
                "required": false,
                "nullable": true
              }
            ]
          },
          "response": {
            "schema_name": "LoancalculationResponse",
            "fields": [
              {
                "name": "principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "annual_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "monthly_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_interest",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "session_id",
                "type": "str",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "DELETE",
          "path": "/{calculation_id}",
          "summary": "Delete Loan Calculation",
          "description": "Deletes a loan calculation and all associated amortization schedule entries. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "calculation_id",
              "type": "str"
            }
          ],
          "status_code": 204
        },
        {
          "method": "GET",
          "path": "/{calculation_id}/details",
          "summary": "Get Loan Calculation with Details",
          "description": "Retrieves a loan calculation along with its complete amortization schedule showing payment breakdown for each period. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "calculation_id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "LoancalculationDetailResponse",
            "fields": [
              {
                "name": "principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "annual_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "monthly_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_interest",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "session_id",
                "type": "str",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "amortization_schedule_entries",
                "type": "List[AmortizationscheduleentryResponse]",
                "required": false,
                "is_list": true,
                "item_fields": [
                  {
                    "name": "calculation_id",
                    "type": "str",
                    "required": false
                  },
                  {
                    "name": "payment_number",
                    "type": "int",
                    "required": false
                  },
                  {
                    "name": "payment_date",
                    "type": "date",
                    "required": true
                  },
                  {
                    "name": "beginning_balance",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "payment_amount",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "principal_portion",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "interest_portion",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "ending_balance",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "id",
                    "type": "StrId",
                    "required": true
                  },
                  {
                    "name": "created_at",
                    "type": "datetime",
                    "required": true
                  },
                  {
                    "name": "updated_at",
                    "type": "datetime",
                    "required": true
                  }
                ]
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "POST",
          "path": "/{calculation_id}/generate-schedule",
          "summary": "Generate Amortization Schedule",
          "description": "Generates a complete amortization schedule for an existing loan calculation by iterating through each payment period and creating schedule entries. Deletes any existing schedule entries for this calculation before generating new ones. Optional start_date parameter allows specifying the first payment date; defaults to today.",
          "path_params": [
            {
              "name": "calculation_id",
              "type": "str"
            }
          ],
          "query_params": [
            {
              "name": "start_date",
              "type": "date",
              "required": false
            }
          ],
          "response": {
            "schema_name": "LoancalculationDetailResponse",
            "fields": [
              {
                "name": "principal",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "annual_interest_rate",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false
              },
              {
                "name": "monthly_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_payment",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "total_interest",
                "type": "Decimal",
                "required": false
              },
              {
                "name": "session_id",
                "type": "str",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "amortization_schedule_entries",
                "type": "List[AmortizationscheduleentryResponse]",
                "required": false,
                "is_list": true,
                "item_fields": [
                  {
                    "name": "calculation_id",
                    "type": "str",
                    "required": false
                  },
                  {
                    "name": "payment_number",
                    "type": "int",
                    "required": false
                  },
                  {
                    "name": "payment_date",
                    "type": "date",
                    "required": true
                  },
                  {
                    "name": "beginning_balance",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "payment_amount",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "principal_portion",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "interest_portion",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "ending_balance",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "id",
                    "type": "StrId",
                    "required": true
                  },
                  {
                    "name": "created_at",
                    "type": "datetime",
                    "required": true
                  },
                  {
                    "name": "updated_at",
                    "type": "datetime",
                    "required": true
                  }
                ]
              }
            ],
            "is_list": false
          },
          "status_code": 201
        },
        {
          "method": "GET",
          "path": "/{calculation_id}/schedule-entries",
          "summary": "List Amortization Schedule Entries",
          "description": "Returns a paginated list of amortization schedule entries for a specific loan calculation, ordered by payment number.",
          "path_params": [
            {
              "name": "calculation_id",
              "type": "str"
            }
          ],
          "query_params": [
            {
              "name": "limit",
              "type": "int",
              "required": false,
              "default": 20
            },
            {
              "name": "offset",
              "type": "int",
              "required": false,
              "default": 0
            }
          ],
          "response": {
            "schema_name": "PaginatedAmortizationscheduleentryResponse",
            "fields": [
              {
                "name": "items",
                "type": "List[AmortizationscheduleentryResponse]",
                "required": true,
                "is_list": true,
                "item_fields": [
                  {
                    "name": "calculation_id",
                    "type": "str",
                    "required": false
                  },
                  {
                    "name": "payment_number",
                    "type": "int",
                    "required": false
                  },
                  {
                    "name": "payment_date",
                    "type": "date",
                    "required": true
                  },
                  {
                    "name": "beginning_balance",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "payment_amount",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "principal_portion",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "interest_portion",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "ending_balance",
                    "type": "Decimal",
                    "required": false
                  },
                  {
                    "name": "id",
                    "type": "StrId",
                    "required": true
                  },
                  {
                    "name": "created_at",
                    "type": "datetime",
                    "required": true
                  },
                  {
                    "name": "updated_at",
                    "type": "datetime",
                    "required": true
                  }
                ]
              },
              {
                "name": "total",
                "type": "int",
                "required": true
              },
              {
                "name": "limit",
                "type": "int",
                "required": true
              },
              {
                "name": "offset",
                "type": "int",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        }
      ]
    }
  ],
  "enums": {}
}