| Patient Logic Flow Diagram | Doctor Logic Flow Diagrams | |
![]() | ![]() | |
| Nurse Logic Flow Diagrams | ||
![]() | ||
Once the content has been established (note this is usually an iterative process) we can identify the inputs and outputs: appointment times, interarrival times, triage times, test times, treatment times, waiting times for triage, testing, and treatment (i.e., Patient arrives to Nurse triages Patient, Nurse triages Patient to Nurse performs test on Patient, Nurse performs test on Patient to Doctor sees Patient, Nurse triages Patient to Doctor sees Patient, Patient arrives to Doctor sees Patient), total clinic time (Patient arrives to Outside), number in waiting room.
Assumptions are used to define stochasticity (e.g., Exponential interarrivals, Triangular treatment times) and the simplifications keep the system simple (e.g., single doctors and nurses on all day for triage, testing, and treatment, no registration, no prioritisation).
Return to top
Select the PatientEntity and add a Test attribute to the AttributeDefinitionList by adding { Test 0} to the list.
Now add a distribution that determines if a Walk-Up patient needs a test or not. Add a DiscreteDistribution object from Model Palette > Probability Distributions. Name it TestDistribution and edit it so that 30% of Walk-Up patients require tests.
| Object | Graphics | Key Inputs |
|---|---|---|
| TestDistribution | Position = 1 -2.5 0.0 m | UnitType = DimensionlessUnit, ValueList = 0 1, ProbabilityList = 0.7 0.3 |
'this.obj.Test = [TestDistribution].Value' } to AttributeAssignmentList.
Save your simulation.
Next, create two new servers (Process Flow > Server), one for triage and one for testing. Name then NurseTriage and NurseTest respectively and give them the nurse.png (icon made by Freepik from www.flaticon.com
Rename the ArriveToTreat EntityConveyor to be ArriveToTriage and change NextComponent to be NurseTriage. You can redirect the EntityConveyor by clicking on it, then Ctrl-clicking on its end point and dragging it to where you want it to be. Redirect ArriveToTriage as shown below:
Next, we need to add the branching for the potential test. Add a Branch object (Model Palette > Process Flow > Branch) and name it TestBranch. Now add 3 more EntityConveyors: TriageToDoctor, TriageToTest, TestToDoctor. TestBranch and the 3 conveyors are shown below (TriageToTest going horizontal left to right, TriageToDoctor diagonally down left, TestToDoctor diagonally down left).
Next, make sure that the flow of the patients through the triage and test conveyors and servers is set correctly. The TestBranch object uses the value of the entities' Test attribute with 1 added to it to transform it from a {0, 1} value to a {1, 2} value (JaamSim starts lists at 1 not 0), so a patient that doesn't need a test (Test = 0) goes to the first component in the list, i.e., TriageToDoctor conveyor.
| Object | Key Inputs |
|---|---|
| ArriveToTriage | NextComponent = NurseTriage |
| NurseTriage | NextComponent = TestBranch |
| TestBranch | NextComponentList = TriageToDoctor TriageToTest, Choice = 'this.obj.Test + 1' |
| TriageToDoctor | NextComponent = Doctor, TravelTime = 2 min |
| TriageToTest | NextComponent = NurseTest, TravelTime = 2 min |
| NurseTest | NextComponent = TestToDoctor |
| TriageToDoctor | NextComponent = Doctor, TravelTime = 2 min |
| Object | Key Inputs |
|---|---|
| NurseTriage | WaitQueue = TriageQueue, StateAssignment = Triage, ServiceTime = TriageDistribution |
| NurseTest | WaitQueue = TestQueue, StateAssignment = Test, ServiceTime = 10 min |
| TriageDistribution | UnitType = TimeUnit, MinValue = 2 min, MaxValue = 15 min, Mode = 8 min |
| Object | Key Inputs |
|---|---|
| WalkupQueue | StateAssignment = WaitTreat |
| AppointmentQueue | StateAssignment = WaitTreat |
| TriageQueue | StateAssignment = WaitTriage |
| TestQueue | StateAssignment = WaitTest |
| PatientEntity | DefaultStateList = { Arrive WaitTreat WaitTriage WaitTest Treat Triage Test Leave } |
| Object | Key Inputs |
|---|---|
| TimeInSystem | SampleValue = 'this.obj.StateTimes([[Arrive]]) + this.obj.StateTimes([[WaitTriage]]) + this.obj.StateTimes([[Triage]]) + this.obj.StateTimes([[WaitTest]]) + this.obj.StateTimes([[Test]]) + this.obj.StateTimes([[WaitTreat]]) + this.obj.StateTimes([[Treat]]) + this.obj.StateTimes([[Leave]])' |
| WaitingTime | NextComponent = WaitingTriage SampleValue = 'this.obj.StateTimes([[WaitTriage]]) + this.obj.StateTimes([[WaitTest]]) + this.obj.StateTimes([[WaitTreat]])' |
| TimeInSystem2 | SampleValue = 'this.obj.StateTimes([[Arrive]]) + this.obj.StateTimes([[WaitTreat]]) + this.obj.StateTimes([[Treat]]) + this.obj.StateTimes([[Leave]])' |
| WaitingTime2 | NextComponent = WaitingTriage SampleValue = this.obj.StateTimes([[WaitTreat]]) |
| WaitingTriage (New Statistics component) | UnitType = TimeUnit NextComponent = WaitingTest SampleValue = this.obj.StateTimes([[WaitTriage]]) |
| WaitingTest (New Statistics component) | UnitType = TimeUnit NextComponent = WaitingTreat SampleValue = this.obj.StateTimes([[WaitTest]]) |
| WaitingTreat (New Statistics component) | UnitType = TimeUnit NextComponent = PatientWalkupSink SampleValue = this.obj.StateTimes([[WaitTreat]]) |
| Simulation | UnitTypeList = DimensionlessUnit TimeUnit TimeUnit TimeUnit TimeUnit TimeUnit DimensionlessUnit DimensionlessUnit TimeUnit TimeUnit DimensionlessUnit DimensionlessUnit RunOutputList = { [Simulation].RunIndex(1) } { [WaitingTriage].SampleAverage } { [WaitingTest].SampleAverage } { [WaitingTreat].SampleAverage } { [WaitingTime].SampleAverage } { [TimeInSystem].SampleAverage } { [WalkupQueue].QueueLengthAverage } { [Doctor].Utilisation } { [WaitingTime2].SampleAverage } { [TimeInSystem2].SampleAverage } { [AppointmentQueue].QueueLengthAverage } { '[Doctor2Appointment].Utilisation + [Doctor2Walkup].Utilisation' } |
| I | Attachment | History | Action | Size | Date | Who | Comment |
|---|---|---|---|---|---|---|---|
| |
Lab3Analysis.R | r1 | manage | 1.7 K | 2017-09-28 - 04:05 | MichaelOSullivan | |
| |
nurse.png | r1 | manage | 5.1 K | 2017-09-28 - 02:44 | MichaelOSullivan |