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
quoteCalculatorLambda 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
updatedAtandupdatedByfields to maintain an audit trail. - If the rate schedule item is missing or malformed, the
quoteCalculatorfunction will fail and submissions will end up inerrorstatus. See Troubleshooting.