Rate Schedule Update

The rate schedule is stored in DynamoDB, not in code. This runbook explains how to view and update it.

Where Rates Are Stored

Rates are stored in the config-dev DynamoDB table with the key configKey: "rateSchedule".

Viewing the Current Rate Schedule

aws dynamodb get-item \
  --table-name config-dev \
  --key '{"configKey": {"S": "rateSchedule"}}' \
  --profile dissertation-editor \
  --output json

Rate Schedule Schema

The rate schedule item has the following structure:

{
  "configKey": "rateSchedule",
  "rates": {
    "editing": {
      "textPerWord": 0.05,
      "refsPerWord": 0.03,
      "perTable": 5.00,
      "perFigure": 5.00,
      "frontMatterPerPage": 5.00
    },
    "formatting": {
      "textPerWord": 0.03,
      "refsPerWord": 0.02,
      "perTable": 5.00,
      "perFigure": 5.00,
      "frontMatterPerPage": 5.00
    },
    "editing_and_formatting": {
      "textPerWord": 0.07,
      "refsPerWord": 0.04,
      "perTable": 8.00,
      "perFigure": 8.00,
      "frontMatterPerPage": 8.00
    }
  },
  "adminFeePercent": 10,
  "updatedAt": "2026-03-01T00:00:00.000Z",
  "updatedBy": "scott@tikitram.com"
}

Rate Fields

Field Type Description
rates.<serviceType>.textPerWord number Rate per word for main body text
rates.<serviceType>.refsPerWord number Rate per word for references/bibliography
rates.<serviceType>.perTable number Flat rate per table
rates.<serviceType>.perFigure number Flat rate per figure
rates.<serviceType>.frontMatterPerPage number Rate per front matter page
adminFeePercent number Administrative fee as a percentage of the subtotal (e.g., 10 = 10%)
updatedAt string ISO 8601 timestamp of the last update
updatedBy string Email of the person who last updated the rates

Service Types

Key Description
editing Content editing only
formatting Formatting only
editing_and_formatting Both services combined

Updating the Rate Schedule

Step 1: Prepare the Updated JSON

Create a file named rate-schedule-update.json:

{
  "configKey": {"S": "rateSchedule"},
  "rates": {"M": {
    "editing": {"M": {
      "textPerWord": {"N": "0.05"},
      "refsPerWord": {"N": "0.03"},
      "perTable": {"N": "5.00"},
      "perFigure": {"N": "5.00"},
      "frontMatterPerPage": {"N": "5.00"}
    }},
    "formatting": {"M": {
      "textPerWord": {"N": "0.03"},
      "refsPerWord": {"N": "0.02"},
      "perTable": {"N": "5.00"},
      "perFigure": {"N": "5.00"},
      "frontMatterPerPage": {"N": "5.00"}
    }},
    "editing_and_formatting": {"M": {
      "textPerWord": {"N": "0.07"},
      "refsPerWord": {"N": "0.04"},
      "perTable": {"N": "8.00"},
      "perFigure": {"N": "8.00"},
      "frontMatterPerPage": {"N": "8.00"}
    }}
  }},
  "adminFeePercent": {"N": "10"},
  "updatedAt": {"S": "2026-03-09T00:00:00.000Z"},
  "updatedBy": {"S": "scott@tikitram.com"}
}

Update the rate values as needed. Make sure to update updatedAt and updatedBy.

Step 2: Write to DynamoDB

aws dynamodb put-item \
  --table-name config-dev \
  --item file://rate-schedule-update.json \
  --profile dissertation-editor

Step 3: Verify the Update

aws dynamodb get-item \
  --table-name config-dev \
  --key '{"configKey": {"S": "rateSchedule"}}' \
  --profile dissertation-editor \
  --output json

Step 4: Test a Submission

Submit a test dissertation to verify that quotes are calculated with the new rates. Check that the line item amounts match your expectations.

Important Notes

  • Rate changes take effect immediately for all new submissions. There is no deploy needed because the quoteCalculator Lambda reads the rate schedule from DynamoDB at runtime.
  • Existing quotes are not recalculated. If a client already received a quote, their quote remains at the old rates.
  • Always update the updatedAt and updatedBy fields to maintain an audit trail.
  • If the rate schedule item is missing or malformed, the quoteCalculator function will fail and submissions will end up in error status. See Troubleshooting.