From 53ccbafb428b7969a974348a74dd875c555d61fb Mon Sep 17 00:00:00 2001 From: mukundesh Date: Thu, 7 Mar 2024 00:23:09 +0530 Subject: [PATCH] virgin commit --- .copier-answers.yml | 4 + .gitattributes | 15 + .github/PULL_REQUEST_TEMPLATE.md | 24 + .github/workflows/translateGR.yml | 51 ++ .gitignore | 163 +++++ .pre-commit-config.yaml | 28 + CHANGELOG.md | 0 CONTRIBUTING.md | 0 LICENSE.txt | 22 + README.md | 98 +++ THANKS.md | 27 + export/orgpedia_mahplan2024/__init__.py | 2 + export/orgpedia_mahplan2024/datapackage.json | 1 + flow/src/export.py | 51 ++ flow/src/word_recognizer.py | 73 ++ flow/writeTxt_/conf/README.md | 1 + flow/writeTxt_/conf/cmaps/sakalmarathi.yml | 713 +++++++++++++++++++ flow/writeTxt_/conf/glossary.yml | 617 ++++++++++++++++ flow/writeTxt_/input/README.md | 1 + flow/writeTxt_/logs/README.md | 1 + flow/writeTxt_/makefile | 12 + flow/writeTxt_/output/README.md | 1 + flow/writeTxt_/src/writeTxt.py | 43 ++ flow/writeTxt_/src/writeTxt.yml | 46 ++ import/documents/README.md | 4 + import/src/build_documents.py | 78 ++ makefile | 59 ++ pyproject.toml | 99 +++ 28 files changed, 2234 insertions(+) create mode 100644 .copier-answers.yml create mode 100644 .gitattributes create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/translateGR.yml create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 THANKS.md create mode 100644 export/orgpedia_mahplan2024/__init__.py create mode 100644 export/orgpedia_mahplan2024/datapackage.json create mode 100644 flow/src/export.py create mode 100644 flow/src/word_recognizer.py create mode 100644 flow/writeTxt_/conf/README.md create mode 100644 flow/writeTxt_/conf/cmaps/sakalmarathi.yml create mode 100644 flow/writeTxt_/conf/glossary.yml create mode 100644 flow/writeTxt_/input/README.md create mode 100644 flow/writeTxt_/logs/README.md create mode 100644 flow/writeTxt_/makefile create mode 100644 flow/writeTxt_/output/README.md create mode 100644 flow/writeTxt_/src/writeTxt.py create mode 100644 flow/writeTxt_/src/writeTxt.yml create mode 100644 import/documents/README.md create mode 100644 import/src/build_documents.py create mode 100644 makefile create mode 100644 pyproject.toml diff --git a/.copier-answers.yml b/.copier-answers.yml new file mode 100644 index 0000000..60ab1e6 --- /dev/null +++ b/.copier-answers.yml @@ -0,0 +1,4 @@ +_commit: 36a217c +_src_path: https://github.com/orgpedia/template.mahdept2024.git +dept_name: Planning Department +org_code: mahplan2024 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..17237f1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,15 @@ +# import/websites/**/* filter=lfs diff=lfs merge=lfs -text + +# https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings + +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Declare files that will always have CRLF line endings on checkout. +# To ensure CSV file shared from Mac/Linux loads correctly in windows. +*.csv text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.pdf binary +*.gz binary + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..aaa5c03 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,24 @@ + + +## Description + + +### Types of change + + +## Checklist + +- [ ] I confirm that I have the right to submit this contribution under the project's MIT license. +- [ ] I ran the downstream flow, and flow completed without any new errors. +- [ ] My changes don't require a change to the documentation, or if they do, I've added all required information. + diff --git a/.github/workflows/translateGR.yml b/.github/workflows/translateGR.yml new file mode 100644 index 0000000..44810fc --- /dev/null +++ b/.github/workflows/translateGR.yml @@ -0,0 +1,51 @@ +name: translateGR + +on: + schedule: + - cron: '30 21 * * *' # Runs at 21:30 UTC, which is 3:00 AM IST + + # push: + # branches: [ main ] + +jobs: + process_GRs: + runs-on: ubuntu-latest + outputs: + commit_hash: ${{ steps.commit-and-push.outputs.commit_hash }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.8' # specify your Python version + + - name: Install Poetry + run: | + curl -sSL https://install.python-poetry.org | python3 - + echo "$HOME/.poetry/bin" >> $GITHUB_PATH + + - name: Install dependencies + run: make install + + - name: Install tesseract binaries + run: make install-tess + + - name: Import new infos, download and link + run: make import + + - name: Extract, translate + run: make flow + + - name: Export + run: make export + + - name: Commit and push changes + id: commit-and-push + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: actions export diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38198be --- /dev/null +++ b/.gitignore @@ -0,0 +1,163 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +.ruff_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# orgpedia related +# Comment out all . +.bak +.img +.tmp +.html +.bak2 +.bak3 +.docker +.model +.secrets +model + +# don't add this file as we want to fetch it every time +import/documents/all_infos.json + +# Don't upload following folders +/flow/writeTxt_/output/* + +!/flow/writeTxt_/output/README.md +!/flow/writeTxt_/output/*.doc.json + +# Don't store poetry.lock for new +poetry.lock + + +# Don't upload any log files, but add log directory +*.log + +# Ignore emacs backup files +*~ +.DS_Store \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..c6c1d60 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,28 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.4.0 + hooks: + - id: trailing-whitespace + files: \.yml$ + + - id: check-yaml + args: [ --unsafe ] + files: \.yml$ + + + - repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.2.2 + hooks: + + # Run the linter. + - id: ruff + language_version: python3.8 + files: src/.*\.py$ + + + # Run the formatter. + - id: ruff-format + language_version: python3.8 + files: src/.*\.py$ + diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..1847497 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) [2023] [Orgpedia Foundation] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..931a89b --- /dev/null +++ b/README.md @@ -0,0 +1,98 @@ +# Orders of deparment of Planning Department Government of Maharashtra + +This is a data package repository that process orders obtained from department of Planning Department Government of Maharasthra. The data is obtained by processing orders from Government of Maharashtra's [Orders Website](https://gr.maharashtra.gov.in/1145/Government-Resolutions) website. + +The data package contains text files containting orders in original Marathi and translated to English. The text file do not contain the order appendix pages. The following operations are performed on all PDFs 1) OCR 2) Table Extraction 3) Para Extraction 4) Translation. + +## Accessing the data + +All the data is available in the (flow/writeTxt_/output/) folder and it contains the following files + +1. [mahplan2024-*.pdf.en.txt](flow/writeTxt_/output/): Orders in Marathi. + +2. [mahplan2024-*.pdf.mr.txt](flow/writeTxt_/output/): Orders in English. + + +The data is currently not relased through PyPI once advanced informaion is extracted the data will be released on PyPI. + + +## Data Processing +This is a data package repository - it contains all both the pipeline for generating data and the data generated. In a sense it is different from code repositories that only contain code and not the artifacts the code generates. + +The data processing is broken down in series of Tasks, where each task processes the data created in the upstream task (links in the `input` folder) and generages new data stored in the `output` folder. The directory layout of this repository follows the ideas mentioned in this video: [Principled Data Processing by Patrick Ball](https://www.youtube.com/watch?v=ZSunU9GQdcI). There are 3 main top-level directories `import`, `flow` and `export`. A *simple* `makefile` orchestrates the document flow across these folders, run `make help` to find out more about the commands. + +You can check out the template repository [template.mahdept](https://github.com/orgpedia/template.mahdept) where each directory and sub-directory is explained. + +## Deverloper Notes + +If you want to make changes and regenerate data you have two choices + +1. Use GitHub codespaces (WIP). +2. Build locally, for this you will need at least 20 GB of space, as we store documents, intermediate data and final data locally. To minimize the space requirement it is recommended that you work only on the buildOrder/* and downstream tasks. + + +## Local Development +### Prerequisites +- Git with Git LFS +- Python 3.7+ +- Poetry +- make + + +### Installation + +#### Git & Git LFS +To install Git, visit the [Git website](https://git-scm.com/) and follow the installation instructions for your operating system. For make sure Git-LFS stays enabled (default option). For othe platforms follow these [instructions](https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage) on Github. + +#### Python +To install Python, visit the [Python website](https://www.python.org/downloads/) and download the version of Python 3.x for your operating system. Follow the installation instructions for your operating system. + +#### Poetry +To install Poetry, visit the [Poetry website](https://python-poetry.org/docs/#installation) and follow installation instructions for your operating system: + +#### Make +On Unix based `make` should come pre-installed, on Windows use `winget` to install `make`, follow instructions [here](https://winget.run/pkg/GnuWin32/Make). + + + +### Setup +Orgpedia repository makes heavy use of soft-links, soft-links are stored in the GitHub repository. On non-windows platforms this is not a problem for Windows you need to do two things 1) enable soft-links and 2) tell git about it. + +#### Symlinks Setup On Windows +On Windows 11, make sure you have enabled deverloper mode this will automatically enable soft-links on your machine. On windows 10 soft-links were added in Build 14972 and only works on Administrator cmd prompt. More info at this [link](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/). + +Next you need to tell git it should create soft-links when it sees them in the respository, check the Stack Overflow [answer](https://stackoverflow.com/questions/5917249/git-symbolic-links-in-windows/59761201#59761201) to know more about this. Execute the following command. + +``` +git config --global core.symlinks true +``` + + +To setup the project, clone the repository using git (this is a large repository, will take several minutes): + +``` +git clone https://github.com/orgpedia/mahplan2024.git +``` + +Navigate to the project directory: + +``` +cd mahplan2024 +``` +Use poetry to install software dependencies(one time only): +``` +make install +``` + +Import models and other data-packages required for the document flow (one time only), these will be downloaded in the `import` folders and it takes a long time. +``` +make import +``` +### Generate Data + +After this you should have all the files needed to generate the data. Make whatever changes you need to make and then execute + +``` +make flow +``` +This will generate the data based on your changes. Currently, make does not track dependencies as a result the entire document flow is re-executed !! diff --git a/THANKS.md b/THANKS.md new file mode 100644 index 0000000..afd3019 --- /dev/null +++ b/THANKS.md @@ -0,0 +1,27 @@ +# Thanks ... +Orgpedia would like thank the following organizations, projects and people - by offering their services, software, date free of cost they have made Orgpedia possible - eternally grateful. + +## Services +1. [GitHub](https://www.github.com/): All the code is hosted on GitHub and we plan to use the entire gamut of features it offers from GitHub Actions to GitHub Codespaces. The [www.orgpedia.in](www.orgpedia.in) site is also hosted on GitHub Pages. + +2. [Google Cloudvision](https://cloud.google.com/vision): We use the Google Cloud OCR for extracting words from images, thanks for supporting all the main Indian languages and offering a very generious free tier and free trial. + +3. [AI4Bharat](https://github.com/AI4Bharat/indicTrans): We use the indic-trans library from AI4Bharat for translating text. + +4. [Google Transation](https://cloud.google.com/translate): We use the Google Translate API for translating text from one language to another. + + +## Data +1. [Government of Maharashtra](https://gr.maharashtra.gov.in/1145/Government-Resolutions): Thanks to Government of Maharashtra for making all the orders available on their website. + +2. [Internet Archive - Wayback Machine](https://archive.org/web/): Orgpedia only processes the documents that are identitical the documents archived in the wayback machine. This service allows Orgpedia to isolate itself from ever-changing nature of the websites. + +## Tools +1. [Python](http://www.python.org): Bulk of the code is written in Python, even the large chunk of the front-end. + +2. [Unix/GNU Tools](https://en.wikipedia.org/wiki/GNU_toolchain): Lot of the pipelines are held with GNU tools like make, awk, shell, grep, tr. + +3. [Poetry](http://www.python-poetry.org): Poetry is used for environment management. + +## Software +No software is distributed as a part of this package, but we have dependencies on the software. diff --git a/export/orgpedia_mahplan2024/__init__.py b/export/orgpedia_mahplan2024/__init__.py new file mode 100644 index 0000000..3e724bb --- /dev/null +++ b/export/orgpedia_mahplan2024/__init__.py @@ -0,0 +1,2 @@ +__version__ = '0.0.1' +__author__ = 'Orgpedia Foundation ' diff --git a/export/orgpedia_mahplan2024/datapackage.json b/export/orgpedia_mahplan2024/datapackage.json new file mode 100644 index 0000000..b383b19 --- /dev/null +++ b/export/orgpedia_mahplan2024/datapackage.json @@ -0,0 +1 @@ +https://specs.frictionlessdata.io/data-package/#introduction diff --git a/flow/src/export.py b/flow/src/export.py new file mode 100644 index 0000000..1a52053 --- /dev/null +++ b/flow/src/export.py @@ -0,0 +1,51 @@ +import json +import shutil +import sys +from pathlib import Path + +docs_dir = Path(sys.argv[1]) +task_dir = Path(sys.argv[2]) +export_dir = Path(sys.argv[3]) + +task_output_dir = task_dir / "output" + +import_infos = json.loads((docs_dir / "documents.json").read_text()) +export_json_file = export_dir / "GRs.json" +export_infos = json.loads(export_json_file.read_text()) if export_json_file.exists() else [] + +export_codes = set(i["Unique Code"] for i in export_infos) + +new_infos = [i for i in import_infos if i["Unique Code"] not in export_codes] +print(f"New codes: {len(new_infos)}") + +new_export_infos = [] +for info in new_infos: + code = info["Unique Code"] + + en_file = task_output_dir / f"{code}.pdf.en.txt" + mr_file = task_output_dir / f"{code}.pdf.mr.txt" + + doc_file = task_output_dir / f"{code}.pdf.doc.json" + + if mr_file.exists() and en_file.exists(): + json_doc = json.loads(doc_file.read_text()) + order_number_dict = json_doc.get('order_number', None) + + shutil.copyfile(en_file, export_dir / en_file.name) + shutil.copyfile(mr_file, export_dir / mr_file.name) + + info["mr_file"] = mr_file.name + info["en_file"] = en_file.name + if order_number_dict: + info['order_number'] = order_number_dict['order_number'] + info['order_type'] = order_number_dict['order_type'] + else: + info['order_number'] = None + info['order_type'] = None + info["status"] = "exported" + else: + continue + new_export_infos.append(info) + +if new_export_infos: + export_json_file.write_text(json.dumps(export_infos + new_export_infos)) diff --git a/flow/src/word_recognizer.py b/flow/src/word_recognizer.py new file mode 100644 index 0000000..fe6789d --- /dev/null +++ b/flow/src/word_recognizer.py @@ -0,0 +1,73 @@ +import json +from pathlib import Path + +from docint.page import Page +from docint.pdfwrapper import open as pdf_open +from docint.pipeline.tess_recognizer import add_words_to_page +from docint.vision import Vision + + +def add_text_from_word_image(page_image, word, lang_str): + import pytesseract + + word_image = Page.get_base64_image_from_pil(page_image, word.shape, height=100) + text = pytesseract.image_to_string(word_image, lang=lang_str, config="--psm 7") + word.text_ = text.strip() + return word.text_ + + +TessCutoff = 10 # Number of unmatched words for it to use recognizer + + +@Vision.factory( + "word_recognizer", + depends=["pytesseract", "apt:tesseract-ocr-all"], + is_recognizer=True, + default_config={ + "output_dir_path": "output", + "output_stub": "word_recognizer", + "languages": ["eng", "mar"], + }, +) +class WordRecognizer: + def __init__(self, output_dir_path, output_stub, languages): + self.output_dir_path = Path(output_dir_path) + self.languages = languages + self.output_stub = output_stub + + def __call__(self, doc): + #print(f"Processing word_recognizer {doc.pdf_name}") + + json_path = self.output_dir_path / f"{doc.pdf_name}.{self.output_stub}.json" + if json_path.exists(): + word_infos = json.loads(json_path.read_text()) + for page_idx, word_idx, text in word_infos: + doc.pages[page_idx][word_idx].text_ = text + return doc + + pdf = pdf_open(Path("input") / doc.pdf_name) + + word_infos, full_page_extract = [], False + for page, pdf_page, info in zip(doc.pages, pdf.pages, doc.cid_info["page_infos"]): + num_cids = sum(c for (f, c) in info["font_word_counts"].items() if f != "sakalmarathi") + + if num_cids > TessCutoff or pdf_page.has_one_large_image: + print(f'\tTesseract on page: {page.page_idx}') + full_page_extract = True + page.words.clear() + add_words_to_page(page, pdf_page, ["eng", "mar"]) + else: + page_image = None + for word in [w for w in page.words if "-cid:" in w.text]: + if page_image is None: + page_image = pdf_page.page_image_to_pil(dpi=600) + + print(f"\tReplaced {page.page_idx}:{word.word_idx} >{word.text}< ", end=" ") + text = add_text_from_word_image(page_image, word, "mar+eng") + print(f">{text}<") + word_infos.append([page.page_idx, word.word_idx, word.text_]) + # end for + + if not full_page_extract: + json_path.write_text(json.dumps(word_infos)) + return doc diff --git a/flow/writeTxt_/conf/README.md b/flow/writeTxt_/conf/README.md new file mode 100644 index 0000000..9b988f7 --- /dev/null +++ b/flow/writeTxt_/conf/README.md @@ -0,0 +1 @@ +Contains configuration files, not checked in. diff --git a/flow/writeTxt_/conf/cmaps/sakalmarathi.yml b/flow/writeTxt_/conf/cmaps/sakalmarathi.yml new file mode 100644 index 0000000..ecc733c --- /dev/null +++ b/flow/writeTxt_/conf/cmaps/sakalmarathi.yml @@ -0,0 +1,713 @@ +0: null +1: ['move_right', 'ं'] # This has been added later as a placeholder +2: null +3: ' ' +4: '!' +5: '"' +6: '#' +7: '$' +8: '%' +9: '&' +10: "'" +11: ( +12: ) +13: '*' +14: + +15: ',' +16: '-' +17: . +18: / +19: ० +20: १ +21: २ +22: ३ +23: ४ +24: ५ +25: ६ +26: ७ +27: ८ +28: ९ +29: ':' +30: ';' +31: '<' +32: '=' +33: '>' +34: '?' +35: '@' +36: '[' +37: '\\' +38: ']' +39: '^' +40: '_' +41: "`" +42: '{' +43: '|' +44: '}' +45: '~' +46: null +47: null +48: ‘ +49: ’ +50: null +51: null +52: null +53: null +54: null +55: null +56: '-' +57: ' ' # not known +58: null +59: null +60: null +61: null +62: null +63: null +64: ' ' # not known +65: ँ +66: ं +67: ः +68: अ +69: आ +70: इ +71: ई +72: उ +73: ऊ +74: ऋ +75: null +76: ऍ +77: null +78: ए +79: ऐ +80: ऑ +81: null +82: ओ +83: औ +84: क +85: ख +86: ग +87: घ +88: ङ +89: च +90: छ +91: ज +92: झ +93: ञ +94: ट +95: ठ +96: ड +97: ढ +98: ण +99: त +100: थ +101: द +102: ध +103: न +104: null +105: प +106: फ +107: ब +108: भ +109: म +110: य +111: र +112: ल +113: null +114: ळ +115: ऴ +116: व +117: श +118: ष +119: स +120: ह +121: ' ' # is unknown character, dot below +122: null +123: ा +124: ['move_right', 'ि'] +125: ी +126: ु +127: ू +128: ृ +129: ृ +130: ॅ +131: 'ॊ' +132: े +133: ै +134: ॉ +135: null +136: ो +137: ौ +138: ् +139: 'ॐ' +140: null +141: null +142: null +143: null +144: 'क़' +145: 'ख़' +146: 'ग़' +147: 'घ़' +148: 'ङ़' +149: 'ढ़' +150: फ़ +151: 'य़' +152: 'ॠ' +153: 'ॡ' +154: '◌ॢ' +155: '◌ॣ' +156: '।' +157: '॥' +158: ० +159: १ +160: २ +161: ३ +162: ४ +163: ५ +164: ६ +165: ७ +166: ८ +167: ९ +168: null +169: क्ष +170: ज्ञ +171: ['move_left', 'र्'] # IMP REPH +172: र +173: 'ु' +174: 'ू' +175: क् +176: ख् +177: ग् +178: घ् +179: ङ् +180: च् +181: null +182: ज् +183: झ् +184: null +185: ट् +186: ठ् +187: ड् +188: ढ् +189: ण् +190: त् #त्स +191: र्थ् +192: द् +193: ध् +194: न् +195: प् +196: फ् +197: ब् +198: भ् +199: म् +200: य् +201: ऱ् +202: ल् +203: व् +204: श् +205: ष्ट् # this and 280 महाराष्ट्र-[109, 120, 123, 111, 123, 205, 280] +206: स् #् +207: null +208: ळ् +209: क्ष् +210: null +211: क् # Virama or halant but is not comming out properly +212: null +213: ग् +214: null +215: null +216: च् +217: null +218: null +219: null +220: ट् +221: null +222: त् +223: थ् +224: द् +225: null +226: null +227: प् +228: null +229: null +230: भ् +231: null +232: null +233: null +234: null +235: व् +236: null +237: ष् +238: स् +239: null +240: null +241: null +242: null +243: null +244: null +245: null +246: null +247: null +248: null +249: null +250: null +251: null +252: null +253: null +254: null +255: null +256: null +257: null +258: त्र् +259: null +260: द्र +261: null +262: null +263: प्र् +264: null +265: null +266: null +267: null +268: null +269: null +270: क्र +271: null +272: ग्र +273: घ्र +274: null +275: च्र +276: null +277: 'ज्र' +278: null +279: null +280: र +281: null +282: ड्र +283: null +284: null +285: त्र +286: थ्र +287: द्र +288: null +289: null +290: प्र +291: फ्र +292: ब्र +293: भ्र +294: म्र +295: य्र +296: व्र +297: null +298: null +299: null +300: null +301: null +302: null +303: null +304: null +305: null +306: null +307: null +308: null +309: null +310: null +311: null +312: null +313: null +314: null +315: null +316: null +317: 'फ़्' +318: null +319: null +320: null +321: null +322: null +323: null +324: null +325: null +326: null +327: null +328: null +329: null +330: null +331: null +332: null +333: null +334: null +335: null +336: null +337: null +338: null +339: null +340: null +341: null +342: null +343: ध़ +344: null +345: null +346: null +347: null +348: म़ +349: null +350: null +351: व़ +352: null +353: null +354: null +355: null +356: null +357: null +358: null +359: null +360: null +361: null +362: null +363: null +364: null +365: null +366: null +367: null +368: null +369: null +370: null +371: null +372: null +373: null +374: null +375: null +376: null +377: null +378: null +379: null +380: null +381: null +382: null +383: null +384: null +385: null +386: null +387: null +388: null +389: null +390: null +391: null +392: null +393: null +394: null +395: null +396: null +397: null +398: null +399: null +400: न्न +401: null +402: null +403: null +404: null +405: null +406: null +407: null +408: श्न +409: null +410: null +411: null +412: null +413: null +414: null +415: null +416: null +417: null +418: null +419: null +420: null +421: null +422: null +423: null +424: null +425: null +426: null +427: null +428: null +429: null +430: null +431: null +432: null +433: null +434: null +435: null +436: null +437: null +438: null +439: null +440: null +441: null +442: ट्ट +443: null +444: null +445: ठ्ठ +446: null +447: ड्ड +448: null +449: null +450: null +451: त्त +452: त्त +453: null +454: null +455: द्ध +456: द्द #['move_right', 'ि'] +457: द्ध +458: null +459: null +460: 'द्भ' +461: द्म +462: द्व +463: द्य +464: null +465: null +466: null +467: दृ +468: null +469: null +470: null +471: रु +472: रू +473: 'श्च'#['move_right', 'ि'] +474: श्व +475: श्र +476: null +477: null +478: null +479: null +480: null +481: null +482: null +483: स्र +484: null +485: स्त्र +486: null +487: null +488: ह्म +489: य +490: null +491: null +492: null +493: हृ +494: null +495: श्ल +496: null +497: ल +498: ल्ल +499: null +500: null +501: null +502: null +503: ट्य +504: ठ्य +505: ड्य +506: ढ्य +507: null +508: null +509: null +510: ठ्ठ +511: null +512: null +513: null +514: ें +515: े +516: ['replace', 171, 132, 66] +517: ैं +518: ['replace', 171, 133] +519: null +520: null +521: null +522: ं +523: ['replace', 124, 1] ### PROBLEM dot and small matra both need to move right # लिंक ल ि ं क +524: ['replace', 'र्', 124] # ['replace', 171, 124] ### PROBLEM reph and matra together !! reph needs to move right +525: null +526: ['move_right', 'ि'] #स् +527: च् +528: ['replace', 'र्', 124] +529: null +530: ीं +531: ['replace', 171, 125] #ी +532: ीं +533: null +534: null +535: ों +536: ो +537: null +538: ौं +539: null +540: null +541: ां +542: null +543: null +544: null +545: null +546: null +547: null +548: null +549: null +550: null +551: null +552: null +553: null +554: null +555: null +556: null +557: null +558: null +559: null +560: null +561: null +562: null +563: null +564: null +565: null +566: null +567: null +568: null +569: null +570: null +571: null +572: null +573: null +574: null +575: null +576: null +577: null +578: null +579: null +580: null +581: null +582: null +583: null +584: null +585: null +586: null +587: null +588: null +589: null +590: null +591: ़फ्र +592: null +593: null +594: null +595: null +596: null +597: ['replace', 171, 123] +598: null +599: null +600: null +601: ण् +602: A +603: B +604: C +605: D +606: E +607: F +608: G +609: H +610: I +611: J +612: K +613: L +614: M +615: 'N' +616: O +617: P +618: Q +619: R +620: S +621: T +622: U +623: V +624: W +625: X +626: 'Y' +627: Z +628: a +629: b +630: c +631: d +632: e +633: f +634: g +635: h +636: i +637: j +638: k +639: l +640: m +641: 'n' +642: o +643: p +644: q +645: r +646: s +647: t +648: u +649: v +650: w +651: x +652: 'y' +653: z +654: null +655: null +656: null +657: null +658: null +659: null +660: null +661: null +662: ट्रू +663: null +664: null +665: null +666: null +667: null +668: null +669: null +670: null +671: null +672: null +673: null +674: null +675: null +676: null +677: null +678: null +679: null +680: null +681: null +682: null +683: null +684: ॲ +685: null +686: null +687: ₹ +688: null +689: null +690: null +691: null +692: null +693: null +694: null +695: null +696: null +697: null +698: null +699: null +700: null +701: null +702: null +703: null +704: द्द्य +705: ट्ट् +706: null +707: null +708: null +709: null +710: null +711: '“' +712: '”' diff --git a/flow/writeTxt_/conf/glossary.yml b/flow/writeTxt_/conf/glossary.yml new file mode 100644 index 0000000..cfe5348 --- /dev/null +++ b/flow/writeTxt_/conf/glossary.yml @@ -0,0 +1,617 @@ +translations: + - mar_Deva: '८) या पदोन्नती आदेशातील ज्या अधिका-यांना कालबध्द पदोन्नती/आश्वासित प्रगती/सुधारित सेवांतर्गत आश्वासित प्रगती योजनेचा फायदा मिळालेला नाही त्यांची महाराष्ट्र नागरी सेवा (सुधारित वेतन) नियम, २०१९ नुसार पदोन्नतीच्या पदाच्या वेतनश्रेणीतील वेतन निश्चिती करण्यात यावी.' + - eng_Latn: '8) The officers in this promotion order who have not been given the benefit of the Assured Progress Scheme under the time-bound promotion/ Assured Progress/ Revised Service should be fixed in the pay scale of the promoted post as per the Maharashtra Civil Services (Revised Pay) Rules, 2019.' + + + - mar_Deva: '७) सामान्य प्रशासन विभागाच्या दिनांक १२/९/२०१६ च्या शासन निर्णयान्वये “वरच्या संवर्गात पदोन्नतीसाठी निवड झाल्यानंतर अथवा तत्पूर्वीच एखाद्या अधिका-यांने पदोन्नतीचे पद स्विकारण्यास नकार दर्शविल्यास, त्याचे नांव पदोन्नतीसाठी पात्र असणा-या अधिकारी/कर्मचा-यांच्या निवड यादीतून काढून टाकण्यात येईल व पुढील दोन वर्षी होणा-या निवडसूच्यांमध्ये संबंधित अधिका-यांच्या नावाचा विचार न करता तिस-या वर्षाच्या निवडसूचीत संबंधित अधिका-यांची पदोन्नतीसाठीची पात्रता तपासण्यात येईल.' + - eng_Latn: '7) Under the Government Decision dated 12/9/2016 of the General Administration Department," If an officer refuses to accept the post of promotion after or before being selected for promotion to the upper cadre, his name will be removed from the selection list of officers/ employees eligible for promotion and the eligibility of the concerned officer for promotion will be checked in the third year selection list without considering the name of the concerned officer in the next two years selection lists.' + + + - mar_Deva: '६) या आदेशान्वये पदोन्नत होणाऱ्या अधिकाऱ्यांना नियमित पदोन्नतीचे म्हणजेच ज्येष्ठतेचे कोणतेही हक्क प्राप्त होणार नाहीत.' + - eng_Latn: '(6) The officers to be promoted under this order shall not be entitled to any regular promotion i.e. seniority.' + + + - mar_Deva: '५३- मोठी बांधकामे' + - eng_Latn: '53- Large-scale construction' + + + - mar_Deva: '५. बदली झालेले अधिकारी बदलीच्या कार्यालयात रुजू झाल्यानंतर त्यांनी तात्काळ संबंधित आहरण व संवितरण अधिकाऱ्यांशी संपर्क साधून ई-प्रोफाईल अद्ययावत करण्याची कार्यावाही सात दिवसांच्या आत करावी. अद्ययावत केलेले ई-प्रोफाईल संबंधित कार्यालयाने संबंधित अधिकाऱ्यांच्या त्या महिन्याच्या वेतन देयकासोबत कोषागार कार्यालयास सादर केल्याशिवाय त्यांचे वेतन देयक कोषागार कार्यालयाने पारित करु नये. तसेच, अद्ययावत ई-प्रोफाईलच्या प्रती संचालक, अर्थ व सांख्यिकी संचालनालय व शासनास पाठविण्यात याव्यात. ई-प्रोफाईल अद्ययावत करण्याची जबाबदारी संबंधित कार्यालयप्रमुखांची राहील.' + - eng_Latn: 'After the transferred officers join the office of the transferor, they should immediately contact the concerned Drawing and Disbursing Officer and update the e-profile within seven days. The salary payment of the concerned officers should not be passed by the treasury office unless the updated e-profile is submitted by the concerned office to the treasury office along with the salary payment of that month. Also, copies of the updated e-profile should be sent to the Director, Directorate of Finance and Statistics and the Government. The head of the concerned office will be responsible for updating the e-profile.' + + + - mar_Deva: '५) पदोन्नतीच्या पदावर रुजू झाल्यानंतर संबंधित अधिकाऱ्यांनी ७ दिवसांच्या आत त्यांचे ई-प्रोफाईल सुधारित करुन त्याची प्रत शासनास तसेच अर्थ व सांख्यिकी संचालनालयास सादर करावी.' + - eng_Latn: 'After joining the promoted post, the concerned officers should revise their e-profile within 7 days and submit a copy to the government as well as the Directorate of Finance and Statistics.' + + + - mar_Deva: '४५१५- इतर ग्राम विकास कार्यक्रमावरील भांडवली खर्च,' + - eng_Latn: '4515-Capital expenditure on other village development programmes.' + + + - mar_Deva: '४. संबंधित कार्यालयप्रमुखांनी बदली करण्यात आलेल्या अधिकाऱ्यास कार्यमुक्त केल्याबाबतच्या व रुजू करुन घेतल्याच्या आदेशाची प्रत या विभागास अग्रेषित करावी.' + - eng_Latn: '4. The Head of the concerned office shall forward to this Department a copy of the order of posting and relieving the transferred officer.' + + + - mar_Deva: '४. संबंधित कार्यालयप्रमुख यांना कळविण्यात येते की, त्यांनी पदमुक्त व पदमोचक अधिकाऱ्यांनी अनुक्रमे पदभार सोडल्याचा तसेच स्वीकारल्याचा दिनांक त्वरीत शासनास tushar.hirlekar@nic.in या ई-मेल पत्त्यावर तसेच संचालक, अर्थ व सांख्यिकी संचालनालय, मुंबई यांना कळवावा.' + - eng_Latn: 'The Head of the concerned office is informed that they should immediately inform the Government on the date of demitting and assuming charge of the relieved and demoted officers respectively at the e-mail address tushar. hirlekar@nic.in as well as the Director, Directorate of Finance and Statistics, Mumbai.' + + + - mar_Deva: '४. संबंधित कार्यालय प्रमुख यांना कळविण्यात येते की, त्यांनी पदमुक्त व पदमोचक अधिकाऱ्यांनी अनुक्रमे पदभार सोडल्याचा तसेच स्वीकारल्याचा दिनांक त्वरीत शासनास tushar.hirlekar@nic.in या ई-मेल पत्त्यावर तसेच संचालक, अर्थ व सांख्यिकी संचालनालय, मुंबई यांना कळवावा.' + - eng_Latn: 'The Head of the concerned office is informed that they should immediately inform the date of demitting and assuming charge of the relieved and demoted officers respectively to the Government on the e-mail address tushar. hirlekar@nic.in as well as to the Director, Directorate of Finance and Statistics, Mumbai.' + + + - mar_Deva: '४) सदर अधिका-यांनी पदोन्नतीच्या पदावर तात्काळ रुजू होणे आवश्यक आहे.' + - eng_Latn: '4) The officer should be promoted immediately.' + + + - mar_Deva: '३. संबंधित कार्यालयप्रमुखांनी संबंधित अधिकाऱ्यांच्या पदाचा पदभार अन्य अधिकाऱ्यांकडे सोपवून त्या अधिकाऱ्यांना बदलीच्या पदावर रुजू होण्याकरीता तात्काळ कार्यमुक्त करावे. तसेच बदली केलेल्या पदावर वरील अधिकारी त्यांना देय / अनुज्ञेय असलेल्या पदग्रहण अवधी उपभोगुन रुजू न झाल्यास संबंधित कार्यालयाने त्यांचे वेतन काढू नये. कोणत्याही परिस्थितीत प्रतिक्षाधीन कालावधी नियमित करण्यात येणार' + - eng_Latn: '(3) The head of the office concerned shall immediately relieve the officers of the post of the concerned officers by handing over the charge of the post of the concerned officers to other officers so that they can join the post of the replacement. Also, if the above officers in the transferred post do not join after the period of assumption of office payable/ admissible to them, the concerned office shall not draw their salary. In any case, the waiting period will be regularized.' + + + - mar_Deva: '३. संचालक, अर्थ व सांख्यिकी संचालनालय, मुंबई यांनी हे परिपत्रक व सोबतची अंतिम ज्येष्ठतासूचीची' + - eng_Latn: '3. Director, Directorate of Finance and Statistics, Mumbai to issue this circular and the accompanying final seniority list.' + + + - mar_Deva: '३. वर नमूद केलेल्या लेखाशिर्षांतर्गत झालेला प्रत्यक्ष खर्च व महालेखापाल कार्यालयाने नोंदविलेल्या खर्चाचा ताळमेळ घालण्यात यावा. वितरित केलेल्या निधीचे उपयोगिता प्रमाणपपत्र शासनास तात्काळ सादर करावे.' + - eng_Latn: '(3) The actual expenditure under the head of accounts referred to above and the expenditure reported by the Accountant General''s Office shall be reconciled. The utilization certificate of the disbursed funds should be submitted to the government immediately.' + + + - mar_Deva: '३. वर नमूद केलेल्या लेखाशिर्षांतर्गत झालेला प्रत्यक्ष खर्च व महालेखापाल कार्यालयाने' + - eng_Latn: '(3) The actual expenditure incurred under the head of accounts referred to above and by the Office of the Accountant General.' + + + - mar_Deva: '३. महाराष्ट्र नागरी सेवा (वर्तणूक) नियम, १९७९ मधील नियम २३ च्या तरतूदी लक्षात घेता, त्यांनी पदस्थापनेत बदल करण्यासाठी कुठल्याही स्वरुपाची आवेदने सादर केल्यास ते शिस्तभंगाच्या कारवाईस पात्र ठरतील.' + - eng_Latn: 'In view of the provisions of Rule 23 of the Maharashtra Civil Services (Conduct of Business) Rules, 1979, they will be liable for disciplinary action if they submit any kind of application for change in posting.' + + + - mar_Deva: '३. नियोजन विभाग, शासन निर्णय क्रमांक:तीक्षेवि-२०२२/प्र.क्र.२३/का.१४४४,दि.२४ मार्च, २०२२.' + - eng_Latn: 'Planning Department, Government Resolution No: 2022/ No.23/ 1444, dated 24th March, 2022.' + + + - mar_Deva: '३) सदर पदोन्नत्या निव्वळ तात्पुरत्या स्वरुपात मा. सर्वोच्च न्यायालयात दाखल केलेल्या विशेष अनुज्ञा याचिका क्रमांक २८३०६/२०१७ वरिल अंतिम निर्णयाच्या अधीन असतील.' + - eng_Latn: '3) This promotion is only temporary. The Special Leave Petition No. 28306/2017 filed in the Supreme Court shall be subject to final disposal.' + + + - mar_Deva: '२९/१२/२०१७ च्या पत्रान्वये विधी व न्याय विभागाच्या सहमतीने पदोन्नतीच्या कोट्यातील खुल्या प्रवर्गातील रिक्त' + - eng_Latn: 'Vacancies in the open category in the quota of promotion as agreed by the Department of Law and Justice vide letter dated 29/12/2017' + + + - mar_Deva: '२. मा.उच्च न्यायालय, मुंबई यांनी याचिका क्र.२७९७/२०१५ मध्ये दिनांक ४/८/२०१७ रोजी दिलेल्या' + - eng_Latn: '2. m. The High Court of Bombay, vide Petition No. 2797/2015 dated 4/8/2017' + + + - mar_Deva: '२. महाराष्ट्र नागरी सेवा (पदग्रहण अवधी, स्वीयेत्तर सेवा आणि निलंबन, बडतर्फी व सेवेतून काढून टाकणे यांच्या काळातील प्रदाने) नियम, १९८१ मधील नियमानुसार दिलेल्या पदग्रहण अवधीतच, बदली झालेल्या अधिकारी/ कर्मचाऱ्याने बदलीच्या ठिकाणी रुजू होण्याची दक्षता घ्यावी. अन्यथा या पदग्रहण अवधीत बदलीच्या पदावर रुजू न झाल्यास, त्यांचा अनुपस्थितीचा कालावधी हा अकार्यदिन (Dies Non) म्हणून गणला जाईल.' + - eng_Latn: '(2) The transferred officer/ employee shall ensure that he/ she joins the place of transfer within the period of his/ her appointment as provided under the Maharashtra Civil Services (Period of Incorporation, Post-Acceptance Service and Provisions in respect of Suspension, Dismissal and Removal) Rules, 1981. If he does not join the post of a replacement during this period, the period of absence shall be deemed to be a non-working day.' + + + - mar_Deva: '२. मंजूर पदांपैकी सहा महिन्यापेक्षा अधिक काळ रिक्त असलेली पदे वगळण्यात येतील.' + - eng_Latn: 'Vacancies of more than six months in the sanctioned posts will be excluded.' + + + - mar_Deva: '२. बदली आदेशात बदल करुन घेण्यासाठी प्रत्यक्ष वा अप्रत्यक्षपणे दबाव आणण्याचा प्रयत्न केल्यास तो अधिकारी शिस्तभंगविषयक कारवाईसाठी पात्र ठरेल.' + - eng_Latn: '(2) Any officer who directly or indirectly tries to pressurise the transfer order to be modified shall be liable for disciplinary action.' + + + - mar_Deva: '२. नियोजन विभाग शासन निर्णय क्रमांकः तीक्षेवि-२०२२/प्र.क्र.८/का.१४४४, दि. २१ मार्च, २०२२.' + - eng_Latn: 'Planning Department Government Decision No. 2022/ Q. No. 8/ Q. 21st March, 2022.' + + + - mar_Deva: '२) मा.उच्च न्यायालय, मुंबई यांनी याचिका क्र.२७९७/२०१५ मध्ये दिनांक ४/८/२०१७ रोजी दिलेल्या निर्णयान्वये पदोन्नतीतील आरक्षण अवैध ठरविले असल्याने व मा. सर्वोच्च न्यायालयाने मा.उच्च न्यायालयाच्या या निर्णयास अद्याप स्थगिती दिली नसल्याने पदोन्नतीच्या कोटयातील सर्व रिक्त पदे दिनांक २५/४/२००४ च्या स्थितीनुसार सेवाज्येष्ठतेने भरण्याबाबतचा निर्णय सामान्य प्रशसान विभागाच्या दिनांक ७/५/२०२१ रोजीच्या शासन निर्णयान्वये घेण्यात आला.' + - eng_Latn: '2) Ma. The High Court of Bombay, vide Petition No. 2797/2015 dated 4/8/2017 has invalidated the reservation in promotion and the Govt. The Supreme Court As the High Court has not yet stayed the decision, the decision to fill all the vacancies in the promotion quota with the status of 25/4/2004 was taken under the Government Decision dated 7/5/2021 of the General Administration Department.' + + + - mar_Deva: '१६ वा मजला, नवीन प्रशासन भवन,' + - eng_Latn: '16th floor, new administration building,' + + + - mar_Deva: 'हुतात्मा राजगुरु चौक, मादाम कामा रोड,' + - eng_Latn: 'Hutatma Rajguru Chowk, Madam Cama Road' + + + - mar_Deva: 'हुतात्मा राजगुरु चौक, मादाम कामा मार्ग,' + - eng_Latn: 'Hutatma Rajguru Chowk, Madam Cama Marg,' + + + - mar_Deva: 'सदर पदोन्नती महाराष्ट्र लोकसेवा आयोगाच्या मान्यतेच्या अधीन राहून देण्यात येत आहे.' + - eng_Latn: 'The promotion is subject to the approval of the Maharashtra Public Service Commission.' + + + - mar_Deva: 'शासनास तात्काळ सादर करावे.' + - eng_Latn: 'It should be immediately submitted to the government.' + + + - mar_Deva: 'शासनाच्या विचाराधीन होती.' + - eng_Latn: 'It was under the consideration of the government.' + + + - mar_Deva: 'शासन शुध्दीपत्रक :' + - eng_Latn: 'Government''s stand:' + + + - mar_Deva: 'शासन परिपत्रक क्रमांकः मग्रारोहयो-२०२३/प्र.क्र.२०/रोहयो-७' + - eng_Latn: 'Government Circular No: Mgrarohiyo-2023/ PR No.20/ Rohyo-7' + + + - mar_Deva: 'शासन परिपत्रक क्रमांकः मग्रारोहयो - २०२०/प्र.क्र.२१/रोहयो-७' + - eng_Latn: 'Government Circular No: MgrRohyo-2020/ No.21/ Rohyo-7' + + + - mar_Deva: 'शासन परिपत्रक :' + - eng_Latn: 'Government circular:' + + + - mar_Deva: 'शासन परिपत्रक' + - eng_Latn: 'Government circular' + + + - mar_Deva: 'शासन निर्णयः' + - eng_Latn: 'Government''s decision:' + + + - mar_Deva: 'शासन निर्णय:' + - eng_Latn: 'Government''s decision:' + + + - mar_Deva: 'शासन निर्णय क्रमांकः माविका-२०१६/प्र.क्र.१/का.१४१८' + - eng_Latn: 'Government Resolution No: Mavika-2016/ P.S.No.1/ K. 1418' + + + - mar_Deva: 'शासन निर्णय क्रमांकः मग्रारो-२०२२/प्र.क्र.१७४/रोहयो-६अ' + - eng_Latn: 'Government Resolution No: MGRRO-2022/ P.No.174/ ROHYO-6A' + + + - mar_Deva: 'शासन निर्णय क्रमांकः मग्रारो-२०२१/प्र.क्र.२९/रोहयो-१०अ' + - eng_Latn: 'Government Resolution No: MGRRO-2021/ PR No.29/ ROHYO-10A' + + + - mar_Deva: 'शासन निर्णय क्रमांकः मग्रारो-२०२१/प्र.क्र.१८२/मग्रारो-१' + - eng_Latn: 'Government Resolution No: MGRRO-2021/ P.No. 182/ MGRRO-1' + + + - mar_Deva: 'शासन निर्णय क्रमांकः मग्रारो-२०२०/प्र.क्र.७०/रोहयो-७' + - eng_Latn: 'Government Resolution No: MGRRO-2020/ P.No.70/ ROHYO-7' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तीक्षेवि-२०२२/प्र.क्र.३२/का.१४४४' + - eng_Latn: 'Government Decision No: Thikshevi-2022/ P. No. 32/ K. 1444' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तीक्षेवि-२०२२/प्र.क्र.३१/का.१४४४' + - eng_Latn: 'Govt. Decision No: Teekshevi-2022/ P. No. 31/ K. 1444' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तीक्षेवि-२०२०/प्र.क्र.४७/का.१४४४' + - eng_Latn: 'Government Resolution No: TIKSHEVI-2020/ PR No.47/ K.1444' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तीक्षेवि-२०२०/प्र.क्र.४६/का.१४४४' + - eng_Latn: 'Government Resolution No: TIKSHEVI-2020/ P.S. No.46/ K.1444' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तीक्षेवि-२०२०/प्र.क्र.४५/का.१४४४' + - eng_Latn: 'Government Resolution No: TIKSHEVI-2020/ P.S. No.45/ K. 1444' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तीक्षेवि-२०१६/प्र.क्र.४७/का.१४४४' + - eng_Latn: 'Govt. Decision No: THIKESHVI-2016/ PR No.47/ K.1444' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तिक्षेवि-२०२०/प्र.क्र.४५/का.१४४४' + - eng_Latn: 'Govt. Decision No: TIKSHEVI-2020/ P.S. No.45/ K. 1444' + + + - mar_Deva: 'शासन निर्णय क्रमांकः तिक्षेवि-२०१३/प्र.क्र.५८/का.१४४४' + - eng_Latn: 'Govt. Decision No: TIKSHEVI-2013/ P.S. No.58/ K.1444' + + + - mar_Deva: 'शासन निर्णय :' + - eng_Latn: 'Government''s decision:' + + + - mar_Deva: 'शासन निर्णय' + - eng_Latn: 'Government''s decision' + + + - mar_Deva: 'शासन आदेश:' + - eng_Latn: 'Government order:' + + + - mar_Deva: 'शासन आदेश क्रमांकः बदली-१२२१/प्र.क्र.६२/का.१४२७' + - eng_Latn: 'Government Order No: Transfer- 1221/ PR No.62/ K. 1427' + + + - mar_Deva: 'शासन आदेश क्रमांकः बदली-१२२१/प्र.क्र.५६/का.१४२७' + - eng_Latn: 'Government Order No. 1221/ PR No. 56/ K. 1427' + + + - mar_Deva: 'शासन आदेश क्रमांकः बदली-१२२०/प्र.क्र.५९/का.१४२७' + - eng_Latn: 'Government Order No: Transfer-1220/ PR No.59/ KA.1427' + + + - mar_Deva: 'शासन आदेश क्रमांकः बदली-१२२०/प्र.क्र.५८/का.१४२७' + - eng_Latn: 'GOVERNMENT ORDER NO.: TRANSFER-1220/ PR No.58/ KA.1427' + + + - mar_Deva: 'शासन आदेश क्रमांकः बदली-११२१/प्र.क्र.६१/का.१४२७' + - eng_Latn: 'GOVERNMENT ORDER NO.: TRANSFER-1121/ PR No.61/ K. 1427' + + + - mar_Deva: 'शासन आदेश क्रमांकः बदली-११२१/प्र.क्र.५५/का.१४२७' + - eng_Latn: 'Government Order No: Transfer-1121/ PR No. 55/ K. 1427' + + + - mar_Deva: 'शासन आदेश क्रमांकः बदली-११२०/प्र.क्र.५४/का.१४२७' + - eng_Latn: 'GOVERNMENT ORDER NO.: TRANSFER- 1120/ PR. NO. 54/ KA. 1427' + + + - mar_Deva: 'शासन आदेश क्रमांकः पदोनि-११२१/प्र.क्र.४०/का.१४२७' + - eng_Latn: 'Government Order No: Promotion-1121/ PR No.40/ KA-1427' + + + - mar_Deva: 'शासन आदेश क्रमांक : विमंका-२०१९/प्र.क्र.२२/का-१४१६' + - eng_Latn: 'Government Order No: VIMANKA-2019/ PR No.22/ K-1416' + + + - mar_Deva: 'शासन आदेश :' + - eng_Latn: 'Government order:' + + + - mar_Deva: 'शासन आदेश' + - eng_Latn: 'the Government Order' + + + - mar_Deva: 'विस्तार इमारत, मंत्रालय, मुंबई-४०० ०३२.' + - eng_Latn: 'Extension Building, Mantralaya, Mumbai- 400 032.' + + + - mar_Deva: 'विस्तार इमारत, मंत्रालय, मुंबई ४०० ०३२' + - eng_Latn: 'Extension Building, Mantralaya Mumbai 400 032' + + + - mar_Deva: 'विस्तार इमारत, मंत्रालय, मुंबई - ४०० ०३२.' + - eng_Latn: 'Extension Building, Mantralaya, Mumbai- 400 032.' + + + - mar_Deva: 'विचाराधीन होती.' + - eng_Latn: 'was under consideration.' + + + - mar_Deva: 'वाचा:' + - eng_Latn: 'Read:' + + + - mar_Deva: 'रोजीच्या तात्पुरत्या ज्येष्ठतासूची संदर्भातील काही वास्तविक चुका, त्रुटी अथवा आक्षेप असल्यास त्याबाबत' + - eng_Latn: 'Any factual errors, omissions or objections with respect to the temporary seniority of Rosy.' + + + - mar_Deva: 'राहील.' + - eng_Latn: 'will remain.' + + + - mar_Deva: 'राष्ट्रसंत तुकडोजी श्रीक्षेत्र मोझरी, जिल्हा अमरावती, येथे मुलभूत सुविधा निर्माण करण्यासाठी विकास आराखडा निधी वितरीत करणेबाबत...' + - eng_Latn: 'Rashtrasant Tukadoji Srikshetra Mozari, District Amravati, regarding the distribution of development plan funds for the construction of infrastructure facilities in...' + + + - mar_Deva: 'मुंबई ४०० ०३२.' + - eng_Latn: 'Mumbai 400 032' + + + - mar_Deva: 'मादामा कामा मार्ग, हुतात्मा राजगुरु चौक,' + - eng_Latn: 'Madama Cama Marg, Hutatma Rajguru Chowk,' + + + - mar_Deva: 'मादाम कामा रोड, हुतात्मा राजगुरू चौक,' + - eng_Latn: 'Madam Cama Road, Hutatma Rajguru Chowk,' + + + - mar_Deva: 'मादाम कामा रोड, हुतात्मा राजगुरु चौक,' + - eng_Latn: 'Madam Cama Road, Hutatma Rajguru Chowk,' + + + - mar_Deva: 'मादाम कामा मार्ग, हुतात्मा राजगुरू चौक,' + - eng_Latn: 'Madam Cama Marg, Hutatma Rajguru Chowk,' + + + - mar_Deva: 'मादाम कामा मार्ग, हुतात्मा राजगुरु चौक,' + - eng_Latn: 'Madam Cama Marg, Hutatma Rajguru Chowk,' + + + - mar_Deva: 'मागणी क्र. ओ-१०' + - eng_Latn: 'Demand No. The O-10' + + + - mar_Deva: 'महालेखापाल कार्यालयाने नोंदविलेला खर्च याचा ताळमेळ घालण्यात यावा. तसेच वितरित' + - eng_Latn: 'The expenditure recorded by the Accountant General''s office should be reconciled. as well as distributed' + + + - mar_Deva: 'महाराष्ट्र शासन,' + - eng_Latn: 'the Government of Maharashtra,' + + + - mar_Deva: 'महाराष्ट्र शासन' + - eng_Latn: 'The Government of Maharashtra' + + + - mar_Deva: 'महाराष्ट्र शासकीय कर्मचाऱ्यांच्या बदल्यांचे विनियमन आणि शासकीय कर्तव्य पार पाडतांना होणाऱ्या विलंबास प्रतिबंध अधिनियम, २००५ चे कलम ४(४) व ४(५) मधील तरतुदीनुसार अर्थ व सांख्यिकी संचालनालयातील संशोधन अधिकारी/ सांख्यिकी अधिकारी, गट-ब (राजपत्रित) (S-१५: रुपये ४१,८०० १,३२,३००) या संवर्गातील खाली नमूद अधिकाऱ्यांची सक्षम प्राधिकाऱ्यांच्या मान्यतेने बदली करण्यात येत असून त्यांची पदस्थापना खालील तक्त्यातील स्तंभ क्रमांक ३ मध्ये दर्शविलेल्या पदावर करण्यात येत आहे:' + - eng_Latn: 'In accordance with the provisions of Section 4 (4) and 4 (5) of the Maharashtra Regulation of Transfer of Government Employees and Prevention of Delay in Discharge of Government Duties Act, 2005, the following officers of the cadre of Research Officer/ Statistical Officer, Group-B (Gazetted) (S-15: Rs.41,800 1,32,300) in the Directorate of Finance and Statistics are being transferred with the approval of the competent authority and posted to the post indicated in column No.3 of the following table:' + + + - mar_Deva: 'महाराष्ट्र शासकीय कर्मचाऱ्यांच्या बदल्यांचे विनियमन आणि शासकीय कर्तव्य पार पाडतांना होणाऱ्या विलंबास प्रतिबंध अधिनियम, २००५ चे कलम ४(१) ते ४(३) मधील तरतुदीनुसार अर्थ व सांख्यिकी संचालनालयातील “संशोधन अधिकारी / संशोधन अधिकारी, गट-ब (राजपत्रित) (S-१५:४१,८०० - १,३२,३००) या संवर्गातील खाली नमूद अधिकाऱ्यांची सक्षम प्राधिकाऱ्यांच्या मान्यतेने बदली करण्यात येत असून त्यांची पदस्थापना खालील तक्त्यातील स्तंभ क्रमांक ३ मध्ये दर्शविलेल्या पदावर करण्यात येत आहे:' + - eng_Latn: 'In accordance with the provisions of Section 4 (1) to 4 (3) of the Maharashtra Regulation of Transfer of Government Employees and Prevention of Delay in Discharge of Government Duties Act, 2005, the following officers of the cadre of Research Officer/ Research Officer, Group-B (Gazetted) (S- 15:41,800- 1,32,300) in the Directorate of Finance and Statistics are being transferred with the approval of the competent authority and posted to the post indicated in column No. 3 of the following table:' + + + - mar_Deva: 'महाराष्ट्र शासकीय कर्मचाऱ्यांच्या बदल्यांचे विनियमन आणि शासकीय कर्तव्य पार पाडतांना होणाऱ्या विलंबास प्रतिबंध अधिनियम, २००५ चे कलम ४(१) ते (३) मधील तरतुदीनुसार अर्थ व सांख्यिकी संचालनालयातील संशोधन अधिकारी/ सांख्यिकी अधिकारी, गट-ब (राजपत्रित) (S-१५: रुपये ४१,८०० १,३२,३००) या संवर्गातील खाली नमूद अधिकाऱ्यांची सक्षम प्राधिकाऱ्यांच्या मान्यतेने बदली करण्यात येत असून त्यांची पदस्थापना खालील तक्त्यातील स्तंभ क्रमांक ३ मध्ये दर्शविलेल्या पदावर करण्यात येत आहे:' + - eng_Latn: 'In accordance with the provisions of Section 4 (1) to (3) of the Maharashtra Regulation of Transfer of Government Employees and Prevention of Delay in Discharge of Government Duties Act, 2005, the following officers of the cadre of Research Officer/ Statistical Officer, Group-B (Gazetted) (S-15: Rs.41,800 1,32,300) in the Directorate of Finance and Statistics are being transferred with the approval of the competent authority and posted to the post indicated in column No.3 of the following table:' + + + - mar_Deva: 'मंत्रालय, मुंबई-४०००३२.' + - eng_Latn: 'Mantralaya, Mumbai- 400032.' + + + - mar_Deva: 'मंत्रालय, मुंबई-४०००३२' + - eng_Latn: 'Mantralaya, Mumbai- 400032' + + + - mar_Deva: 'मंत्रालय, मुंबई-४०० ०३२.' + - eng_Latn: 'Mantralaya, Mumbai- 400 032.' + + + - mar_Deva: 'मंत्रालय, मुंबई-४०० ०३२' + - eng_Latn: 'Mantralaya, Mumbai- 400 032' + + + - mar_Deva: 'मंत्रालय, मुंबई-३२' + - eng_Latn: 'Mantralaya of Health, Mumbai- 32' + + + - mar_Deva: 'मंत्रालय, मुंबई- ४०० ०३२.' + - eng_Latn: 'Mantralaya, Mumbai- 400 032.' + + + - mar_Deva: 'मंत्रालय, मुंबई- ४०० ०३२' + - eng_Latn: 'Mantralaya, Mumbai- 400 032' + + + - mar_Deva: 'मंत्रालय, मुंबई ४०००३२' + - eng_Latn: 'Mantralaya, Mumbai 400032' + + + - mar_Deva: 'मंत्रालय, मुंबई ४०० ०३२.' + - eng_Latn: 'Mantralaya, Mumbai 400 032.' + + + - mar_Deva: 'मंत्रालय, मुंबई ४०० ०३२' + - eng_Latn: 'Mantralaya, Mumbai 400 032' + + + - mar_Deva: 'मंत्रालय, मुंबई -४०० ०३२' + - eng_Latn: 'Mantralaya, Mumbai- 400 032' + + + - mar_Deva: 'मंत्रालय, मुंबई - ४०००३२.' + - eng_Latn: 'Mantralaya, Mumbai- 400032.' + + + - mar_Deva: 'मंत्रालय, मुंबई - ४०००३२' + - eng_Latn: 'Mantralaya, Mumbai- 400032' + + + - mar_Deva: 'मंत्रालय, मुंबई - ४०० ०३२.' + - eng_Latn: 'Mantralaya, Mumbai- 400 032.' + + + - mar_Deva: 'मंत्रालय, मुंबई - ४०० ०३२,' + - eng_Latn: 'Mantralaya, Mumbai- 400 032' + + + - mar_Deva: 'मंत्रालय, मुंबई - ४०० ०३२' + - eng_Latn: 'Mantralaya, Mumbai- 400 032' + + + - mar_Deva: 'मंत्रालय, मुंबई - ३२' + - eng_Latn: 'Mantralaya of Health, Mumbai- 32' + + + - mar_Deva: 'भागविण्यात यावा.' + - eng_Latn: 'to be divided.' + + + - mar_Deva: 'प्रस्तावना:' + - eng_Latn: 'The Proposal:' + + + - mar_Deva: 'प्रस्तावना :' + - eng_Latn: 'The Proposal:' + + + - mar_Deva: 'प्रस्तावना' + - eng_Latn: 'the prelude' + + + - mar_Deva: 'पृष्ठ ७ पैकी ४' + - eng_Latn: 'Page 4 of 7' + + + - mar_Deva: 'पृष्ठ ७ पैकी ३' + - eng_Latn: 'Page 3 of 7' + + + - mar_Deva: 'पृष्ठ ७ पैकी २' + - eng_Latn: 'Page 2 of 7' + + + - mar_Deva: 'पृष्ठ ६ पैकी २' + - eng_Latn: 'Page 2 of 6' + + + - mar_Deva: 'पृष्ठ ५ पैकी ३' + - eng_Latn: 'Page 3 of 5' + + + - mar_Deva: 'पृष्ठ ५ पैकी २' + - eng_Latn: 'Page 2 of 5' + + + - mar_Deva: 'पृष्ठ ४ पैकी ३' + - eng_Latn: 'Page 3 of 4' + + + - mar_Deva: 'पृष्ठ ४ पैकी २' + - eng_Latn: 'Page 2 of 4' + + + - mar_Deva: 'पृष्ठ ३ पैकी २' + - eng_Latn: 'Page 2 of 3' + + + - mar_Deva: 'पृष्ठ ३ पैकी १' + - eng_Latn: 'Page 1 of 3' + + + - mar_Deva: 'पृष्ठ २ पैकी १' + - eng_Latn: 'Page 1 of 2' + + + - mar_Deva: 'पहा : १) महाराष्ट्र जिल्हा नियोजन समिती (रचना व कामे) अधिनियम, १९९८ २) महाराष्ट्र जिल्हा नियोजन समिती (रचना व कामे) (सुधारणा) अधिनियम, २०००' + - eng_Latn: 'The Maharashtra District Planning Committee (Composition and Functions) Act, 2000.' + + + - mar_Deva: 'परिपत्रक' + - eng_Latn: 'circular' + + + - mar_Deva: 'नोंदविलेल्या खर्चाचा ताळमेळ घालण्यात यावा. वितरित केलेल्या निधीचे उपयोगिता प्रमाणपपत्र' + - eng_Latn: 'Costs must be recorded. Certificate of utilization of funds disbursed' + + + - mar_Deva: 'निर्णया विरोधात राज्य शासनाने मा.सर्वोच्च न्यायालयात विशेष अनुज्ञा याचिका क्रमांक २८३०६/२०१७ दाखल' + - eng_Latn: 'The state government has appealed against this decision. Special Leave Petition No. 28306/2017 filed in Supreme Court' + + + - mar_Deva: 'नियोजन विभाग,' + - eng_Latn: 'The Department of Planning,' + + + - mar_Deva: 'नियोजन विभाग (रोहयो)' + - eng_Latn: 'Department of Planning (ROH)' + + + - mar_Deva: 'नियोजन विभाग (रोहयो प्रभाग)' + - eng_Latn: 'Department of Planning (Rohyo Division)' + + + - mar_Deva: 'नियोजन विभाग' + - eng_Latn: 'the Department of Planning' + + + - mar_Deva: 'नियोजन (रोहयो) विभाग' + - eng_Latn: 'Department of Planning (ROHYO)' + + + - mar_Deva: 'निधी वितरीत करणेबाबत......' + - eng_Latn: 'On the distribution of funds...' + + + - mar_Deva: 'निधी वितरीत करणेबाबत...' + - eng_Latn: 'On the distribution of funds...' + + + - mar_Deva: 'नाही. यासंदर्भात वित्त विभागाच्या शासन निर्णय क्रमांक-सेनिवे-१००१/१३०/सेवा-४, दिनांक २/०६/२००३ मधील परिशिष्ट-१, नियम ९(१४)(एफ) शेरा क्रमांक २ नुसार सक्तीचा प्रतिक्षा कालावधी निर्माण होण्यास जबाबदार ठरणाऱ्या संबंधित अधिकाऱ्यावर जबाबदारी निश्चित करण्यात येईल.' + - eng_Latn: 'In this regard, the responsibility will be fixed on the concerned officer responsible for the creation of compulsory waiting period as per Annexure-1, Rule 9 (14) (f) Section No. 2 of the Government Decision No. Seniway- 1001/130/ Service-4, dated 2/06/2003 of the Department of Finance.' + + + - mar_Deva: 'दिनांक: ३० ऑगस्ट, २०२१' + - eng_Latn: 'Date of release: August 30, 2021' + + + - mar_Deva: 'दिनांक: १४ सप्टेंबर, २०२१.' + - eng_Latn: 'Date is September 14, 2021.' + + + - mar_Deva: 'दिनांक: १० ऑगस्ट, २०२०.' + - eng_Latn: 'Date is August 10, 2020.' + + + - mar_Deva: 'दिनांक: ०९ ऑगस्ट, २०२१' + - eng_Latn: 'Date: August 9, 2021' + + + - mar_Deva: 'दिनांक : ३० ऑगस्ट, २०२१' + - eng_Latn: 'Date of release: August 30, 2021' + + + - mar_Deva: 'दिनांक : २६ डिसेंबर, २०२३.' + - eng_Latn: 'Date: December 26, 2023.' + + + - mar_Deva: 'त्यावेळच्या गुणवत्तेप्रमाणे संबंधित अधिका-यांची पदोन्नतीसाठी पात्र ठरल्यास त्याचा नियमित निवडसूचीत समावेश करण्यात येईल”. पदोन्नतीचा कार्यभार स्विकारल्यानंतर पदोन्नती नाकारता येणार नाही.' + - eng_Latn: 'If the concerned officers are found eligible for promotion as per the merit of that time, they will be included in the regular selection list. A promotion cannot be denied after the appointment.' + + + - mar_Deva: 'टाकण्यात यावा.' + - eng_Latn: 'should be put down.' + + + - mar_Deva: 'केलेल्या निधीचे उपयोगिता प्रमाणपपत्र शासनास तात्काळ सादर करावे.' + - eng_Latn: 'The utilisation certificate should be submitted to the government immediately.' + + + - mar_Deva: 'करण्यात येत आहे.' + - eng_Latn: 'is being done.' + + + - mar_Deva: 'उप सचिव, महाराष्ट्र शासन' + - eng_Latn: 'Deputy Secretary, Government of Maharashtra' + + + - mar_Deva: 'आहे.' + - eng_Latn: 'is.' + + + - mar_Deva: 'आमदार स्थानिक विकास कार्यक्रम' + - eng_Latn: 'the MLA Local Development Programme' + + + - mar_Deva: 'अर्थ व सांख्यिकी संचालनालयातील “संशोधन अधिकारी/ सांख्यिकी अधिकारी, गट-ब (राजपत्रित) ” संवर्गातील अधिकाऱ्यांच्या बदल्यांबाबत.' + - eng_Latn: 'Relocation of officers in the cadre of Research Officer/ Statistical Officer, Group-B (Gazetted) in the Directorate of Finance and Statistics.' + + + - mar_Deva: 'अर्थ व सांख्यिकी संचालनालयातील “संशोधन अधिकारी/ सांख्यिकी अधिकारी, गट-ब (राजपत्रित) ” संवर्गातील अधिकाऱ्यांच्या बदल्यांबाबत' + - eng_Latn: 'Transfer of Officers in the cadre of Research Officer/ Statistical Officer, Group-B (Gazetted) in the Directorate of Finance and Statistics' + + + - mar_Deva: 'अर्थ व सांख्यिकी संचालनालयातील “उपसंचालक, गट-अ " संवर्गातील अधिकाऱ्यांच्या बदल्यांबाबत' + - eng_Latn: 'Relocation of officers in the cadre of Deputy Director, Group-A in the Directorate of Finance and Statistics' + + + - mar_Deva: 'अर्थ व सांख्यिकी संचालनालयातील संशोधन अधिकारी/ सांख्यिकी अधिकारी, गट-ब (राजपत्रित) संवर्गातील अधिकाऱ्यांच्या सर्वसाधारण बदल्यांबाबत' + - eng_Latn: 'General transfers of Research Officers/ Statistical Officers, Group-B (Gazetted) Cadre in the Directorate of Finance& Statistics' + + + - mar_Deva: 'अभिलेख्यावर ठेवावी.' + - eng_Latn: 'Keep on record.' + + + - mar_Deva: 'अधिकाऱ्यांच्या निदर्शनास आणावी व तसे कळविल्याबाबत संबंधित अधिकाऱ्यांची स्वाक्षरी घेतलेली प्रत' + - eng_Latn: 'A copy of the signature of the concerned officer should be brought to the notice of the authorities concerned' + + + - mar_Deva: 'Digitally signed by SANJEEV HARISHCHANDRA DHURI' + - eng_Latn: 'Digitally signed by SANJEEV HARISHCHANDRA DHURI' + + + - mar_Deva: '(०१) (००) (०१) आमदार स्थानिक विकास कार्यक्रम (४५१५००१२)' + - eng_Latn: '(01) (00) (01) MLA Local Development Programme (45150012)' + + + - mar_Deva: '(००) १०२ सामुहिक विकास' + - eng_Latn: '102 Community development.' + + + - mar_Deva: '(रु.लाखात)' + - eng_Latn: '(Rs. in lakhs)' + + + - mar_Deva: '(योजनांतर्गत) (दत्तमत)' + - eng_Latn: '(Under Scheme) (Dattamat)' + + diff --git a/flow/writeTxt_/input/README.md b/flow/writeTxt_/input/README.md new file mode 100644 index 0000000..aba1d97 --- /dev/null +++ b/flow/writeTxt_/input/README.md @@ -0,0 +1 @@ +This contains PDF files diff --git a/flow/writeTxt_/logs/README.md b/flow/writeTxt_/logs/README.md new file mode 100644 index 0000000..e4711a6 --- /dev/null +++ b/flow/writeTxt_/logs/README.md @@ -0,0 +1 @@ +Contains log files, not checked in diff --git a/flow/writeTxt_/makefile b/flow/writeTxt_/makefile new file mode 100644 index 0000000..f286242 --- /dev/null +++ b/flow/writeTxt_/makefile @@ -0,0 +1,12 @@ +ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) +ROOT_DIR := $(strip $(ROOT_DIR)) + +export PYTHONPATH := $(ROOT_DIR)/../src:$(PYTHONPATH) + +.PHONY: all + +all: + poetry run python src/writeTxt.py input output > logs/info.txt + +%: + poetry run python src/writeTxt.py input/$@.pdf output/$@.pdf.doc.json diff --git a/flow/writeTxt_/output/README.md b/flow/writeTxt_/output/README.md new file mode 100644 index 0000000..c9a399f --- /dev/null +++ b/flow/writeTxt_/output/README.md @@ -0,0 +1 @@ +This contains output files diff --git a/flow/writeTxt_/src/writeTxt.py b/flow/writeTxt_/src/writeTxt.py new file mode 100644 index 0000000..fd5e49a --- /dev/null +++ b/flow/writeTxt_/src/writeTxt.py @@ -0,0 +1,43 @@ +import sys +from pathlib import Path + +import docint # noqa +import orgpedia # noqa +import word_recognizer # noqa + +def order_num(pdf_path): + return int(pdf_path.stem) + +if __name__ == "__main__": + input_path = Path(sys.argv[1]) + output_path = Path(sys.argv[2]) + + viz = docint.load("src/writeTxt.yml") + + if input_path.is_dir(): + assert output_path.is_dir() + input_files = sorted(input_path.glob("*.pdf"), key=order_num) + print(len(input_files)) + + # docs = viz.pipe_all(input_files[:3]) + docs = viz.pipe_all(input_files) + + for doc in docs: + output_doc_path = output_path / (doc.pdf_name + ".doc.json") + doc.to_disk(output_doc_path) + print(f'#docs: {viz.total_docs} #processed: {viz.total_docs - viz.unprocessed_docs}') + elif input_path.suffix.lower() == ".pdf": + doc = viz(input_path) + doc.to_disk(output_path) + + elif input_path.suffix.lower() in (".list", ".lst"): + print("processing list") + input_files = input_path.read_text().split("\n") + + pdf_files = [Path("input") / f for f in input_files if f and f[0] != "#"] + pdf_files = [p for p in pdf_files if p.exists()] + + docs = viz.pipe_all(pdf_files) + for doc in docs: + output_doc_path = output_path / (doc.pdf_name + ".doc.json") + doc.to_disk(output_doc_path) diff --git a/flow/writeTxt_/src/writeTxt.yml b/flow/writeTxt_/src/writeTxt.yml new file mode 100644 index 0000000..0110f72 --- /dev/null +++ b/flow/writeTxt_/src/writeTxt.yml @@ -0,0 +1,46 @@ +description: This folder(task) runs the cid extractor, extracts tables and paragraphs, translates them and writes as a text file. + +ignore_docs: [ ] + +output_dir: 'output' +config_dir: 'conf' +output_stub: 'doc' + +pipeline: + - name: pdf_cid_info + + - name: pdf_cid_reader + config: + swap_cids: [['sakalmarathi', 66, 126]] # u and dot (mumbai) + + - name: word_recognizer + + - name: pdftable_finder + config: + skip_row_with_merged_cells: False + heading_offset: 0 # ignore heading + header_row: never + pdfplumber_config: + vertical_strategy: lines + horizontal_strategy: lines + + - name: line_finder + config: + keep_empty_lines: True + quick: True + newline_height_multiple: 1.6 + + - name: para_finder + config: + write_output: False + + - name: extract_order_number + + - name: doc_translator_hf + config: + src_lang: 'mar_Deva' + tgt_lang: 'eng_Latn' + + - name: text_writer + config: + languages: ['en', 'mr'] diff --git a/import/documents/README.md b/import/documents/README.md new file mode 100644 index 0000000..172120d --- /dev/null +++ b/import/documents/README.md @@ -0,0 +1,4 @@ +This directory contains soft-links to the documents that need to be processed. The soft-links are to the documents in the web-sites directory. +The names of the soft-links are normalized to make sure they are short, without spaces and have a unique number in them. + +documents.yml contains the url, download time and their names. diff --git a/import/src/build_documents.py b/import/src/build_documents.py new file mode 100644 index 0000000..cd2f24d --- /dev/null +++ b/import/src/build_documents.py @@ -0,0 +1,78 @@ +import base64 +import datetime +import hashlib +import json +import os +import sys +import time +from pathlib import Path + +import requests + +DeptName = "Planning Department" + + +def request_pdf(url, pdf_file): + downloaded, dt_str = False, None + try: + print(f"Downloading {url}") + r = requests.get(url) + if r.status_code == 200: + with pdf_file.open("wb") as f: + f.write(r.content) + downloaded = True + dt_str = datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%d %H:%M:%S %Z%z") + else: + print(f"An error occurred while downloading {url} Status: {r.status_code}") + except Exception as e: + print(f"An exception occurred while downloading {url}: {e}") + + time.sleep(2) + return downloaded, dt_str + + +def main(): + all_info_path = Path(sys.argv[1]) + doc_info_path = Path(sys.argv[2]) + link_dir = Path(sys.argv[3]) + + assert link_dir.exists() + + all_infos = json.loads(all_info_path.read_text()) + dept_infos = [i for i in all_infos if i["Department Name"] == DeptName] + + doc_infos = json.loads(doc_info_path.read_text()) if doc_info_path.exists() else [] + doc_set = set(i["Unique Code"] for i in doc_infos) + doc_dir = doc_info_path.parent + + new_infos = [i for i in dept_infos if i["Unique Code"] not in doc_set] + + for info in new_infos: + doc_path = doc_dir / f"{info['Unique Code']}.pdf" + + status, dt_str = request_pdf(info["Download"], doc_path) + if not status and info["archive"]["status"]: + archive_status, dt_str = request_pdf(info["archive"]["url"], doc_path) + if not archive_status: + info["status"] = "not_downloaded" + continue + else: + info["status"] = "downloaded" + + if info["wayback"]["status"]: + h = hashlib.sha1(open(doc_path, "rb").read()) + pdf_digest = base64.b32encode(bytearray(h.digest())).decode("utf-8") + info["status"] = "verified" if pdf_digest == info["wayback"]["sha1"] else "unverified" + else: + print(f'Wayback not found {info["Unique Code"]}') + + tgt_path = link_dir / doc_path.name + src_path = os.path.relpath(str(doc_path), start=str(link_dir)) + + tgt_path.symlink_to(src_path) + doc_infos.append(info) + + doc_info_path.write_text(json.dumps(doc_infos)) + + +main() diff --git a/makefile b/makefile new file mode 100644 index 0000000..b7e7842 --- /dev/null +++ b/makefile @@ -0,0 +1,59 @@ +.DEFAULT_GOAL := help + +org_code := mahplan2024 + +tasks := writeTxt_ +tasks := $(foreach t,$(tasks),flow/$t) + + +.PHONY: help install install-tess import flow export lint format pre-commit $(tasks) + +help: + $(info Please use 'make ', where is one of) + $(info ) + $(info install install packages and prepare software environment) + $(info ) + $(info import import data required for processing document flow) + $(info flow execute the tasks in the document flow) + $(info export export the data generated by the document flow) + $(info ) + $(info lint run the code linters) + $(info format reformat code) + $(info pre-commit run pre-commit checks, runs yaml lint, you need pre-commit) + $(info ) + $(info Check the makefile to know exactly what each target is doing.) + @echo # dummy command + +install: pyproject.toml + poetry install --only=dev + +install-tess: + sudo apt-get install tesseract-ocr-all -y + +import/documents/all_infos.json: + wget -O $@ 'https://raw.githubusercontent.com/orgpedia/mahgetGR/main/export/orgpedia_mahgetGR/GRs.json' + +import: import/documents/all_infos.json + $(info running import) + poetry run python import/src/build_documents.py import/documents/all_infos.json import/documents/documents.json flow/writeTxt_/input + + +flow: $(tasks) +$(tasks): + poetry run make -C $@ + +lint: + poetry run ruff . + +format: + poetry run ruff format . + +export: + poetry run python flow/src/export.py import/documents flow/writeTxt_ export/orgpedia_mahplan2024 + + +# Use pre-commit if there are lots of edits, +# https://pre-commit.com/ for instructions +# Also set git hook `pre-commit install` +pre-commit: + pre-commit run --all-files diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..3e38b83 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,99 @@ +[tool.poetry] +name = "orgpedia-mahplan2024" +version = "0.0.1" +description = "Datapackage containing orders of Planning Department Government of Maharashtra." +authors = ["Orgpedia Foundation "] +license = "MIT" +readme = "README.md" +keywords = ["information extraction", "data package", "government data"] +classifiers=[ + 'Development Status :: 2 - Pre-Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Natural Language :: English', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + 'Topic :: Scientific/Engineering :: Artificial Intelligence', + 'Topic :: Scientific/Engineering :: Information Analysis', + +] + +packages = [ { include = "orgpedia_mahplan2024", from = "export" } ] +include = [ "export/orgpedia_mahplan2024/*" ] + +[tool.poetry.urls] +"homepage" = "https://www.orgpedia.in/" +"repository" = "https://github.com/orgpedia/mahplan2024" +"data issues" = "https://github.com/orgpedia/mahplan2024/discussions" + +[tool.poetry.dependencies] +python = ">3.8.1 <4.0" + +# this is a datapackage should not have any dependency as we are publishing data +# dependencies for running the flow are in group.dev.dependencies + + +[tool.poetry.group.dev] +optional = true + +[tool.poetry.group.dev.dependencies] +pdfplumber = "^0.9.0" +requests = "^2.31.0" +pytesseract = "^0.3.10" + +docint = {git = "https://github.com/mukundesh/docInt.git"} +ruff = "^0.2.2" +pre-commit = "^2.21.0" +translateindic = {git = "https://github.com/orgpedia/translateIndic"} +orgpedia = {git = "https://github.com/orgpedia/orgpedia.git"} + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.ruff] +# Enable Pyflakes `E` and `F` codes by default. +lint.select = ["E", "F", "W", "I001"] +lint.ignore = [] + +# Allow autofix for all enabled rules (when `--fix`) is provided. +lint.fixable = ["I001"] # fix only isort issues +lint.unfixable = [] + +# Exclude a variety of commonly ignored directories. +exclude = [ + ".git", + ".mypy_cache", + ".nox", + ".ruff_cache", + ".tox", + "__pypackages__", + "dist", + "node_modules", + "venv", + ".bak", + "input", + "output", + "logs", + "conf", + "export", + "models", + "documents", + "data_packages", + "websites", + "page_images", + "html", +] +lint.per-file-ignores = {} + +# Same as Black. +line-length = 100 + +# Allow unused variables when underscore-prefixed. +#dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +# Assume Python 3.8 +target-version = "py38"