def test_unemployment_a_periods_switching_to_e(self): """unemployment_a_periods when job seeker starts a training.""" job_seeker = fhs.JobSeeker({ 'de': [ { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1', }, { 'DATINS': datetime.date(2015, 12, 22), 'DATANN': datetime.date(2015, 12, 31), 'CATREGR': '5', }, ], 'e0': [], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 12, 22), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1' })]), periods)
def test_unemployment_a_periods_useless_change(self): """unemployment_a_periods whith a change from CATREGR 1 to 2.""" job_seeker = fhs.JobSeeker({ 'de': [ { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'bbb', }, { 'DATINS': datetime.date(2015, 12, 22), 'DATANN': datetime.date(2015, 12, 31), 'CATREGR': '2', 'MOTINS': 'ccc', 'MOTANN': 'ddd', }, ], 'e0': [], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 12, 31), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 31), 'CATREGR': '2', 'MOTINS': 'aaa', 'MOTANN': 'ddd' })]), periods)
def test_unemployment_a_periods_switching_to_b(self): """unemployment_a_periods when job seeker starts partial work.""" job_seeker = fhs.JobSeeker({ 'de': [{ 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1', }], 'e0': [{ 'MOIS': '201510' }, { 'MOIS': '201511' }, { 'MOIS': '201512' }], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([ (datetime.date(2015, 5, 1), datetime.date(2015, 10, 1), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 10, 1), 'CATREGR': '1', 'MOTANN': fhs.CancellationReason.STARTING_PART_TIME_WORK }) ]), periods)
def test_unemployment_a_periods(self): """Basic usage of unemployment_a_periods.""" job_seeker = fhs.JobSeeker({ 'de': [{ 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1', }], 'e0': [], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 5, 22), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1' })]), periods)
def test_unemployment_a_periods_mistakenly_kicked_out(self): """unemployment_a_periods with a mistaken kick-out. Frequently some job seeker forget the required monthly updated of their data, or do not show up at a mandatory meeting with their counselor. When that happens Pôle Emploi kicks them out of their register (and stop the allowance). Usually the job seeker would then re-register very quickly to get their allowance back. We identify periods where a job seeker left the unemployment system for a short period, and treat such gaps as if they had never left. """ job_seeker = fhs.JobSeeker({ 'de': [ { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 7, 31), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'bbb', }, { 'DATINS': datetime.date(2015, 8, 12), 'DATANN': datetime.date(2015, 10, 31), 'CATREGR': '1', 'MOTINS': 'ccc', 'MOTANN': 'ddd', }, { 'DATINS': datetime.date(2015, 11, 13), 'DATANN': None, 'CATREGR': '1', 'MOTINS': 'eee', 'MOTANN': 'fff', }, ], 'e0': [], }) # The first two periods should be merged, but not the last one. periods = job_seeker.unemployment_a_periods(cover_holes_up_to=12) self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 10, 31), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 10, 31), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'ddd' }), (datetime.date(2015, 11, 13), None, { 'DATINS': datetime.date(2015, 11, 13), 'DATANN': None, 'CATREGR': '1', 'MOTINS': 'eee', 'MOTANN': 'fff' })]), periods) self.assertEqual( fhs.Period( datetime.date(2015, 5, 1), datetime.date(2015, 10, 31), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 10, 31), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'ddd' }), periods.first_contiguous_period())
def test_get_training_periods(self) -> None: """Basic usages of all_training_periods.""" job_seeker = fhs.JobSeeker( 1, '21', { 'de': [{ 'IDX': '1.0', 'DATINS': datetime.date(2013, 5, 1), 'DATANN': datetime.date(2013, 5, 22), 'CATREGR': '1', 'ROME': 'H1234', 'DEPCOM': 'Here', 'MOTINS': 'A', 'SEXE': '1', }, { 'IDX': '1.0', 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1', 'ROME': 'B1234', 'DEPCOM': 'There', 'MOTINS': 'A', 'SEXE': '1', }], 'p2': [{ 'IDX': '1.0', 'P2DATDEB': datetime.date(2013, 5, 25), 'P2DATFIN': datetime.date(2013, 5, 30), 'FORMACOD': '42745', 'OBJFORM': '1', 'P2NIVFOR': 1, }, { 'IDX': '1.0', 'P2DATDEB': datetime.date(2016, 5, 1), 'P2DATFIN': datetime.date(2016, 5, 10), 'FORMACOD': '31685', 'OBJFORM': 'A', 'P2NIVFOR': 2, }] }) periods = job_seeker.all_training_periods() expected_periods = fhs.DateIntervals([ (datetime.date(2013, 5, 25), datetime.date(2013, 5, 30), { 'IDX': '1.0', 'P2DATDEB': datetime.date(2013, 5, 25), 'P2DATFIN': datetime.date(2013, 5, 30), 'FORMACOD': '42745', 'OBJFORM': '1', 'ROME': 'H1234', 'DEPCOM': 'Here', 'P2NIVFOR': 1, }), (datetime.date(2016, 5, 1), datetime.date(2016, 5, 10), { 'IDX': '1.0', 'P2DATDEB': datetime.date(2016, 5, 1), 'P2DATFIN': datetime.date(2016, 5, 10), 'FORMACOD': '31685', 'OBJFORM': 'A', 'ROME': 'B1234', 'DEPCOM': 'There', 'P2NIVFOR': 2, }), ]) self.assertEqual(expected_periods, periods)