Project

General

Profile

Download (11.3 KB) Statistics
| Branch: | Tag: | Revision:

calebasse / calebasse / facturation / tests.py @ 355359bb

1
# -*- coding: utf-8 -*-
2
from datetime import datetime
3
from dateutil import rrule
4

    
5
from django.test import TestCase
6
from django.contrib.auth.models import User
7

    
8
from calebasse.actes.validation import automated_validation, \
9
    are_all_acts_of_the_day_locked, \
10
    get_days_with_acts_not_locked
11
from calebasse.actes.models import EventAct
12
from calebasse.dossiers.models import create_patient, \
13
    SessadHealthCareNotification, CmppHealthCareTreatment, CmppHealthCareDiagnostic
14
from calebasse.ressources.models import ActType, Service, WorkerType
15
from calebasse.personnes.models import Worker
16

    
17
from list_acts import list_acts_for_billing_CAMSP, \
18
    list_acts_for_billing_SESSAD
19

    
20

    
21
class FacturationTest(TestCase):
22
    def setUp(self):
23
        self.creator = User.objects.create(username='John')
24

    
25
        self.wtype = WorkerType.objects.create(name='ElDoctor', intervene=True)
26
        self.therapist1 = Worker.objects.create(first_name='Bob', last_name='Leponge', type=self.wtype)
27
        self.therapist2 = Worker.objects.create(first_name='Jean', last_name='Valjean', type=self.wtype)
28
        self.therapist3 = Worker.objects.create(first_name='Pierre', last_name='PaulJacques', type=self.wtype)
29
        self.act_type = ActType.objects.create(name='trepanation')
30

    
31
    def test_facturation_camsp(self):
32
        service_camsp = Service.objects.create(name='CAMSP')
33

    
34
        patient_a = create_patient('a', 'A', service_camsp, self.creator, date_selected=datetime(2020, 10, 5))
35
        act0 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
36
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 6, 10, 15),
37
                end_datetime=datetime(2020, 10, 6, 12, 20))
38
        patient_a.set_state('CAMSP_STATE_SUIVI', self.creator, date_selected=datetime(2020, 10, 7))
39
        act1 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
40
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 7, 10, 15),
41
                end_datetime=datetime(2020, 10, 7, 12, 20))
42
        act2 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
43
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 7, 14, 15),
44
                end_datetime=datetime(2020, 10, 7, 16, 20))
45
        act3 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
46
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 7, 16, 20),
47
                end_datetime=datetime(2020, 10, 7, 17, 20))
48
        patient_a.set_state('CAMSP_STATE_CLOS', self.creator, date_selected=datetime(2020, 10, 8))
49
        act4 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
50
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 8, 10, 15),
51
                end_datetime=datetime(2020, 10, 8, 12, 20))
52

    
53
        patient_b = create_patient('b', 'B', service_camsp, self.creator, date_selected=datetime(2020, 10, 4))
54
        act5 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_b, [self.therapist3],
55
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 4, 10, 15),
56
                end_datetime=datetime(2020, 10, 4, 12, 20))
57
        act6 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_b, [self.therapist3],
58
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 5, 10, 15),
59
                end_datetime=datetime(2020, 10, 5, 12, 20))
60
        act6.set_state('ABS_EXC', self.creator)
61
        act7 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_b, [self.therapist3],
62
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 5, 10, 15),
63
                end_datetime=datetime(2020, 10, 5, 12, 20))
64
        act7.switch_billable = True
65
        act7.save()
66
        patient_b.set_state('CAMSP_STATE_SUIVI', self.creator, date_selected=datetime(2020, 10, 6))
67
        act8 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_b, [self.therapist3],
68
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 7, 10, 15),
69
                end_datetime=datetime(2020, 10, 7, 12, 20))
70
        act9 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_b, [self.therapist3],
71
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 7, 14, 15),
72
                end_datetime=datetime(2020, 10, 7, 16, 20))
73
        act10 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_b, [self.therapist3],
74
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 7, 16, 20),
75
                end_datetime=datetime(2020, 10, 7, 17, 20))
76
        act11 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_b, [self.therapist3],
77
                self.act_type, service_camsp, start_datetime=datetime(2020, 10, 8, 10, 15),
78
                end_datetime=datetime(2020, 10, 8, 12, 20))
79
        patient_b.set_state('CAMSP_STATE_CLOS', self.creator, date_selected=datetime(2020, 10, 9))
80

    
81
        automated_validation(datetime(2020, 10, 5), service_camsp, self.creator)
82
        automated_validation(datetime(2020, 10, 6), service_camsp, self.creator)
83
        automated_validation(datetime(2020, 10, 7), service_camsp, self.creator)
84
        automated_validation(datetime(2020, 10, 8), service_camsp, self.creator)
85

    
86
        not_locked, days_not_locked, not_valide, not_billable, rejected, selected = \
87
            list_acts_for_billing_CAMSP(datetime(2020, 10, 4), datetime(2020, 10, 8), service_camsp)
88

    
89
        self.assertEqual(len(days_not_locked), 1)
90

    
91
        self.assertTrue(act1 in selected[patient_a])
92
        self.assertTrue(act2 in selected[patient_a])
93
        self.assertTrue(act3 in selected[patient_a])
94
        acts_rejected = [x[0] for x in rejected[patient_a]]
95
        self.assertTrue(act0 in acts_rejected)
96
        self.assertTrue(act4 in acts_rejected)
97

    
98
        acts_not_locked = [x[0] for x in not_locked[patient_b]]
99
        self.assertTrue(act5 in acts_not_locked)
100
        acts_not_valide = [x[0] for x in not_valide[patient_b]]
101
        self.assertTrue(act6 in acts_not_valide)
102
        self.assertTrue(act7 in not_billable[patient_b])
103
        self.assertTrue(act8 in selected[patient_b])
104
        self.assertTrue(act9 in selected[patient_b])
105
        self.assertTrue(act10 in selected[patient_b])
106
        self.assertTrue(act11 in selected[patient_b])
107

    
108
        states = patient_b.get_states_history()
109
        patient_b.change_day_selected_of_state(states[2], datetime(2020, 10, 7))
110
        not_locked, days_not_locked, not_valide, not_billable, rejected, selected = \
111
            list_acts_for_billing_CAMSP(datetime(2020, 10, 4), datetime(2020, 10, 8), service_camsp)
112
        acts_not_locked = [x[0] for x in not_locked[patient_b]]
113
        self.assertTrue(act5 in acts_not_locked)
114
        acts_not_valide = [x[0] for x in not_valide[patient_b]]
115
        self.assertTrue(act6 in acts_not_valide)
116
        self.assertTrue(act7 in not_billable[patient_b])
117
        acts_rejected = [x[0] for x in rejected[patient_b]]
118
        self.assertTrue(act8 in acts_rejected)
119
        self.assertTrue(act9 in acts_rejected)
120
        self.assertTrue(act10 in acts_rejected)
121
        self.assertTrue(act11 in acts_rejected)
122

    
123
        states = patient_b.get_states_history()
124
        patient_b.change_day_selected_of_state(states[2], datetime(2020, 10, 9))
125
        patient_b.change_day_selected_of_state(states[1], datetime(2020, 10, 8))
126
        not_locked, days_not_locked, not_valide, not_billable, rejected, selected = \
127
            list_acts_for_billing_CAMSP(datetime(2020, 10, 4), datetime(2020, 10, 8), service_camsp)
128
        acts_not_locked = [x[0] for x in not_locked[patient_b]]
129
        self.assertTrue(act5 in acts_not_locked)
130
        acts_not_valide = [x[0] for x in not_valide[patient_b]]
131
        self.assertTrue(act6 in acts_not_valide)
132
        self.assertTrue(act7 in not_billable[patient_b])
133
        acts_rejected = [x[0] for x in rejected[patient_b]]
134
        self.assertTrue(act8 in acts_rejected)
135
        self.assertTrue(act9 in acts_rejected)
136
        self.assertTrue(act10 in acts_rejected)
137
        self.assertTrue(act11 in selected[patient_b])
138

    
139
    def test_facturation_sessad(self):
140
        service_sessad = Service.objects.create(name='SESSAD')
141

    
142
        patient_a = create_patient('a', 'A', service_sessad, self.creator, date_selected=datetime(2020, 10, 5))
143
        act0 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
144
                self.act_type, service_sessad, start_datetime=datetime(2020, 10, 6, 10, 15),
145
                end_datetime=datetime(2020, 10, 6, 12, 20))
146
        patient_a.set_state('SESSAD_STATE_TRAITEMENT', self.creator, date_selected=datetime(2020, 10, 7))
147
        act1 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
148
                self.act_type, service_sessad, start_datetime=datetime(2020, 10, 7, 10, 15),
149
                end_datetime=datetime(2020, 10, 7, 12, 20))
150
        act2 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
151
                self.act_type, service_sessad, start_datetime=datetime(2020, 10, 7, 14, 15),
152
                end_datetime=datetime(2020, 10, 7, 16, 20))
153
        act3 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
154
                self.act_type, service_sessad, start_datetime=datetime(2020, 10, 7, 16, 20),
155
                end_datetime=datetime(2020, 10, 7, 17, 20))
156
        patient_a.set_state('SESSAD_STATE_CLOS', self.creator, date_selected=datetime(2020, 10, 8))
157
        act4 = EventAct.objects.create_patient_appointment(self.creator, 'RDV', patient_a, [self.therapist3],
158
                self.act_type, service_sessad, start_datetime=datetime(2020, 10, 8, 10, 15),
159
                end_datetime=datetime(2020, 10, 8, 12, 20))
160

    
161
        automated_validation(datetime(2020, 10, 6), service_sessad, self.creator)
162
        automated_validation(datetime(2020, 10, 7), service_sessad, self.creator)
163
        automated_validation(datetime(2020, 10, 8), service_sessad, self.creator)
164

    
165
        not_locked, days_not_locked, not_valide, not_billable, rejected, missing_valid_notification, selected = \
166
            list_acts_for_billing_SESSAD(datetime(2020, 10, 4), datetime(2020, 10, 8), service_sessad)
167
        self.assertEqual(not_locked, {})
168
        self.assertEqual(not_valide, {})
169
        self.assertEqual(not_billable, {})
170
        self.assertEqual(len(rejected[patient_a]), 2)
171
        self.assertEqual(len(missing_valid_notification[patient_a]), 3)
172
        self.assertEqual(selected, {})
173

    
174
        SessadHealthCareNotification(patient=patient_a, author=self.creator, start_date=datetime(2020,10,7), end_date=datetime(2021,10,6)).save()
175
        not_locked, days_not_locked, not_valide, not_billable, rejected, missing_valid_notification, selected = \
176
            list_acts_for_billing_SESSAD(datetime(2020, 10, 4), datetime(2020, 10, 8), service_sessad)
177
        self.assertEqual(not_locked, {})
178
        self.assertEqual(not_valide, {})
179
        self.assertEqual(not_billable, {})
180
        self.assertEqual(len(rejected[patient_a]), 2)
181
        self.assertEqual(missing_valid_notification, {})
182
        self.assertEqual(len(selected[patient_a]), 3)
(5-5/7)