This set mixes the modeling unit: build a small fact and dimension, query a history table as of a date, and write the checks that keep the model honest.
For every fact, write down the grain before the query. For every history query, handle the open end (valid_to IS NULL). For every check, the right answer is the list of rows that break the rule.