{
  "version": "1.0",
  "modules": [
    {
      "name": "Calculation",
      "prefix": "/calculation",
      "endpoints": [
        {
          "method": "POST",
          "path": "/sessions",
          "summary": "Create Calculation Session",
          "description": "Creates a new calculation session for tracking anonymous user activity. Returns 409 if a session with the same session_id already exists.",
          "request_body": {
            "schema_name": "CalculationsessionCreate",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "first_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "last_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "calculation_count",
                "type": "int",
                "required": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              }
            ]
          },
          "response": {
            "schema_name": "CalculationsessionResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "first_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "last_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "calculation_count",
                "type": "int",
                "required": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "id",
                "type": "str",
                "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": "/sessions",
          "summary": "List Calculation Sessions",
          "description": "Returns a paginated list of calculation sessions. Supports optional filtering by session_id.",
          "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": "CalculationsessionResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "first_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "last_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "calculation_count",
                "type": "int",
                "required": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": true
          },
          "status_code": 200
        },
        {
          "method": "GET",
          "path": "/sessions/{id}",
          "summary": "Get Calculation Session",
          "description": "Retrieves a single calculation session by ID. Returns 404 if the session does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "CalculationsessionResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "first_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "last_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "calculation_count",
                "type": "int",
                "required": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "PATCH",
          "path": "/sessions/{id}",
          "summary": "Update Calculation Session",
          "description": "Updates an existing calculation session. Only provided fields are updated. Returns 404 if the session does not exist, 409 if session_id conflicts with another session.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "request_body": {
            "schema_name": "CalculationsessionUpdate",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "first_access_at",
                "type": "datetime",
                "required": false,
                "nullable": true
              },
              {
                "name": "last_access_at",
                "type": "datetime",
                "required": false,
                "nullable": true
              },
              {
                "name": "calculation_count",
                "type": "int",
                "required": false,
                "nullable": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              }
            ]
          },
          "response": {
            "schema_name": "CalculationsessionResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "first_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "last_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "calculation_count",
                "type": "int",
                "required": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "id",
                "type": "str",
                "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": "/sessions/{id}",
          "summary": "Delete Calculation Session",
          "description": "Deletes a calculation session and all associated calculations and amortization entries. Returns 404 if the session does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "status_code": 200
        },
        {
          "method": "POST",
          "path": "/calculations",
          "summary": "Create Calculation",
          "description": "Creates a new calculation record. Validates that the referenced session exists. Returns 404 if session not found.",
          "request_body": {
            "schema_name": "CalculationCreate",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              }
            ]
          },
          "response": {
            "schema_name": "CalculationResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "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": "/calculations",
          "summary": "List Calculations",
          "description": "Returns a paginated list of calculations. Supports optional filtering by session_id to retrieve calculations for a specific 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": "CalculationResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": true
          },
          "status_code": 200
        },
        {
          "method": "GET",
          "path": "/calculations/{id}",
          "summary": "Get Calculation",
          "description": "Retrieves a single calculation by ID. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "CalculationResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "PATCH",
          "path": "/calculations/{id}",
          "summary": "Update Calculation",
          "description": "Updates an existing calculation. Only provided fields are updated. Validates that any new session_id exists. Returns 404 if calculation or session not found.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "request_body": {
            "schema_name": "CalculationUpdate",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": false,
                "nullable": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": false,
                "nullable": true
              }
            ]
          },
          "response": {
            "schema_name": "CalculationResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "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": "/calculations/{id}",
          "summary": "Delete Calculation",
          "description": "Deletes a calculation and all associated amortization entries. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "status_code": 200
        },
        {
          "method": "POST",
          "path": "/amortization-entries",
          "summary": "Create Amortization Entry",
          "description": "Creates a new amortization entry. Validates that the referenced calculation exists. Returns 404 if calculation not found.",
          "request_body": {
            "schema_name": "AmortizationentryCreate",
            "fields": [
              {
                "name": "calculation_id",
                "type": "str",
                "required": true
              },
              {
                "name": "payment_number",
                "type": "int",
                "required": true
              },
              {
                "name": "payment_date",
                "type": "date",
                "required": true
              },
              {
                "name": "beginning_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "payment_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "principal_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "interest_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "ending_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_principal",
                "type": "float",
                "required": true
              }
            ]
          },
          "response": {
            "schema_name": "AmortizationentryResponse",
            "fields": [
              {
                "name": "calculation_id",
                "type": "str",
                "required": true
              },
              {
                "name": "payment_number",
                "type": "int",
                "required": true
              },
              {
                "name": "payment_date",
                "type": "date",
                "required": true
              },
              {
                "name": "beginning_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "payment_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "principal_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "interest_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "ending_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_principal",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "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": "/amortization-entries",
          "summary": "List Amortization Entries",
          "description": "Returns a paginated list of amortization entries. Supports optional filtering by calculation_id to retrieve entries for a specific calculation.",
          "query_params": [
            {
              "name": "limit",
              "type": "int",
              "required": false,
              "default": 20
            },
            {
              "name": "offset",
              "type": "int",
              "required": false,
              "default": 0
            },
            {
              "name": "calculation_id",
              "type": "str",
              "required": false
            }
          ],
          "response": {
            "schema_name": "AmortizationentryResponse",
            "fields": [
              {
                "name": "calculation_id",
                "type": "str",
                "required": true
              },
              {
                "name": "payment_number",
                "type": "int",
                "required": true
              },
              {
                "name": "payment_date",
                "type": "date",
                "required": true
              },
              {
                "name": "beginning_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "payment_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "principal_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "interest_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "ending_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_principal",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": true
          },
          "status_code": 200
        },
        {
          "method": "GET",
          "path": "/amortization-entries/{id}",
          "summary": "Get Amortization Entry",
          "description": "Retrieves a single amortization entry by ID. Returns 404 if the entry does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "AmortizationentryResponse",
            "fields": [
              {
                "name": "calculation_id",
                "type": "str",
                "required": true
              },
              {
                "name": "payment_number",
                "type": "int",
                "required": true
              },
              {
                "name": "payment_date",
                "type": "date",
                "required": true
              },
              {
                "name": "beginning_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "payment_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "principal_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "interest_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "ending_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_principal",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "PATCH",
          "path": "/amortization-entries/{id}",
          "summary": "Update Amortization Entry",
          "description": "Updates an existing amortization entry. Only provided fields are updated. Validates that any new calculation_id exists. Returns 404 if entry or calculation not found.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "request_body": {
            "schema_name": "AmortizationentryUpdate",
            "fields": [
              {
                "name": "calculation_id",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "payment_number",
                "type": "int",
                "required": false,
                "nullable": true
              },
              {
                "name": "payment_date",
                "type": "date",
                "required": false,
                "nullable": true
              },
              {
                "name": "beginning_balance",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "payment_amount",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "principal_portion",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "interest_portion",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "ending_balance",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "cumulative_interest",
                "type": "float",
                "required": false,
                "nullable": true
              },
              {
                "name": "cumulative_principal",
                "type": "float",
                "required": false,
                "nullable": true
              }
            ]
          },
          "response": {
            "schema_name": "AmortizationentryResponse",
            "fields": [
              {
                "name": "calculation_id",
                "type": "str",
                "required": true
              },
              {
                "name": "payment_number",
                "type": "int",
                "required": true
              },
              {
                "name": "payment_date",
                "type": "date",
                "required": true
              },
              {
                "name": "beginning_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "payment_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "principal_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "interest_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "ending_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_principal",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "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": "/amortization-entries/{id}",
          "summary": "Delete Amortization Entry",
          "description": "Deletes an amortization entry. Returns 404 if the entry does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "status_code": 200
        },
        {
          "method": "POST",
          "path": "/calculations/calculate",
          "summary": "Perform Loan Calculation",
          "description": "Performs a complete loan calculation including monthly payment, total interest, and generates the full amortization schedule. Validates all inputs according to business rules, creates calculation and all amortization entries in a single transaction, updates session calculation count, and returns the calculation with complete schedule. Returns 404 if session not found, 400 for validation errors.",
          "request_body": {
            "schema_name": "LoanCalculationInput",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              }
            ]
          },
          "response": {
            "schema_name": "CalculationDetailsResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "amortization_entries",
                "type": "list[AmortizationentryResponse]",
                "required": false
              }
            ],
            "is_list": false
          },
          "status_code": 201
        },
        {
          "method": "GET",
          "path": "/calculations/{id}/details",
          "summary": "Get Calculation With Details",
          "description": "Retrieves a calculation with its complete amortization schedule. Returns the calculation record along with all associated amortization entries ordered by payment number. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "CalculationDetailsResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "amortization_entries",
                "type": "list[AmortizationentryResponse]",
                "required": false
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "GET",
          "path": "/calculations/{id}/amortization",
          "summary": "Get Amortization Schedule",
          "description": "Retrieves the complete amortization schedule for a calculation. Returns an ordered list of all amortization entries showing payment breakdown for each period. Returns 404 if the calculation does not exist.",
          "path_params": [
            {
              "name": "id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "AmortizationentryResponse",
            "fields": [
              {
                "name": "calculation_id",
                "type": "str",
                "required": true
              },
              {
                "name": "payment_number",
                "type": "int",
                "required": true
              },
              {
                "name": "payment_date",
                "type": "date",
                "required": true
              },
              {
                "name": "beginning_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "payment_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "principal_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "interest_portion",
                "type": "float",
                "required": true
              },
              {
                "name": "ending_balance",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "cumulative_principal",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": true
          },
          "status_code": 200
        },
        {
          "method": "POST",
          "path": "/sessions/track",
          "summary": "Track Session",
          "description": "Creates a new session on first visit or updates an existing session's last access time. Used for tracking anonymous user activity and analytics. Accepts session_id, user_agent, and anonymized ip_address. Returns the created or updated session record.",
          "request_body": {
            "schema_name": "SessionTrackInput",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              }
            ]
          },
          "response": {
            "schema_name": "CalculationsessionResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "first_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "last_access_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "calculation_count",
                "type": "int",
                "required": true
              },
              {
                "name": "user_agent",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "ip_address",
                "type": "str",
                "required": false,
                "nullable": true
              },
              {
                "name": "id",
                "type": "str",
                "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": "/sessions/{session_id}/calculations",
          "summary": "Get Session Calculations",
          "description": "Retrieves all calculations associated with a specific session. Returns a paginated list of calculations ordered by creation date. Returns 404 if the session does not exist.",
          "path_params": [
            {
              "name": "session_id",
              "type": "str"
            }
          ],
          "query_params": [
            {
              "name": "limit",
              "type": "int",
              "required": false,
              "default": 20
            },
            {
              "name": "offset",
              "type": "int",
              "required": false,
              "default": 0
            }
          ],
          "response": {
            "schema_name": "CalculationResponse",
            "fields": [
              {
                "name": "session_id",
                "type": "str",
                "required": true
              },
              {
                "name": "principal",
                "type": "float",
                "required": true
              },
              {
                "name": "annual_interest_rate",
                "type": "float",
                "required": true
              },
              {
                "name": "loan_term_months",
                "type": "int",
                "required": true
              },
              {
                "name": "monthly_payment",
                "type": "float",
                "required": true
              },
              {
                "name": "total_interest",
                "type": "float",
                "required": true
              },
              {
                "name": "total_amount",
                "type": "float",
                "required": true
              },
              {
                "name": "id",
                "type": "str",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": true
          },
          "status_code": 200
        }
      ]
    }
  ],
  "enums": {}
}