Files
Time-Series-Analysis/.venv/lib/python3.12/site-packages/holidays/countries/chile.py
2025-07-30 18:53:50 +03:00

269 lines
10 KiB
Python

# 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 <dr.prodigy.github@gmail.com> (c) 2017-2023
# ryanss <ryanssdev@icloud.com> (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:
* <https://web.archive.org/web/20250418020620/https://www.feriados.cl/>
* [Excellent history of Chile holidays](https://web.archive.org/web/20250124223839/https://www.feriadoschilenos.cl/)
* <https://es.wikipedia.org/wiki/Anexo:Días_feriados_en_Chile>
* 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),
}