From d937a1c7eaa6c207ff603f7576dd302f504b1f3a Mon Sep 17 00:00:00 2001 From: jze9 Date: Thu, 19 Jun 2025 16:46:23 +0500 Subject: [PATCH] start --- .gitignore | 11 +++ .python-version | 1 + README.md | 0 main.py | 183 ++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 10 +++ uv.lock | 153 +++++++++++++++++++++++++++++++++++ МУ по заполнению.docx | Bin 0 -> 16574 bytes 7 files changed, 358 insertions(+) create mode 100644 .gitignore create mode 100644 .python-version create mode 100644 README.md create mode 100644 main.py create mode 100644 pyproject.toml create mode 100644 uv.lock create mode 100644 МУ по заполнению.docx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b03178e --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Python-generated files +__pycache__/ +*.py[oc] +build/ +dist/ +wheels/ +*.egg-info + +# Virtual environments +.venv +*.xlsx \ No newline at end of file diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/main.py b/main.py new file mode 100644 index 0000000..98d46ed --- /dev/null +++ b/main.py @@ -0,0 +1,183 @@ +import pandas as pd +import math +from openpyxl import load_workbook +from openpyxl.styles import PatternFill +from openpyxl.utils import get_column_letter + +class read_drop_table: + def __init__(self, path: str, sheet: str): + db = pd.read_excel(path, sheet_name=sheet) + self.grafa2 = db["Графа 2"].dropna().tolist() + self.grafa4 = db["Графы 4"].dropna().tolist() + self.grafa6 = db["Графа 6"].dropna().tolist() + self.grafa7 = db["Графа 7"].dropna().tolist() + self.grafa9 = db["Графа 9"].dropna().tolist() + self.grafa10 = db["Графа 10"].dropna().tolist() + self.grafa14 = db["Графа 14"].dropna().tolist() + self.grafa5811 = db["Графы 5,8,11"].dropna().tolist() + +class read_collection_form: + def __init__(self, path: str, sheet: str): + self.path = path + self.sheet = sheet + self.db = pd.read_excel(path, sheet_name=sheet, header=10) + + # Оставим только строки, где указан субъект РФ + self.db = self.db.dropna(subset=["9"]) + self.load_openpyxl() + + def load_openpyxl(self): + self.wb = load_workbook(self.path) + self.ws = self.wb[self.sheet] + + def paint_green(self, address: str): + green_fill = PatternFill(start_color="90EE90", end_color="90EE90", fill_type="solid") + self.ws[address].fill = green_fill + + def paint_red(self, address: str): + red_fill = PatternFill(start_color="FF7F7F", end_color="FF7F7F", fill_type="solid") + self.ws[address].fill = red_fill + + def rerol_column(self, row, row_index): + status = row.values[4] # графа 4: статус обучающегося + graf9_value = row.values[9] if len(row.values) > 9 else None + graf5_value = row.values[5] if len(row.values) > 5 else None + + for column_index, cell in enumerate(row.values): + address = get_column_letter(column_index + 1) + str(row_index + 12) + + match column_index: + case 0 | 1 | 3: + if pd.isna(cell): + self.paint_red(address) + else: + self.paint_green(address) + + case 2: + if cell in temp.grafa2: + self.paint_green(address) + else: + self.paint_red(address) + + case 4: + if pd.isna(cell): + self.paint_red(address) + elif cell in temp.grafa4: + self.paint_green(address) + else: + self.paint_red(address) + + case 5: + if pd.isna(cell): + self.paint_red(address) + elif cell in temp.grafa5811: + self.paint_green(address) + else: + self.paint_red(address) + + case 6: + if pd.isna(cell): + self.paint_green(address) + elif cell in temp.grafa6: + self.paint_green(address) + else: + self.paint_red(address) + + case 7: + if pd.isna(cell): + self.paint_green(address) + elif cell in temp.grafa7: + self.paint_green(address) + else: + self.paint_red(address) + + case 9: + if pd.isna(cell): + if row.values[4] == "не завершил обучение: отчислен по собственному желанию": + self.paint_green(address) + else: + self.paint_red(address) + elif cell in temp.grafa9: + self.paint_green(address) + else: + self.paint_red(address) + + case 10: + if graf9_value in [ + "зарегистрирован в ЦЗН в качестве безработного (получает пособие по безработице)", + "не планирует трудоустраиваться, в том числе по причинам получения иных социальных льгот" + ]: + if pd.isna(cell): + self.paint_red(address) + elif cell in temp.grafa10: + self.paint_green(address) + else: + self.paint_red(address) + + case 11: + if graf9_value in [ + "трудоустроен у иного работодателя", + "будет трудоустроен у иного работодателя" + ]: + if pd.isna(cell): + pass + elif cell in temp.grafa5811: + self.paint_green(address) + else: + self.paint_red(address) + + case 12 | 13: + if graf9_value in [ + "трудоустроен у иного работодателя", + "будет трудоустроен у иного работодателя" + ]: + if pd.isna(cell): + self.paint_red(address) + else: + self.paint_green(address) + + case 14: + if graf5_value == "да": + if graf9_value not in [ + "трудоустроен у работодателя-партнера кластера", + "будет трудоустроен у работодателя-партнера кластера" + ]: + self.paint_red(address) + else: + self.paint_green(address) + + def iterate_rows(self): + for row_index, row in self.db.iterrows(): + self.rerol_column(row=row, row_index=row_index) + self.wb.save(self.path) + + +import os + +def list_files_in_current_directory(extension_filter=None): + # Получаем путь к папке, где находится скрипт + current_dir = os.path.dirname(os.path.abspath(__file__)) + + # Список всех файлов + all_files = [] + for file in os.listdir(current_dir): + full_path = os.path.join(current_dir, file) + if os.path.isfile(full_path): + if extension_filter: + if file.lower().endswith(extension_filter.lower()): + all_files.append(full_path) + else: + all_files.append(full_path) + + return all_files + +# Получить все файлы +files = list_files_in_current_directory() + +# Только .xlsx файлы +xlsx_files = list_files_in_current_directory(".xlsx") + +for path in xlsx_files: + temp = read_drop_table(path=path, sheet="Выпадающие списки") + temp1 = read_collection_form(path=path, sheet="Форма сбора").iterate_rows() + diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8bae4ac --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,10 @@ +[project] +name = "parser-copp1" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "openpyxl>=3.1.5", + "pandas>=2.3.0", +] diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..3f70fd0 --- /dev/null +++ b/uv.lock @@ -0,0 +1,153 @@ +version = 1 +revision = 2 +requires-python = ">=3.12" + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813, upload-time = "2025-06-07T14:54:32.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/59/9df493df81ac6f76e9f05cdbe013cdb0c9a37b434f6e594f5bd25e278908/numpy-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:389b85335838155a9076e9ad7f8fdba0827496ec2d2dc32ce69ce7898bde03ba", size = 20897025, upload-time = "2025-06-07T14:40:33.558Z" }, + { url = "https://files.pythonhosted.org/packages/2f/86/4ff04335901d6cf3a6bb9c748b0097546ae5af35e455ae9b962ebff4ecd7/numpy-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9498f60cd6bb8238d8eaf468a3d5bb031d34cd12556af53510f05fcf581c1b7e", size = 14129882, upload-time = "2025-06-07T14:40:55.034Z" }, + { url = "https://files.pythonhosted.org/packages/71/8d/a942cd4f959de7f08a79ab0c7e6cecb7431d5403dce78959a726f0f57aa1/numpy-2.3.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:622a65d40d8eb427d8e722fd410ac3ad4958002f109230bc714fa551044ebae2", size = 5110181, upload-time = "2025-06-07T14:41:04.4Z" }, + { url = "https://files.pythonhosted.org/packages/86/5d/45850982efc7b2c839c5626fb67fbbc520d5b0d7c1ba1ae3651f2f74c296/numpy-2.3.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b9446d9d8505aadadb686d51d838f2b6688c9e85636a0c3abaeb55ed54756459", size = 6647581, upload-time = "2025-06-07T14:41:14.695Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c0/c871d4a83f93b00373d3eebe4b01525eee8ef10b623a335ec262b58f4dc1/numpy-2.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:50080245365d75137a2bf46151e975de63146ae6d79f7e6bd5c0e85c9931d06a", size = 14262317, upload-time = "2025-06-07T14:41:35.862Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f6/bc47f5fa666d5ff4145254f9e618d56e6a4ef9b874654ca74c19113bb538/numpy-2.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c24bb4113c66936eeaa0dc1e47c74770453d34f46ee07ae4efd853a2ed1ad10a", size = 16633919, upload-time = "2025-06-07T14:42:00.622Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b4/65f48009ca0c9b76df5f404fccdea5a985a1bb2e34e97f21a17d9ad1a4ba/numpy-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4d8d294287fdf685281e671886c6dcdf0291a7c19db3e5cb4178d07ccf6ecc67", size = 15567651, upload-time = "2025-06-07T14:42:24.429Z" }, + { url = "https://files.pythonhosted.org/packages/f1/62/5367855a2018578e9334ed08252ef67cc302e53edc869666f71641cad40b/numpy-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6295f81f093b7f5769d1728a6bd8bf7466de2adfa771ede944ce6711382b89dc", size = 18361723, upload-time = "2025-06-07T14:42:51.167Z" }, + { url = "https://files.pythonhosted.org/packages/d4/75/5baed8cd867eabee8aad1e74d7197d73971d6a3d40c821f1848b8fab8b84/numpy-2.3.0-cp312-cp312-win32.whl", hash = "sha256:e6648078bdd974ef5d15cecc31b0c410e2e24178a6e10bf511e0557eed0f2570", size = 6318285, upload-time = "2025-06-07T14:43:02.052Z" }, + { url = "https://files.pythonhosted.org/packages/bc/49/d5781eaa1a15acb3b3a3f49dc9e2ff18d92d0ce5c2976f4ab5c0a7360250/numpy-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:0898c67a58cdaaf29994bc0e2c65230fd4de0ac40afaf1584ed0b02cd74c6fdd", size = 12732594, upload-time = "2025-06-07T14:43:21.071Z" }, + { url = "https://files.pythonhosted.org/packages/c2/1c/6d343e030815c7c97a1f9fbad00211b47717c7fe446834c224bd5311e6f1/numpy-2.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:bd8df082b6c4695753ad6193018c05aac465d634834dca47a3ae06d4bb22d9ea", size = 9891498, upload-time = "2025-06-07T14:43:36.332Z" }, + { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633, upload-time = "2025-06-07T14:44:06.839Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683, upload-time = "2025-06-07T14:44:28.847Z" }, + { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683, upload-time = "2025-06-07T14:44:38.417Z" }, + { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253, upload-time = "2025-06-07T14:44:49.359Z" }, + { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658, upload-time = "2025-06-07T14:45:10.156Z" }, + { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765, upload-time = "2025-06-07T14:45:35.076Z" }, + { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335, upload-time = "2025-06-07T14:45:58.797Z" }, + { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608, upload-time = "2025-06-07T14:46:25.687Z" }, + { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005, upload-time = "2025-06-07T14:50:13.138Z" }, + { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093, upload-time = "2025-06-07T14:50:31.82Z" }, + { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689, upload-time = "2025-06-07T14:50:47.888Z" }, + { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612, upload-time = "2025-06-07T14:46:56.077Z" }, + { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953, upload-time = "2025-06-07T14:47:18.053Z" }, + { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806, upload-time = "2025-06-07T14:47:27.524Z" }, + { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169, upload-time = "2025-06-07T14:47:38.057Z" }, + { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701, upload-time = "2025-06-07T14:47:59.113Z" }, + { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983, upload-time = "2025-06-07T14:48:24.196Z" }, + { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435, upload-time = "2025-06-07T14:48:47.712Z" }, + { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798, upload-time = "2025-06-07T14:49:14.866Z" }, + { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632, upload-time = "2025-06-07T14:49:25.67Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491, upload-time = "2025-06-07T14:49:44.898Z" }, + { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345, upload-time = "2025-06-07T14:50:02.311Z" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490, upload-time = "2025-06-05T03:27:54.133Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/46/24192607058dd607dbfacdd060a2370f6afb19c2ccb617406469b9aeb8e7/pandas-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf", size = 11573865, upload-time = "2025-06-05T03:26:46.774Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cc/ae8ea3b800757a70c9fdccc68b67dc0280a6e814efcf74e4211fd5dea1ca/pandas-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027", size = 10702154, upload-time = "2025-06-05T16:50:14.439Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ba/a7883d7aab3d24c6540a2768f679e7414582cc389876d469b40ec749d78b/pandas-2.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09", size = 11262180, upload-time = "2025-06-05T16:50:17.453Z" }, + { url = "https://files.pythonhosted.org/packages/01/a5/931fc3ad333d9d87b10107d948d757d67ebcfc33b1988d5faccc39c6845c/pandas-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d", size = 11991493, upload-time = "2025-06-05T03:26:51.813Z" }, + { url = "https://files.pythonhosted.org/packages/d7/bf/0213986830a92d44d55153c1d69b509431a972eb73f204242988c4e66e86/pandas-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20", size = 12470733, upload-time = "2025-06-06T00:00:18.651Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/21eb48a3a34a7d4bac982afc2c4eb5ab09f2d988bdf29d92ba9ae8e90a79/pandas-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b", size = 13212406, upload-time = "2025-06-05T03:26:55.992Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d9/74017c4eec7a28892d8d6e31ae9de3baef71f5a5286e74e6b7aad7f8c837/pandas-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be", size = 10976199, upload-time = "2025-06-05T03:26:59.594Z" }, + { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913, upload-time = "2025-06-05T03:27:02.757Z" }, + { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249, upload-time = "2025-06-05T16:50:20.17Z" }, + { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359, upload-time = "2025-06-05T03:27:06.431Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789, upload-time = "2025-06-05T03:27:09.875Z" }, + { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734, upload-time = "2025-06-06T00:00:22.246Z" }, + { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381, upload-time = "2025-06-05T03:27:15.641Z" }, + { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135, upload-time = "2025-06-05T03:27:24.131Z" }, + { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356, upload-time = "2025-06-05T03:27:34.547Z" }, + { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674, upload-time = "2025-06-05T03:27:39.448Z" }, + { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876, upload-time = "2025-06-05T03:27:43.652Z" }, + { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182, upload-time = "2025-06-05T03:27:47.652Z" }, + { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686, upload-time = "2025-06-06T00:00:26.142Z" }, + { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847, upload-time = "2025-06-05T03:27:51.465Z" }, +] + +[[package]] +name = "parser-copp1" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "openpyxl" }, + { name = "pandas" }, +] + +[package.metadata] +requires-dist = [ + { name = "openpyxl", specifier = ">=3.1.5" }, + { name = "pandas", specifier = ">=2.3.0" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, +] diff --git a/МУ по заполнению.docx b/МУ по заполнению.docx new file mode 100644 index 0000000000000000000000000000000000000000..beb29e64bad39001a810ba52418939ca4be5c251 GIT binary patch literal 16574 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 literal 0 HcmV?d00001