Ambiguity map

This page is intentionally not linked from the student specification.

Subsystem / issue Why it matters Canonical product decision
Dog age: conversion rule “Dog terms” is undefined; real-world calculators may vary by size or breed, but size is absent. For this fictional release, dog-age display is exactly human_years × 7. Fractional years are permitted. This display value is not used by dosage.
Dog age: months A value such as 18 could mean months or years. Age is supplied in human years. If a UI accepts months, it must convert months ÷ 12 before calling the core logic.
Dog-age output “used in dosage” vs dosage age The initial prose implies dog-years feed dosage, while the activity notes specify human years for dosage. Dosage uses human years. The “used in dosage” sentence is stale.
Dosage ignores age Age is an input but the displayed formula does not use it. base × ((weight_kg + 5) - age_years / 3).
Dosage units Weight, age, and output units are unspecified. Weight = kg; age = human years; internal dosage = mL. Display US fluid ounces for U.S. delivery destinations and mL elsewhere.
One dose per “month” Calendar month and rolling time window are different business rules. Ordering limit uses a rolling 30-day period.
Medicine cost has no provider Discounts need a base price but no named component supplies it. Add a Medicine Cost component. Price = $0.033814057 per mL (equivalent to $1.00 per fluid ounce for this exercise).
Discount circular dependency Discount takes Total_Cost, while total depends on discount/net cost. Discounts apply to Medicine Cost, not Total_Cost.
Coupon reuse “once per month” No history rule or month definition is given. Each coupon type may be used once per owner per calendar month. History supplies the evidence.
Two 10% coupons Concurrent vs sequential percentage discounts differ. Coupons are applied sequentially, in the order supplied. Duplicate coupon types in one transaction are rejected by the once-per-calendar-month rule.
BOGO conflicts with one-dose limit A “buy one get one” promotion requires quantity, but the system allows one dose. BOGO is a stale coupon and is rejected for this release. This is an example of removing an inconsistent requirement rather than inventing behavior.
Owner location vs delivery location Tax and shipping depend on destination, which may differ from current owner location. Shipping and tax use Delivery Location. Owner Location remains separate metadata.
U.S. territories missing The table is incomplete. Unsupported destinations produce a clear input error; students should not silently guess a rate.
PennsylvaniaRhode Island merged A malformed lookup key can make two valid locations impossible to use. Treat Pennsylvania and Rhode Island as separate valid keys using the same provided value in this dataset.
Tax rates look like percentages Multiplying by 5.59 vs 0.0559 changes tax by 100×. The table stores percentages: tax = net × rate ÷ 100. A zero rate is valid.
Tax and shipping data are suspiciously identical Copy/paste data can be syntactically valid but semantically wrong. Use the supplied values for the exercise, but record the data-quality risk. The reduced table intentionally includes a few rows where tax and shipping differ.
Shipping formula adds Net Cost The output is named Shipping Cost but the formula returns merchandise + shipping. Shipping Cost is the lookup fee only.
Total Cost uses undefined X and omits shipping The total cannot be computed consistently as written. Total = Net Cost + Shipping Cost + Tax Amount. The Dosage × X sentence is obsolete because medicine cost has already been computed.
Purchase Date source History and monthly rules depend on a date that no component creates. Checkout supplies the purchase date. Production would use the system clock; tests pass a date explicitly for determinism.
Rounding Rounding inside a pipeline can accumulate error and make integrations disagree. Keep full precision internally; round currency to two decimals only for display. Acceptance tests compare with tolerance.