dodil/erp-method
modules/product/process.bpmn
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dodil="https://git.dodil.io/dodil/erp-platform/bpmn/1" id="Definitions_product_v1" name="Products & price lists processes" targetNamespace="https://git.dodil.io/dodil/erp-platform/processes" exporter="erp-platform erp-compose bpmn" exporterVersion="1">
<bpmn:collaboration id="Collaboration_product_v1">
<bpmn:documentation>Products & price lists: one pool per entity lifecycle, generated from module.yaml.</bpmn:documentation>
<bpmn:participant id="Participant_product_product" name="Product" processRef="Process_product_product_v1" />
<bpmn:participant id="Participant_product_price_list" name="Price list" processRef="Process_product_price_list_v1" />
</bpmn:collaboration>
<bpmn:process id="Process_product_product_v1" name="Product" isExecutable="false">
<bpmn:documentation>Lifecycle of the product, generated from module.yaml by erp-compose bpmn; change the workflow there, not this file. States: draft, active, archived. Note: a product is never deleted once a document names it</bpmn:documentation>
<bpmn:laneSet id="LaneSet_product">
<bpmn:lane id="Lane_product_catalogue_manager" name="Whoever keeps the product list (operations, the owner)">
<bpmn:flowNodeRef>Start_product</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_add_product</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_generate_variants</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_set_units</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_complete_product</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_activate_product</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_add_unit</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_rename_product</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_archive_product</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_reactivate_product</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_product_none__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_set_units__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_set_units__if_end</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_add_unit__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_add_unit__if_end</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_product_archived__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>End_product_archived</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_product_system" name="The system">
<bpmn:flowNodeRef>Task_ai_check_duplicate</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_ai_suggest_details</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_ai_check_duplicate__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_ai_check_duplicate__if_end</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_ai_suggest_details__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_ai_suggest_details__if_end</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:startEvent id="Start_product" name="Product needed">
<bpmn:outgoing>Flow_Start_product__Gateway_product_none__if</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:userTask id="Task_add_product" name="Add the product" dodil:step="add_product">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From none to draft. When: the code is not in use. Effect: the code is fixed from now on.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_product_none__if__Task_add_product</bpmn:incoming>
<bpmn:outgoing>Flow_Task_add_product__Gateway_ai_check_duplicate__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:serviceTask id="Task_ai_check_duplicate" name="AI checks for a likely duplicate (suggest)" dodil:step="ai_check_duplicate" implementation="##unspecified">
<bpmn:documentation>By: The system. From draft to draft. When: the duplicate check is on. Effect: a likely duplicate is shown; nothing is merged.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_ai_check_duplicate__if__Task_ai_check_duplicate</bpmn:incoming>
<bpmn:outgoing>Flow_Task_ai_check_duplicate__Gateway_ai_check_duplicate__if_end</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_ai_suggest_details" name="AI suggests category, unit and tax category (suggest)" dodil:step="ai_suggest_details" implementation="##unspecified">
<bpmn:documentation>By: The system. From draft to draft. When: the field is empty and the step is on. Effect: a suggestion the catalogue manager accepts or changes.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_ai_suggest_details__if__Task_ai_suggest_details</bpmn:incoming>
<bpmn:outgoing>Flow_Task_ai_suggest_details__Gateway_ai_suggest_details__if_end</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:userTask id="Task_generate_variants" name="Generate the variants of a template" dodil:step="generate_variants">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From none to draft. When: a template with at least one attribute and its values. Effect: one draft product per missing combination; existing ones untouched.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_product_none__if__Task_generate_variants</bpmn:incoming>
<bpmn:outgoing>Flow_Task_generate_variants__Gateway_ai_check_duplicate__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_set_units" name="Set the base unit and the other units" dodil:step="set_units">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From draft to draft. When: every unit converts exactly to the base unit. Effect: purchase, sales and issue units chosen; packaging levels and their GTINs.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_set_units__if__Task_set_units</bpmn:incoming>
<bpmn:outgoing>Flow_Task_set_units__Gateway_set_units__if_end</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_complete_product" name="Complete unit, category, tax category and billing" dodil:step="complete_product">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From draft to draft.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_set_units__if_end__Task_complete_product</bpmn:incoming>
<bpmn:outgoing>Flow_Task_complete_product__Task_activate_product</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_activate_product" name="Activate the product" dodil:step="activate_product">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From draft to active. When: a base unit, a sales unit, tax category, billing type and invoicing policy set. Effect: offered to sales.</bpmn:documentation>
<bpmn:incoming>Flow_Task_complete_product__Task_activate_product</bpmn:incoming>
<bpmn:outgoing>Flow_Task_activate_product__Gateway_add_unit__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_add_unit" name="Add a unit or a pack size" dodil:step="add_unit">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From active to active. When: a new unit code with an exact conversion; a conversion already used is never changed. Effect: the new unit can be bought, sold or issued from now.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_add_unit__if__Task_add_unit</bpmn:incoming>
<bpmn:outgoing>Flow_Task_add_unit__Gateway_add_unit__if_end</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_rename_product" name="Change name or description" dodil:step="rename_product">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From active to active. Effect: documents already raised keep their copy.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_add_unit__if_end__Task_rename_product</bpmn:incoming>
<bpmn:outgoing>Flow_Task_rename_product__Task_archive_product</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_archive_product" name="Archive the product" dodil:step="archive_product">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From active to archived. Effect: no new lines; existing documents unchanged.</bpmn:documentation>
<bpmn:incoming>Flow_Task_rename_product__Task_archive_product</bpmn:incoming>
<bpmn:outgoing>Flow_Task_archive_product__Gateway_product_archived__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_reactivate_product" name="Reactivate the product" dodil:step="reactivate_product">
<bpmn:documentation>By: Whoever keeps the product list (operations, the owner). From archived to active. Requires: reason.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_product_archived__if__Task_reactivate_product</bpmn:incoming>
<bpmn:outgoing>Flow_Task_reactivate_product__Gateway_add_unit__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:exclusiveGateway id="Gateway_product_none__if" name="New product?">
<bpmn:incoming>Flow_Start_product__Gateway_product_none__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_product_none__if__Task_add_product</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_product_none__if__Task_generate_variants</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_ai_check_duplicate__if" name="the duplicate check is on?">
<bpmn:incoming>Flow_Task_add_product__Gateway_ai_check_duplicate__if</bpmn:incoming>
<bpmn:incoming>Flow_Task_generate_variants__Gateway_ai_check_duplicate__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_ai_check_duplicate__if__Task_ai_check_duplicate</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_ai_check_duplicate__if__Gateway_ai_check_duplicate__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_ai_check_duplicate__if_end">
<bpmn:incoming>Flow_Gateway_ai_check_duplicate__if__Gateway_ai_check_duplicate__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_ai_check_duplicate__Gateway_ai_check_duplicate__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_ai_check_duplicate__if_end__Gateway_ai_suggest_details__if</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_ai_suggest_details__if" name="the field is empty and the step is on?">
<bpmn:incoming>Flow_Gateway_ai_check_duplicate__if_end__Gateway_ai_suggest_details__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_ai_suggest_details__if__Task_ai_suggest_details</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_ai_suggest_details__if__Gateway_ai_suggest_details__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_ai_suggest_details__if_end">
<bpmn:incoming>Flow_Gateway_ai_suggest_details__if__Gateway_ai_suggest_details__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_ai_suggest_details__Gateway_ai_suggest_details__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_ai_suggest_details__if_end__Gateway_set_units__if</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_set_units__if" name="every unit converts exactly to the base unit?">
<bpmn:incoming>Flow_Gateway_ai_suggest_details__if_end__Gateway_set_units__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_set_units__if__Task_set_units</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_set_units__if__Gateway_set_units__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_set_units__if_end">
<bpmn:incoming>Flow_Gateway_set_units__if__Gateway_set_units__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_set_units__Gateway_set_units__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_set_units__if_end__Task_complete_product</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_add_unit__if" name="a new unit code with an exact conversion; a conversion already used is never changed?">
<bpmn:incoming>Flow_Task_activate_product__Gateway_add_unit__if</bpmn:incoming>
<bpmn:incoming>Flow_Task_reactivate_product__Gateway_add_unit__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_add_unit__if__Task_add_unit</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_add_unit__if__Gateway_add_unit__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_add_unit__if_end">
<bpmn:incoming>Flow_Gateway_add_unit__if__Gateway_add_unit__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_add_unit__Gateway_add_unit__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_add_unit__if_end__Task_rename_product</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_product_archived__if" name="Product archived: done, or go on?">
<bpmn:incoming>Flow_Task_archive_product__Gateway_product_archived__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_product_archived__if__Task_reactivate_product</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_product_archived__if__End_product_archived</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:endEvent id="End_product_archived" name="Product archived">
<bpmn:incoming>Flow_Gateway_product_archived__if__End_product_archived</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_Gateway_product_none__if__Task_add_product" sourceRef="Gateway_product_none__if" targetRef="Task_add_product" />
<bpmn:sequenceFlow id="Flow_Gateway_product_none__if__Task_generate_variants" sourceRef="Gateway_product_none__if" targetRef="Task_generate_variants" />
<bpmn:sequenceFlow id="Flow_Start_product__Gateway_product_none__if" sourceRef="Start_product" targetRef="Gateway_product_none__if" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_check_duplicate__if__Task_ai_check_duplicate" name="the duplicate check is on" sourceRef="Gateway_ai_check_duplicate__if" targetRef="Task_ai_check_duplicate" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_check_duplicate__if__Gateway_ai_check_duplicate__if_end" name="otherwise" sourceRef="Gateway_ai_check_duplicate__if" targetRef="Gateway_ai_check_duplicate__if_end" />
<bpmn:sequenceFlow id="Flow_Task_ai_check_duplicate__Gateway_ai_check_duplicate__if_end" sourceRef="Task_ai_check_duplicate" targetRef="Gateway_ai_check_duplicate__if_end" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_suggest_details__if__Task_ai_suggest_details" name="the field is empty and the step is on" sourceRef="Gateway_ai_suggest_details__if" targetRef="Task_ai_suggest_details" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_suggest_details__if__Gateway_ai_suggest_details__if_end" name="otherwise" sourceRef="Gateway_ai_suggest_details__if" targetRef="Gateway_ai_suggest_details__if_end" />
<bpmn:sequenceFlow id="Flow_Task_ai_suggest_details__Gateway_ai_suggest_details__if_end" sourceRef="Task_ai_suggest_details" targetRef="Gateway_ai_suggest_details__if_end" />
<bpmn:sequenceFlow id="Flow_Gateway_set_units__if__Task_set_units" name="every unit converts exactly to the base unit" sourceRef="Gateway_set_units__if" targetRef="Task_set_units" />
<bpmn:sequenceFlow id="Flow_Gateway_set_units__if__Gateway_set_units__if_end" name="otherwise" sourceRef="Gateway_set_units__if" targetRef="Gateway_set_units__if_end" />
<bpmn:sequenceFlow id="Flow_Task_set_units__Gateway_set_units__if_end" sourceRef="Task_set_units" targetRef="Gateway_set_units__if_end" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_check_duplicate__if_end__Gateway_ai_suggest_details__if" sourceRef="Gateway_ai_check_duplicate__if_end" targetRef="Gateway_ai_suggest_details__if" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_suggest_details__if_end__Gateway_set_units__if" sourceRef="Gateway_ai_suggest_details__if_end" targetRef="Gateway_set_units__if" />
<bpmn:sequenceFlow id="Flow_Gateway_set_units__if_end__Task_complete_product" sourceRef="Gateway_set_units__if_end" targetRef="Task_complete_product" />
<bpmn:sequenceFlow id="Flow_Task_complete_product__Task_activate_product" sourceRef="Task_complete_product" targetRef="Task_activate_product" />
<bpmn:sequenceFlow id="Flow_Task_add_product__Gateway_ai_check_duplicate__if" sourceRef="Task_add_product" targetRef="Gateway_ai_check_duplicate__if" />
<bpmn:sequenceFlow id="Flow_Task_generate_variants__Gateway_ai_check_duplicate__if" sourceRef="Task_generate_variants" targetRef="Gateway_ai_check_duplicate__if" />
<bpmn:sequenceFlow id="Flow_Gateway_add_unit__if__Task_add_unit" name="a new unit code with an exact conversion; a conversion already used is never changed" sourceRef="Gateway_add_unit__if" targetRef="Task_add_unit" />
<bpmn:sequenceFlow id="Flow_Gateway_add_unit__if__Gateway_add_unit__if_end" name="otherwise" sourceRef="Gateway_add_unit__if" targetRef="Gateway_add_unit__if_end" />
<bpmn:sequenceFlow id="Flow_Task_add_unit__Gateway_add_unit__if_end" sourceRef="Task_add_unit" targetRef="Gateway_add_unit__if_end" />
<bpmn:sequenceFlow id="Flow_Gateway_add_unit__if_end__Task_rename_product" sourceRef="Gateway_add_unit__if_end" targetRef="Task_rename_product" />
<bpmn:sequenceFlow id="Flow_Task_rename_product__Task_archive_product" sourceRef="Task_rename_product" targetRef="Task_archive_product" />
<bpmn:sequenceFlow id="Flow_Task_activate_product__Gateway_add_unit__if" sourceRef="Task_activate_product" targetRef="Gateway_add_unit__if" />
<bpmn:sequenceFlow id="Flow_Gateway_product_archived__if__Task_reactivate_product" sourceRef="Gateway_product_archived__if" targetRef="Task_reactivate_product" />
<bpmn:sequenceFlow id="Flow_Gateway_product_archived__if__End_product_archived" name="done" sourceRef="Gateway_product_archived__if" targetRef="End_product_archived" />
<bpmn:sequenceFlow id="Flow_Task_archive_product__Gateway_product_archived__if" sourceRef="Task_archive_product" targetRef="Gateway_product_archived__if" />
<bpmn:sequenceFlow id="Flow_Task_reactivate_product__Gateway_add_unit__if" sourceRef="Task_reactivate_product" targetRef="Gateway_add_unit__if" />
</bpmn:process>
<bpmn:process id="Process_product_price_list_v1" name="Price list" isExecutable="false">
<bpmn:documentation>Lifecycle of the price list, generated from module.yaml by erp-compose bpmn; change the workflow there, not this file. States: draft, published, retired. Note: the CURRENT price is derived on read from the dated rows (PRD-11); nothing stores it. One default per currency on any date: the latest default_from on or before it. Nothing changes a price for a date already past</bpmn:documentation>
<bpmn:laneSet id="LaneSet_price_list">
<bpmn:lane id="Lane_price_list_pricing_manager" name="Whoever sets prices (the owner, a commercial manager)">
<bpmn:flowNodeRef>Start_price_list</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_open_price_list</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_set_prices</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_publish_price_list</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_change_prices</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_assign_customer</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_retire_price_list</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_change_prices__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_change_prices__if_end</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_assign_customer__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_assign_customer__if_end</bpmn:flowNodeRef>
<bpmn:flowNodeRef>End_price_list_retired</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_price_list_system" name="The system">
<bpmn:flowNodeRef>Task_ai_price_check</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_ai_price_check__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_ai_price_check__if_end</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:startEvent id="Start_price_list" name="Price list needed">
<bpmn:outgoing>Flow_Start_price_list__Task_open_price_list</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:userTask id="Task_open_price_list" name="Open a price list" dodil:step="open_price_list">
<bpmn:documentation>By: Whoever sets prices (the owner, a commercial manager). From none to draft. When: a currency (ISO 4217); a base list in the same currency with the same VAT basis; rounding no finer than the currency's minor unit. Effect: based on another list, or standalone.</bpmn:documentation>
<bpmn:incoming>Flow_Start_price_list__Task_open_price_list</bpmn:incoming>
<bpmn:outgoing>Flow_Task_open_price_list__Task_set_prices</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_set_prices" name="Set prices and rules" dodil:step="set_prices">
<bpmn:documentation>By: Whoever sets prices (the owner, a commercial manager). From draft to draft. Effect: dated rows per product and unit, rules, and the list's default_from, all still editable; nothing visible to sales yet.</bpmn:documentation>
<bpmn:incoming>Flow_Task_open_price_list__Task_set_prices</bpmn:incoming>
<bpmn:outgoing>Flow_Task_set_prices__Gateway_ai_price_check__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:serviceTask id="Task_ai_price_check" name="AI flags unusual prices (suggest)" dodil:step="ai_price_check" implementation="##unspecified">
<bpmn:documentation>By: The system. From draft to draft. When: the price check is on. Effect: outliers against the base list and similar products are listed for the pricing manager.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_ai_price_check__if__Task_ai_price_check</bpmn:incoming>
<bpmn:outgoing>Flow_Task_ai_price_check__Gateway_ai_price_check__if_end</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:userTask id="Task_publish_price_list" name="Publish the price list" dodil:step="publish_price_list" dodil:approval="true">
<bpmn:documentation>By: Whoever sets prices (the owner, a commercial manager). From draft to published. When: every row and rule has a valid_from after today, or today while the currency has no published price yet; a default_from after today, or today for the first default list of a currency; the approver is not the author where the setting asks for one. Effect: sales prices from it on each row's valid_from; from its default_from it is the currency's default list. An approval.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_ai_price_check__if_end__Task_publish_price_list</bpmn:incoming>
<bpmn:outgoing>Flow_Task_publish_price_list__Gateway_change_prices__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_change_prices" name="Schedule a price change" dodil:step="change_prices" dodil:approval="true">
<bpmn:documentation>By: Whoever sets prices (the owner, a commercial manager). From published to published. When: every new row starts after today. Effect: new rows with a later valid_from; old rows are never edited. An approval.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_change_prices__if__Task_change_prices</bpmn:incoming>
<bpmn:outgoing>Flow_Task_change_prices__Gateway_change_prices__if_end</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_assign_customer" name="Assign customers to the list" dodil:step="assign_customer">
<bpmn:documentation>By: Whoever sets prices (the owner, a commercial manager). From published to published. When: the assignment starts after today. Effect: their prices in this currency resolve from this list from that date.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_assign_customer__if__Task_assign_customer</bpmn:incoming>
<bpmn:outgoing>Flow_Task_assign_customer__Gateway_assign_customer__if_end</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_retire_price_list" name="Retire the price list" dodil:step="retire_price_list">
<bpmn:documentation>By: Whoever sets prices (the owner, a commercial manager). From published to retired. When: not the default of its currency today or later, and not the base of another list or rule. Effect: assigned customers fall back to the default list; prices for past dates still resolve from it.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_assign_customer__if_end__Task_retire_price_list</bpmn:incoming>
<bpmn:outgoing>Flow_Task_retire_price_list__End_price_list_retired</bpmn:outgoing>
</bpmn:userTask>
<bpmn:exclusiveGateway id="Gateway_ai_price_check__if" name="the price check is on?">
<bpmn:incoming>Flow_Task_set_prices__Gateway_ai_price_check__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_ai_price_check__if__Task_ai_price_check</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_ai_price_check__if__Gateway_ai_price_check__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_ai_price_check__if_end">
<bpmn:incoming>Flow_Gateway_ai_price_check__if__Gateway_ai_price_check__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_ai_price_check__Gateway_ai_price_check__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_ai_price_check__if_end__Task_publish_price_list</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_change_prices__if" name="every new row starts after today?">
<bpmn:incoming>Flow_Task_publish_price_list__Gateway_change_prices__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_change_prices__if__Task_change_prices</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_change_prices__if__Gateway_change_prices__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_change_prices__if_end">
<bpmn:incoming>Flow_Gateway_change_prices__if__Gateway_change_prices__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_change_prices__Gateway_change_prices__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_change_prices__if_end__Gateway_assign_customer__if</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_assign_customer__if" name="the assignment starts after today?">
<bpmn:incoming>Flow_Gateway_change_prices__if_end__Gateway_assign_customer__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_assign_customer__if__Task_assign_customer</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_assign_customer__if__Gateway_assign_customer__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_assign_customer__if_end">
<bpmn:incoming>Flow_Gateway_assign_customer__if__Gateway_assign_customer__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_assign_customer__Gateway_assign_customer__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_assign_customer__if_end__Task_retire_price_list</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:endEvent id="End_price_list_retired" name="Price list retired">
<bpmn:incoming>Flow_Task_retire_price_list__End_price_list_retired</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_Start_price_list__Task_open_price_list" sourceRef="Start_price_list" targetRef="Task_open_price_list" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_price_check__if__Task_ai_price_check" name="the price check is on" sourceRef="Gateway_ai_price_check__if" targetRef="Task_ai_price_check" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_price_check__if__Gateway_ai_price_check__if_end" name="otherwise" sourceRef="Gateway_ai_price_check__if" targetRef="Gateway_ai_price_check__if_end" />
<bpmn:sequenceFlow id="Flow_Task_ai_price_check__Gateway_ai_price_check__if_end" sourceRef="Task_ai_price_check" targetRef="Gateway_ai_price_check__if_end" />
<bpmn:sequenceFlow id="Flow_Task_set_prices__Gateway_ai_price_check__if" sourceRef="Task_set_prices" targetRef="Gateway_ai_price_check__if" />
<bpmn:sequenceFlow id="Flow_Gateway_ai_price_check__if_end__Task_publish_price_list" sourceRef="Gateway_ai_price_check__if_end" targetRef="Task_publish_price_list" />
<bpmn:sequenceFlow id="Flow_Task_open_price_list__Task_set_prices" sourceRef="Task_open_price_list" targetRef="Task_set_prices" />
<bpmn:sequenceFlow id="Flow_Gateway_change_prices__if__Task_change_prices" name="every new row starts after today" sourceRef="Gateway_change_prices__if" targetRef="Task_change_prices" />
<bpmn:sequenceFlow id="Flow_Gateway_change_prices__if__Gateway_change_prices__if_end" name="otherwise" sourceRef="Gateway_change_prices__if" targetRef="Gateway_change_prices__if_end" />
<bpmn:sequenceFlow id="Flow_Task_change_prices__Gateway_change_prices__if_end" sourceRef="Task_change_prices" targetRef="Gateway_change_prices__if_end" />
<bpmn:sequenceFlow id="Flow_Gateway_assign_customer__if__Task_assign_customer" name="the assignment starts after today" sourceRef="Gateway_assign_customer__if" targetRef="Task_assign_customer" />
<bpmn:sequenceFlow id="Flow_Gateway_assign_customer__if__Gateway_assign_customer__if_end" name="otherwise" sourceRef="Gateway_assign_customer__if" targetRef="Gateway_assign_customer__if_end" />
<bpmn:sequenceFlow id="Flow_Task_assign_customer__Gateway_assign_customer__if_end" sourceRef="Task_assign_customer" targetRef="Gateway_assign_customer__if_end" />
<bpmn:sequenceFlow id="Flow_Gateway_change_prices__if_end__Gateway_assign_customer__if" sourceRef="Gateway_change_prices__if_end" targetRef="Gateway_assign_customer__if" />
<bpmn:sequenceFlow id="Flow_Gateway_assign_customer__if_end__Task_retire_price_list" sourceRef="Gateway_assign_customer__if_end" targetRef="Task_retire_price_list" />
<bpmn:sequenceFlow id="Flow_Task_publish_price_list__Gateway_change_prices__if" sourceRef="Task_publish_price_list" targetRef="Gateway_change_prices__if" />
<bpmn:sequenceFlow id="Flow_Task_retire_price_list__End_price_list_retired" sourceRef="Task_retire_price_list" targetRef="End_price_list_retired" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_product_v1">
<bpmndi:BPMNPlane id="BPMNPlane_product_v1" bpmnElement="Collaboration_product_v1">
<bpmndi:BPMNShape id="Participant_product_product_di" bpmnElement="Participant_product_product" isHorizontal="true">
<dc:Bounds x="0" y="0" width="3000" height="520" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_product_catalogue_manager_di" bpmnElement="Lane_product_catalogue_manager" isHorizontal="true">
<dc:Bounds x="30" y="0" width="2970" height="260" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_product_system_di" bpmnElement="Lane_product_system" isHorizontal="true">
<dc:Bounds x="30" y="260" width="2970" height="260" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Start_product_di" bpmnElement="Start_product">
<dc:Bounds x="157" y="42" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_add_product_di" bpmnElement="Task_add_product">
<dc:Bounds x="465" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_ai_check_duplicate_di" bpmnElement="Task_ai_check_duplicate">
<dc:Bounds x="805" y="280" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_ai_suggest_details_di" bpmnElement="Task_ai_suggest_details">
<dc:Bounds x="1145" y="280" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_generate_variants_di" bpmnElement="Task_generate_variants">
<dc:Bounds x="465" y="140" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_set_units_di" bpmnElement="Task_set_units">
<dc:Bounds x="1485" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_complete_product_di" bpmnElement="Task_complete_product">
<dc:Bounds x="1655" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_activate_product_di" bpmnElement="Task_activate_product">
<dc:Bounds x="1825" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_add_unit_di" bpmnElement="Task_add_unit">
<dc:Bounds x="2165" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_rename_product_di" bpmnElement="Task_rename_product">
<dc:Bounds x="2335" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_archive_product_di" bpmnElement="Task_archive_product">
<dc:Bounds x="2505" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_reactivate_product_di" bpmnElement="Task_reactivate_product">
<dc:Bounds x="2845" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_product_none__if_di" bpmnElement="Gateway_product_none__if">
<dc:Bounds x="320" y="35" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ai_check_duplicate__if_di" bpmnElement="Gateway_ai_check_duplicate__if">
<dc:Bounds x="660" y="295" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ai_check_duplicate__if_end_di" bpmnElement="Gateway_ai_check_duplicate__if_end">
<dc:Bounds x="830" y="415" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ai_suggest_details__if_di" bpmnElement="Gateway_ai_suggest_details__if">
<dc:Bounds x="1000" y="295" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ai_suggest_details__if_end_di" bpmnElement="Gateway_ai_suggest_details__if_end">
<dc:Bounds x="1170" y="415" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_set_units__if_di" bpmnElement="Gateway_set_units__if">
<dc:Bounds x="1340" y="35" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_set_units__if_end_di" bpmnElement="Gateway_set_units__if_end">
<dc:Bounds x="1510" y="155" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_add_unit__if_di" bpmnElement="Gateway_add_unit__if">
<dc:Bounds x="2020" y="35" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_add_unit__if_end_di" bpmnElement="Gateway_add_unit__if_end">
<dc:Bounds x="2190" y="155" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_product_archived__if_di" bpmnElement="Gateway_product_archived__if">
<dc:Bounds x="2700" y="35" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="End_product_archived_di" bpmnElement="End_product_archived">
<dc:Bounds x="2877" y="162" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_Gateway_product_none__if__Task_add_product_di" bpmnElement="Flow_Gateway_product_none__if__Task_add_product">
<di:waypoint x="370" y="60" />
<di:waypoint x="465" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_product_none__if__Task_generate_variants_di" bpmnElement="Flow_Gateway_product_none__if__Task_generate_variants">
<di:waypoint x="370" y="60" />
<di:waypoint x="440" y="60" />
<di:waypoint x="440" y="180" />
<di:waypoint x="465" y="180" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Start_product__Gateway_product_none__if_di" bpmnElement="Flow_Start_product__Gateway_product_none__if">
<di:waypoint x="193" y="60" />
<di:waypoint x="320" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_check_duplicate__if__Task_ai_check_duplicate_di" bpmnElement="Flow_Gateway_ai_check_duplicate__if__Task_ai_check_duplicate">
<di:waypoint x="710" y="320" />
<di:waypoint x="805" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_check_duplicate__if__Gateway_ai_check_duplicate__if_end_di" bpmnElement="Flow_Gateway_ai_check_duplicate__if__Gateway_ai_check_duplicate__if_end">
<di:waypoint x="710" y="320" />
<di:waypoint x="805" y="320" />
<di:waypoint x="805" y="440" />
<di:waypoint x="830" y="440" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_ai_check_duplicate__Gateway_ai_check_duplicate__if_end_di" bpmnElement="Flow_Task_ai_check_duplicate__Gateway_ai_check_duplicate__if_end">
<di:waypoint x="855" y="360" />
<di:waypoint x="855" y="480" />
<di:waypoint x="855" y="480" />
<di:waypoint x="855" y="465" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_suggest_details__if__Task_ai_suggest_details_di" bpmnElement="Flow_Gateway_ai_suggest_details__if__Task_ai_suggest_details">
<di:waypoint x="1050" y="320" />
<di:waypoint x="1145" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_suggest_details__if__Gateway_ai_suggest_details__if_end_di" bpmnElement="Flow_Gateway_ai_suggest_details__if__Gateway_ai_suggest_details__if_end">
<di:waypoint x="1050" y="320" />
<di:waypoint x="1145" y="320" />
<di:waypoint x="1145" y="440" />
<di:waypoint x="1170" y="440" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_ai_suggest_details__Gateway_ai_suggest_details__if_end_di" bpmnElement="Flow_Task_ai_suggest_details__Gateway_ai_suggest_details__if_end">
<di:waypoint x="1195" y="360" />
<di:waypoint x="1195" y="486" />
<di:waypoint x="1195" y="486" />
<di:waypoint x="1195" y="465" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_set_units__if__Task_set_units_di" bpmnElement="Flow_Gateway_set_units__if__Task_set_units">
<di:waypoint x="1390" y="60" />
<di:waypoint x="1485" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_set_units__if__Gateway_set_units__if_end_di" bpmnElement="Flow_Gateway_set_units__if__Gateway_set_units__if_end">
<di:waypoint x="1390" y="60" />
<di:waypoint x="1485" y="60" />
<di:waypoint x="1485" y="180" />
<di:waypoint x="1510" y="180" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_set_units__Gateway_set_units__if_end_di" bpmnElement="Flow_Task_set_units__Gateway_set_units__if_end">
<di:waypoint x="1535" y="100" />
<di:waypoint x="1535" y="232" />
<di:waypoint x="1535" y="232" />
<di:waypoint x="1535" y="205" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_check_duplicate__if_end__Gateway_ai_suggest_details__if_di" bpmnElement="Flow_Gateway_ai_check_duplicate__if_end__Gateway_ai_suggest_details__if">
<di:waypoint x="880" y="440" />
<di:waypoint x="975" y="440" />
<di:waypoint x="975" y="320" />
<di:waypoint x="1000" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_suggest_details__if_end__Gateway_set_units__if_di" bpmnElement="Flow_Gateway_ai_suggest_details__if_end__Gateway_set_units__if">
<di:waypoint x="1220" y="440" />
<di:waypoint x="1315" y="440" />
<di:waypoint x="1315" y="60" />
<di:waypoint x="1340" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_set_units__if_end__Task_complete_product_di" bpmnElement="Flow_Gateway_set_units__if_end__Task_complete_product">
<di:waypoint x="1560" y="180" />
<di:waypoint x="1630" y="180" />
<di:waypoint x="1630" y="60" />
<di:waypoint x="1655" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_complete_product__Task_activate_product_di" bpmnElement="Flow_Task_complete_product__Task_activate_product">
<di:waypoint x="1755" y="60" />
<di:waypoint x="1825" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_add_product__Gateway_ai_check_duplicate__if_di" bpmnElement="Flow_Task_add_product__Gateway_ai_check_duplicate__if">
<di:waypoint x="565" y="60" />
<di:waypoint x="635" y="60" />
<di:waypoint x="635" y="320" />
<di:waypoint x="660" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_generate_variants__Gateway_ai_check_duplicate__if_di" bpmnElement="Flow_Task_generate_variants__Gateway_ai_check_duplicate__if">
<di:waypoint x="565" y="180" />
<di:waypoint x="635" y="180" />
<di:waypoint x="635" y="320" />
<di:waypoint x="660" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_add_unit__if__Task_add_unit_di" bpmnElement="Flow_Gateway_add_unit__if__Task_add_unit">
<di:waypoint x="2070" y="60" />
<di:waypoint x="2165" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_add_unit__if__Gateway_add_unit__if_end_di" bpmnElement="Flow_Gateway_add_unit__if__Gateway_add_unit__if_end">
<di:waypoint x="2070" y="60" />
<di:waypoint x="2165" y="60" />
<di:waypoint x="2165" y="180" />
<di:waypoint x="2190" y="180" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_add_unit__Gateway_add_unit__if_end_di" bpmnElement="Flow_Task_add_unit__Gateway_add_unit__if_end">
<di:waypoint x="2215" y="100" />
<di:waypoint x="2215" y="238" />
<di:waypoint x="2215" y="238" />
<di:waypoint x="2215" y="205" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_add_unit__if_end__Task_rename_product_di" bpmnElement="Flow_Gateway_add_unit__if_end__Task_rename_product">
<di:waypoint x="2240" y="180" />
<di:waypoint x="2310" y="180" />
<di:waypoint x="2310" y="60" />
<di:waypoint x="2335" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_rename_product__Task_archive_product_di" bpmnElement="Flow_Task_rename_product__Task_archive_product">
<di:waypoint x="2435" y="60" />
<di:waypoint x="2505" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_activate_product__Gateway_add_unit__if_di" bpmnElement="Flow_Task_activate_product__Gateway_add_unit__if">
<di:waypoint x="1925" y="60" />
<di:waypoint x="2020" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_product_archived__if__Task_reactivate_product_di" bpmnElement="Flow_Gateway_product_archived__if__Task_reactivate_product">
<di:waypoint x="2750" y="60" />
<di:waypoint x="2845" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_product_archived__if__End_product_archived_di" bpmnElement="Flow_Gateway_product_archived__if__End_product_archived">
<di:waypoint x="2750" y="60" />
<di:waypoint x="2852" y="60" />
<di:waypoint x="2852" y="180" />
<di:waypoint x="2877" y="180" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_archive_product__Gateway_product_archived__if_di" bpmnElement="Flow_Task_archive_product__Gateway_product_archived__if">
<di:waypoint x="2605" y="60" />
<di:waypoint x="2700" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_reactivate_product__Gateway_add_unit__if_di" bpmnElement="Flow_Task_reactivate_product__Gateway_add_unit__if">
<di:waypoint x="2895" y="100" />
<di:waypoint x="2895" y="115" />
<di:waypoint x="2045" y="115" />
<di:waypoint x="2045" y="85" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Participant_product_price_list_di" bpmnElement="Participant_product_price_list" isHorizontal="true">
<dc:Bounds x="0" y="560" width="2150" height="520" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_price_list_pricing_manager_di" bpmnElement="Lane_price_list_pricing_manager" isHorizontal="true">
<dc:Bounds x="30" y="560" width="2120" height="260" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_price_list_system_di" bpmnElement="Lane_price_list_system" isHorizontal="true">
<dc:Bounds x="30" y="820" width="2120" height="260" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Start_price_list_di" bpmnElement="Start_price_list">
<dc:Bounds x="157" y="602" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_open_price_list_di" bpmnElement="Task_open_price_list">
<dc:Bounds x="295" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_set_prices_di" bpmnElement="Task_set_prices">
<dc:Bounds x="465" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_ai_price_check_di" bpmnElement="Task_ai_price_check">
<dc:Bounds x="805" y="840" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_publish_price_list_di" bpmnElement="Task_publish_price_list">
<dc:Bounds x="975" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_change_prices_di" bpmnElement="Task_change_prices">
<dc:Bounds x="1315" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_assign_customer_di" bpmnElement="Task_assign_customer">
<dc:Bounds x="1655" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_retire_price_list_di" bpmnElement="Task_retire_price_list">
<dc:Bounds x="1825" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ai_price_check__if_di" bpmnElement="Gateway_ai_price_check__if">
<dc:Bounds x="660" y="855" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ai_price_check__if_end_di" bpmnElement="Gateway_ai_price_check__if_end">
<dc:Bounds x="830" y="975" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_change_prices__if_di" bpmnElement="Gateway_change_prices__if">
<dc:Bounds x="1170" y="595" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_change_prices__if_end_di" bpmnElement="Gateway_change_prices__if_end">
<dc:Bounds x="1340" y="715" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_assign_customer__if_di" bpmnElement="Gateway_assign_customer__if">
<dc:Bounds x="1510" y="595" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_assign_customer__if_end_di" bpmnElement="Gateway_assign_customer__if_end">
<dc:Bounds x="1680" y="715" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="End_price_list_retired_di" bpmnElement="End_price_list_retired">
<dc:Bounds x="2027" y="602" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_Start_price_list__Task_open_price_list_di" bpmnElement="Flow_Start_price_list__Task_open_price_list">
<di:waypoint x="193" y="620" />
<di:waypoint x="295" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_price_check__if__Task_ai_price_check_di" bpmnElement="Flow_Gateway_ai_price_check__if__Task_ai_price_check">
<di:waypoint x="710" y="880" />
<di:waypoint x="805" y="880" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_price_check__if__Gateway_ai_price_check__if_end_di" bpmnElement="Flow_Gateway_ai_price_check__if__Gateway_ai_price_check__if_end">
<di:waypoint x="710" y="880" />
<di:waypoint x="805" y="880" />
<di:waypoint x="805" y="1000" />
<di:waypoint x="830" y="1000" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_ai_price_check__Gateway_ai_price_check__if_end_di" bpmnElement="Flow_Task_ai_price_check__Gateway_ai_price_check__if_end">
<di:waypoint x="855" y="920" />
<di:waypoint x="855" y="1040" />
<di:waypoint x="855" y="1040" />
<di:waypoint x="855" y="1025" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_set_prices__Gateway_ai_price_check__if_di" bpmnElement="Flow_Task_set_prices__Gateway_ai_price_check__if">
<di:waypoint x="565" y="620" />
<di:waypoint x="635" y="620" />
<di:waypoint x="635" y="880" />
<di:waypoint x="660" y="880" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_ai_price_check__if_end__Task_publish_price_list_di" bpmnElement="Flow_Gateway_ai_price_check__if_end__Task_publish_price_list">
<di:waypoint x="880" y="1000" />
<di:waypoint x="950" y="1000" />
<di:waypoint x="950" y="620" />
<di:waypoint x="975" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_open_price_list__Task_set_prices_di" bpmnElement="Flow_Task_open_price_list__Task_set_prices">
<di:waypoint x="395" y="620" />
<di:waypoint x="465" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_change_prices__if__Task_change_prices_di" bpmnElement="Flow_Gateway_change_prices__if__Task_change_prices">
<di:waypoint x="1220" y="620" />
<di:waypoint x="1315" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_change_prices__if__Gateway_change_prices__if_end_di" bpmnElement="Flow_Gateway_change_prices__if__Gateway_change_prices__if_end">
<di:waypoint x="1220" y="620" />
<di:waypoint x="1315" y="620" />
<di:waypoint x="1315" y="740" />
<di:waypoint x="1340" y="740" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_change_prices__Gateway_change_prices__if_end_di" bpmnElement="Flow_Task_change_prices__Gateway_change_prices__if_end">
<di:waypoint x="1365" y="660" />
<di:waypoint x="1365" y="786" />
<di:waypoint x="1365" y="786" />
<di:waypoint x="1365" y="765" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_assign_customer__if__Task_assign_customer_di" bpmnElement="Flow_Gateway_assign_customer__if__Task_assign_customer">
<di:waypoint x="1560" y="620" />
<di:waypoint x="1655" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_assign_customer__if__Gateway_assign_customer__if_end_di" bpmnElement="Flow_Gateway_assign_customer__if__Gateway_assign_customer__if_end">
<di:waypoint x="1560" y="620" />
<di:waypoint x="1655" y="620" />
<di:waypoint x="1655" y="740" />
<di:waypoint x="1680" y="740" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_assign_customer__Gateway_assign_customer__if_end_di" bpmnElement="Flow_Task_assign_customer__Gateway_assign_customer__if_end">
<di:waypoint x="1705" y="660" />
<di:waypoint x="1705" y="792" />
<di:waypoint x="1705" y="792" />
<di:waypoint x="1705" y="765" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_change_prices__if_end__Gateway_assign_customer__if_di" bpmnElement="Flow_Gateway_change_prices__if_end__Gateway_assign_customer__if">
<di:waypoint x="1390" y="740" />
<di:waypoint x="1485" y="740" />
<di:waypoint x="1485" y="620" />
<di:waypoint x="1510" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_assign_customer__if_end__Task_retire_price_list_di" bpmnElement="Flow_Gateway_assign_customer__if_end__Task_retire_price_list">
<di:waypoint x="1730" y="740" />
<di:waypoint x="1800" y="740" />
<di:waypoint x="1800" y="620" />
<di:waypoint x="1825" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_publish_price_list__Gateway_change_prices__if_di" bpmnElement="Flow_Task_publish_price_list__Gateway_change_prices__if">
<di:waypoint x="1075" y="620" />
<di:waypoint x="1170" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_retire_price_list__End_price_list_retired_di" bpmnElement="Flow_Task_retire_price_list__End_price_list_retired">
<di:waypoint x="1925" y="620" />
<di:waypoint x="2027" y="620" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>