Devs - Through a conversation with a computer science person, I've learned that Fineract should have a clearly articulated approach with regard to idempotency. This is particularly true when thinking about how fineract interacts with payment systems.
"When building a system to move money, it is paramount that operations that move money are idempotent. Failure to do this might result in accidentally double charging your customer, or paying a vendor multiple times. The risk of this happening is elevated based on the way software is typically built today, since developers take advantage of scalable systems that process multiple items in parallel. " (https://www.moderntreasury.com/journal/why-idempotency-matters-in-payments) Or this article on Stripe engineering calling for liberal use of Idempotency: "The easiest way to address inconsistencies in distributed state caused by failures is to implement server endpoints so that they’re idempotent, which means that they can be called any number of times while guaranteeing that side effects only occur once." (https://stripe.com/blog/idempotency) and this article in Apache Camel https://camel.apache.org/camel-kafka-connector/latest/user-guide/idempotency.html So, my understanding may be wrong and we've got this covered, or maybe we just consider this overkill. Perhaps there is something in the "magic" that's developed in the CQRS plus in-memory database queuing and our clever transaction state management, but... I don't know. Or perhaps we haven't really had to think about this because we haven't had that many large scale deployments and the scalability issues associated with multiple parallel calls haven't come to the fore, or haven't come back to the list. So, that's the intent of this email. Do we have a need now for layering on Idempotency checks? What is the right approach? Has anyone already implemented this, or decided not to for very good reasons? What would be the right approach to this? Implement where? Time limited to 3 hrs? Etc... So, this is a call to discuss. I'm far from an expert on this.