[20%] abstract cqrs