I’ve got a model that looks something like this:

One Account has many Branches, and each Statement is generated for one Account. The model is redundant because the Account (the AccountID on the header) can be inferred from the BranchID on a transaction (a statement will always have one or more transactions).
Should the AccountID be removed from the StatementHeader, or is this level of redundancy OK? Or is there a better solution?
If you have the StatementHeader then it should have the AccountID to keep the referential integrity.
However it may be better to remove the StatementHeader completely and move the StatementDate into the Statement record. This would make things cleaner and make the model better describe what you want.