rough_idea = { -- a lot of these might want to call org functions instead of being hard coded type = "consent", org_id = 5, -- may be needed for defer_to, process sent to a diff org request_id = 1, -- callback to request total_votes = 2, to_pass = 3, -- could default to majority, but could set super majority eligible_voters = 5, timeout = 234235325, -- timestamp when vote ends votes_yes = { "lukvmil" }, votes_no = { "nathan" } } function modules.consent.cast_vote(user, decision, org_id, process_id) local org = modpol.orgs.get_org(org_id) local process = org:get_process(process_id) if decision == "yes" then table.insert(process.votes_yes, user) elseif decision == "no" then table.insert(process.votes_no, user) else return false process.total_votes = process.total_votes + 1 call_vote_check(process) -- some call to determine if the vote has reached an end condition end function modules.consent.call_vote_check(process) if votes_yes > to_pass then call_success() elseif votes_no > to_pass then call_failure() end end