<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=RulesetWorkflow</id>
	<title>RulesetWorkflow - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=RulesetWorkflow"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=RulesetWorkflow&amp;action=history"/>
	<updated>2026-08-22T14:07:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=RulesetWorkflow&amp;diff=3305&amp;oldid=prev</id>
		<title>Admin: 2 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=RulesetWorkflow&amp;diff=3305&amp;oldid=prev"/>
		<updated>2016-04-06T20:36:22Z</updated>

		<summary type="html">&lt;p&gt;2 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;u&amp;gt;_*This is a design document for a work in progress. It describes features that do not exist today and may never exist*_&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Text Description ==&lt;br /&gt;
&lt;br /&gt;
* The user of [[OrderRequest]] queue fill in a numeric &amp;quot;CF&amp;quot;, called &amp;quot;Price&amp;quot;.&lt;br /&gt;
* On creation, it needs to create following approvals:&lt;br /&gt;
** &amp;quot;[[ManagerApproval]]&amp;quot; if CF.Price is &amp;amp;gt; 1000&lt;br /&gt;
** &amp;quot;[[PresidentApproval]]&amp;quot; if CF.Price is &amp;amp;gt; 2000&lt;br /&gt;
* When all of &amp;quot;M&amp;quot;, &amp;quot;P&amp;quot; are resolved (or if there were none to begin with), Create &amp;quot;[[FinanceApproval]]&amp;quot;.&lt;br /&gt;
* If any approvals above is rejected, reject the original ticket.&lt;br /&gt;
* If &amp;quot;[[FinanceApproval]]&amp;quot; is resolved, resolve original ticket.&lt;br /&gt;
* If &amp;quot;[[FinanceApproval]]&amp;quot; is rejected, create an approval for &amp;quot;[[CEOApproval]]&amp;quot;.&lt;br /&gt;
* If &amp;quot;[[CEOApproval]]&amp;quot; is resolved, resolve the original ticket.&lt;br /&gt;
* If &amp;quot;[[CEOApproval]]&amp;quot; is rejected, reject the original ticket.&lt;br /&gt;
&lt;br /&gt;
== ASCII Diagram ==&lt;br /&gt;
&lt;br /&gt;
        ,----------.      ,----------------------&amp;amp;gt;[DONE]&lt;br /&gt;
        |           \    /                           ^&lt;br /&gt;
 [FLOW]-+-?----&amp;amp;gt;[M]----&amp;amp;gt;[F]                          |&lt;br /&gt;
        |        |  /    \                           |&lt;br /&gt;
        `-?-&amp;amp;gt;[P]-+-&amp;#039;      `-(!)-&amp;amp;gt;[C]-----------------&amp;#039;&lt;br /&gt;
              |  |                |&lt;br /&gt;
              |  |                `-(!)----------&amp;amp;gt;[FAIL]&lt;br /&gt;
              |  |                                   ^&lt;br /&gt;
              `-(!)----------------------------------&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Objects ==&lt;br /&gt;
&lt;br /&gt;
Note that &amp;quot;Scrips&amp;quot; are now called &amp;quot;Rules&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
(Audrey says that [[LockRuleset]] is needed, &amp;quot;to register dependency.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== RuleAction &amp;quot;AquireMyLocks&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
 FOREACH $Scrip IN $TicketObj-&amp;amp;gt;Scrips&lt;br /&gt;
   WHERE $Scrip.Action.Type == &amp;quot;TryCreateTicketWithRuleset&amp;quot;&lt;br /&gt;
      DO LockRuleset $Scrip.Action.Argument&lt;br /&gt;
&lt;br /&gt;
=== RuleAction &amp;quot;TryCreateTicketWithRuleset&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
 DO ReleaseMyLockOnRuleset $Argument&lt;br /&gt;
 UNLESS RulesetLocked $Argument&lt;br /&gt;
     DO CreateTicketWithRuleset $Argument&lt;br /&gt;
&lt;br /&gt;
=== GlobalRule &amp;quot;AquireLocks&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* [[AppliesTo]]: All Objects&lt;br /&gt;
* Condition: [[OnCreate]]&lt;br /&gt;
* Action: [[AquireMyLocks]]&lt;br /&gt;
&lt;br /&gt;
=== Queue &amp;quot;OrderRequest&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnCreate]]&lt;br /&gt;
** Action: [[SetTicketRuleSet]] &amp;quot;[[PurchaseFlow]]&amp;quot;&lt;br /&gt;
** Action: [[RunTicketRuleSet]] &amp;quot;[[PurchaseFlow]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== RuleSet &amp;quot;PurchaseFlow&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Rule (implicitly run by [[AcquireMyLocks]]):&lt;br /&gt;
** Condition: [[OnCreate]]&lt;br /&gt;
** Action: [[LockRuleSet]] &amp;quot;[[ManagerApproval]]&amp;quot;&lt;br /&gt;
** Action: [[LockRuleSet]] &amp;quot;[[PresidentApproval]]&amp;quot;&lt;br /&gt;
** Action: [[LockRuleSet]] &amp;quot;[[FinanceApproval]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnCreate]]&lt;br /&gt;
** Condition: CF.Price &amp;amp;gt; 1000&lt;br /&gt;
** Action: [[TryCreateTicketWithRuleset]] &amp;quot;Manager&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnCreate]]&lt;br /&gt;
** Condition: CF.Price &amp;amp;gt; 2000&lt;br /&gt;
** Action: [[TryCreateTicketWithRuleset]] &amp;quot;President&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnCreate]]&lt;br /&gt;
** Condition: &amp;quot;Finance&amp;quot; is not blocked&lt;br /&gt;
** Action: [[TryCreateTicketWithRuleset]] &amp;quot;Finance&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnReject]]&lt;br /&gt;
** Action: [[DeleteTree]]&lt;br /&gt;
&lt;br /&gt;
=== RuleSet: &amp;quot;ManagerApproval&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Rule (implicitly run by [[AcquireMyLocks]]):&lt;br /&gt;
** Condition: [[OnCreate]]&lt;br /&gt;
** Action: [[LockRuleSet]] &amp;quot;[[FinanceApproval]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnResolve]]&lt;br /&gt;
** Action: [[TryCreateTicketWithRuleset]] &amp;quot;[[FinanceApproval]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnReject]]&lt;br /&gt;
** Action: [[RejectTicket]] &amp;quot;[[PurchaseFlow]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== RuleSet: &amp;quot;PresidentApproval&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Rule (implicitly run by [[AcquireMyLocks]]):&lt;br /&gt;
** Condition: [[OnCreate]]&lt;br /&gt;
** Action: [[LockRuleSet]] &amp;quot;[[FinanceApproval]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnResolve]]&lt;br /&gt;
** Action: [[TryCreateTicketWithRuleset]] &amp;quot;[[FinanceApproval]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnReject]]&lt;br /&gt;
** Action: [[RejectTicket]] &amp;quot;[[PurchaseFlow]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== RuleSet: &amp;quot;FinanceApproval&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnResolve]]&lt;br /&gt;
** Action: [[ResolveTicket]] &amp;quot;[[PurchaseFlow]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnReject]]&lt;br /&gt;
** Action: [[ForceCreateTicketWithRuleset]] &amp;quot;[[CEOApproval]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== RuleSet: &amp;quot;CEOApproval&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnResolve]]&lt;br /&gt;
** Action: [[ResolveTicket]] &amp;quot;[[PurchaseFlow]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Rule:&lt;br /&gt;
** Condition: [[OnReject]]&lt;br /&gt;
** Action: [[RejectTicket]] &amp;quot;[[PurchaseFlow]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Another Text Description ==&lt;br /&gt;
&lt;br /&gt;
* I have a [[MonitoredQueue]] that sets tickets to &amp;quot;Monitored&amp;quot; if its subject matches /monitored/.&lt;br /&gt;
&lt;br /&gt;
* I want to have a kind of Ticket that are &amp;#039;Monitored&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* I want all monitored tickets, when they are overdue for 14 days, to:&lt;br /&gt;
** Send notification to manager&lt;br /&gt;
** Mark as stalled&lt;br /&gt;
&lt;br /&gt;
* I want all monitored tickets, when they are overdue for 28 days, to:&lt;br /&gt;
** Mark as rejected&lt;br /&gt;
&lt;br /&gt;
* I want to query all tickets that are monitored as such&lt;br /&gt;
&lt;br /&gt;
* I want to modify 14 =&amp;amp;gt; 15 and have it affect all existing tickets that are monitored&lt;br /&gt;
&lt;br /&gt;
* I want to add a new &amp;quot;overdue for 27 days, add a &amp;#039;ultimatum&amp;#039; correspondence to it&amp;quot; rule&lt;br /&gt;
** For all monitored tickets.&lt;br /&gt;
&lt;br /&gt;
* I want to add a new &amp;quot;overdue for 27 days, add a &amp;#039;ultimatum&amp;#039; correspondence to it&amp;quot; rule&lt;br /&gt;
** For all &amp;lt;u&amp;gt;new&amp;lt;/u&amp;gt; monitored tickets.&lt;br /&gt;
** Without affecting existing ones.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>