# holidays # -------- # A fast, efficient Python library for generating country, province and state # specific sets of holidays on the fly. It aims to make determining whether a # specific date is a holiday as fast and flexible as possible. # # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file) # dr-prodigy (c) 2017-2023 # ryanss (c) 2014-2017 # Website: https://github.com/vacanza/holidays # License: MIT (see LICENSE file) from gettext import gettext as tr from holidays.calendars.gregorian import JUN, SEP, DEC from holidays.constants import BANK, PUBLIC from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays from holidays.observed_holiday_base import ( ObservedHolidayBase, MON_ONLY, MON_FRI_ONLY, TUE_TO_PREV_FRI, WED_TO_NEXT_FRI, FRI_ONLY, WORKDAY_TO_NEAREST_MON, ) class Chile(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays): """Chile holidays. References: * * [Excellent history of Chile holidays](https://web.archive.org/web/20250124223839/https://www.feriadoschilenos.cl/) * * Law 2.977 (established official Chile holidays in its current form) * Law 20.983 (Day after New Year's Day, if it's a Sunday) * Law 19.668 (floating Monday holiday) * Law 19.668 (Corpus Christi) * Law 2.200, (Labour Day) * Law 18.018 (Labour Day renamed) * Law 16.840, Law 18.432 (Saint Peter and Saint Paul) * Law 20.148 (Day of Virgin of Carmen) * Law 18.026 (Day of National Liberation) * Law 19.588, Law 19.793 (Day of National Unity) * Law 20.983 (National Holiday Friday preceding Independence Day) * Law 20.215 (National Holiday Monday preceding Independence Day) * Law 20.215 (National Holiday Friday following Army Day) * Decree-law 636, Law 8.223 * Law 3.810 (Columbus Day) * Law 20.299 (National Day of the Evangelical and Protestant Churches) * Law 20.663 (Región de Arica y Parinacota) * Law 20.678 (Región de Ñuble) * [Law 19.656 (Dec 31, 1999 holiday)](https://web.archive.org/web/20241228005823/https://www.bcn.cl/leychile/navegar?idNorma=149328&idVersion=1999-12-15) * [Law 12.051 (bank holidays Jun 30 and Dec 31)](https://web.archive.org/web/20241227190026/https://www.bcn.cl/leychile/navegar?idNorma=27013&idVersion=1956-07-12) * [Decree-law 1.171 (eliminate Jun 30)](https://web.archive.org/web/20241227191010/https://www.bcn.cl/leychile/navegar?idNorma=6507&idVersion=1975-09-05) * [Law 19.528 (eliminate Dec 31)](https://web.archive.org/web/20241227191452/https://www.bcn.cl/leychile/navegar?idNorma=76630&idVersion=1997-11-04) * [Law 19.559 (restore Dec 31)](https://web.archive.org/web/20241227195811/https://www.bcn.cl/leychile/navegar?idNorma=97758&idVersion=1998-04-16) """ country = "CL" default_language = "es" start_year = 1915 subdivisions = ( "AI", # Aisén del General Carlos Ibañez del Campo. "AN", # Antofagasta. "AP", # Arica y Parinacota. "AR", # La Araucanía. "AT", # Atacama. "BI", # Biobío. "CO", # Coquimbo. "LI", # Libertador General Bernardo O'Higgins. "LL", # Los Lagos. "LR", # Los Ríos. "MA", # Magallanes. "ML", # Maule. "NB", # Ñuble. "RM", # Región Metropolitana de Santiago. "TA", # Tarapacá. "VS", # Valparaíso. ) subdivisions_aliases = { "Aisén del General Carlos Ibañez del Campo": "AI", "Antofagasta": "AN", "Arica y Parinacota": "AP", "La Araucanía": "AR", "Atacama": "AT", "Biobío": "BI", "Coquimbo": "CO", "Libertador General Bernardo O'Higgins": "LI", "Los Lagos": "LL", "Los Ríos": "LR", "Magallanes": "MA", "Maule": "ML", "Ñuble": "NB", "Región Metropolitana de Santiago": "RM", "Tarapacá": "TA", "Valparaíso": "VS", } supported_categories = (BANK, PUBLIC) supported_languages = ("en_US", "es", "uk") def __init__(self, *args, **kwargs): ChristianHolidays.__init__(self) InternationalHolidays.__init__(self) StaticHolidays.__init__(self, ChileStaticHolidays) kwargs.setdefault("observed_rule", WORKDAY_TO_NEAREST_MON) kwargs.setdefault("observed_since", 2000) super().__init__(*args, **kwargs) def _populate_public_holidays(self): # New Year's Day. self._add_new_years_day(tr("Año Nuevo")) if self._year >= 2017: self._add_observed(self._add_new_years_day_two(tr("Feriado nacional")), rule=MON_ONLY) # Good Friday. self._add_good_friday(tr("Viernes Santo")) # Holy Saturday. self._add_holy_saturday(tr("Sábado Santo")) if self._year <= 1967: # Ascension Day. self._add_ascension_thursday(tr("Ascensión del Señor")) if self._year <= 1967 or 1987 <= self._year <= 2006: # Corpus Christi. name = tr("Corpus Christi") if self._year <= 1999: self._add_corpus_christi_day(name) else: self._add_holiday_57_days_past_easter(name) if self._year >= 1932: # Labor Day. self._add_labor_day(tr("Día Nacional del Trabajo")) # Naval Glories Day. self._add_holiday_may_21(tr("Día de las Glorias Navales")) if self._year >= 2021: # National Day of Indigenous Peoples. name = tr("Día Nacional de los Pueblos Indígenas") if self._year == 2021: self._add_holiday_jun_21(name) else: self._add_holiday(name, self._summer_solstice_date) if self._year <= 1967 or self._year >= 1986: # Saint Peter and Saint Paul's Day. self._move_holiday(self._add_saints_peter_and_paul_day(tr("San Pedro y San Pablo"))) if self._year >= 2007: # Day of Virgin of Carmen. self._add_holiday_jul_16(tr("Virgen del Carmen")) # Assumption Day. self._add_assumption_of_mary_day(tr("Asunción de la Virgen")) if 1981 <= self._year <= 1998: # Day of National Liberation. self._add_holiday_sep_11(tr("Día de la Liberación Nacional")) elif 1999 <= self._year <= 2001: # Day of National Unity. self._add_holiday_1st_mon_of_sep(tr("Día de la Unidad Nacional")) if self._year >= 2007: self._add_observed( # National Holiday. self._add_holiday_sep_17(tr("Fiestas Patrias")), rule=MON_FRI_ONLY if self._year >= 2017 else MON_ONLY, ) # Independence Day. self._add_holiday_sep_18(tr("Día de la Independencia")) # Army Day. self._add_holiday_sep_19(tr("Día de las Glorias del Ejército")) if self._year >= 2008: self._add_observed(self._add_holiday_sep_20(tr("Fiestas Patrias")), rule=FRI_ONLY) if 1932 <= self._year <= 1944: self._add_holiday_sep_20(tr("Fiestas Patrias")) if self._year >= 1922 and self._year != 1973: self._move_holiday( self._add_columbus_day( # Meeting of Two Worlds' Day. tr("Día del Encuentro de dos Mundos") if self._year >= 2000 # Columbus Day. else tr("Día de la Raza") ) ) if self._year >= 2008: # This holiday is moved to the preceding Friday if it falls on a Tuesday, # or to the following Friday if it falls on a Wednesday. self._move_holiday( self._add_holiday_oct_31( # National Day of the Evangelical and Protestant Churches. tr("Día Nacional de las Iglesias Evangélicas y Protestantes") ), rule=TUE_TO_PREV_FRI + WED_TO_NEXT_FRI, ) # All Saints' Day. self._add_all_saints_day(tr("Día de Todos los Santos")) # Immaculate Conception. self._add_immaculate_conception_day(tr("La Inmaculada Concepción")) if 1944 <= self._year <= 1988: # Christmas Eve. self._add_christmas_eve(tr("Víspera de Navidad")) # Christmas Day. self._add_christmas_day(tr("Navidad")) def _populate_subdiv_ap_public_holidays(self): if self._year >= 2013: # Assault and Capture of Cape Arica. self._add_holiday_jun_7(tr("Asalto y Toma del Morro de Arica")) def _populate_subdiv_nb_public_holidays(self): if self._year >= 2014: self._add_holiday_aug_20( # Nativity of Bernardo O'Higgins (Chillán and Chillán Viejo communes) tr("Nacimiento del Prócer de la Independencia (Chillán y Chillán Viejo)") ) def _populate_bank_holidays(self): # Bank Holiday. name = tr("Feriado bancario") if 1957 <= self._year <= 1975: self._add_holiday_jun_30(name) if self._year >= 1956 and self._year != 1997: self._add_holiday_dec_31(name) @property def _summer_solstice_date(self) -> tuple[int, int]: day = 20 if (self._year % 4 > 1 and self._year <= 2046) or ( self._year % 4 > 2 and self._year <= 2075 ): day = 21 return JUN, day class CL(Chile): pass class CHL(Chile): pass class ChileStaticHolidays: # National Holiday. national_holiday = tr("Feriado nacional") special_public_holidays = { 1999: (DEC, 31, national_holiday), 2022: (SEP, 16, national_holiday), }