Skip to content

Commit dfed84b

Browse files
committed
Первая версия
0 parents  commit dfed84b

453 files changed

Lines changed: 64487 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/CODEOWNERS‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
* @knQzx
2+
3+
# пакет шаблонов: тексты документов, адресаты, каналы подачи и вехи видят семьи
4+
# когда в проекте появится юрист в РФ, добавить его вторым владельцем в строки ниже
5+
/data/pack/ @knQzx
6+
/data/pack/documents/ @knQzx
7+
/data/pack/graph.yaml @knQzx
8+
/data/pack/channels.yaml @knQzx
9+
/data/pack/addressees-federal.yaml @knQzx
10+
/data/pack/turning18.yaml @knQzx
11+
/data/scenarios.yaml @knQzx
12+
13+
/.github/ @knQzx
14+
/deps.yaml @knQzx

‎.github/ISSUE_TEMPLATE/config.yml‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Помощь нужна прямо сейчас
4+
url: https://openpalliative.github.io/now/
5+
about: Это не служба помощи, здесь не ответят быстро. Если человеку плохо, звоните 112 или 103. Номера и что сказать диспетчеру на этой странице
6+
- name: Сообщить об уязвимости
7+
url: https://github.com/openpalliative/obrashchenie-kit/security/advisories/new
8+
about: Закрыто, видят только мейнтейнеры. Не пишите об уязвимостях в открытых issue
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Ошибка в документе
2+
description: В заявлении, жалобе или запросе неверная норма, адресат, срок или непонятная фраза
3+
title: "Ошибка в документе: "
4+
labels: ["review:legal"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
**Это сообщение увидят все. Не пишите ФИО, диагнозы, адреса, телефоны и номера документов.**
10+
11+
Не прикладывайте настоящие заявления, жалобы, ответы, выписки и их фото, даже свои и даже с закрашенными данными. Нам достаточно названия документа, места в тексте и того, как правильно
12+
- type: dropdown
13+
id: document
14+
attributes:
15+
label: Какой документ
16+
options:
17+
- Попросить письменный ответ вместо устного отказа
18+
- Запросить выписку из протокола врачебной комиссии
19+
- Запросить копии медицинских документов и выписки
20+
- Пожаловаться, что не ответили в срок
21+
- Повторная жалоба
22+
- Опись документов и отметка о приёме
23+
- Не знаю или другое место на сайте
24+
validations:
25+
required: true
26+
- type: input
27+
id: page
28+
attributes:
29+
label: Адрес страницы
30+
description: Скопируйте из строки браузера. Если в адресе после знака # есть что-то, удалите эту часть
31+
placeholder: https://openpalliative.github.io/obrashchenie-kit/docs/...
32+
validations:
33+
required: false
34+
- type: textarea
35+
id: quote
36+
attributes:
37+
label: Как написано у нас
38+
description: Скопируйте фразу из шаблона, без своих данных из полей
39+
validations:
40+
required: true
41+
- type: textarea
42+
id: fix
43+
attributes:
44+
label: Что не так и как правильно
45+
description: Своими словами. Если дело в норме или сроке, напишите, на что опираетесь
46+
validations:
47+
required: true
48+
- type: input
49+
id: source
50+
attributes:
51+
label: Ссылка на официальную публикацию
52+
description: Если ошибка в норме, сроке или адресате. Например, публикация на publication.pravo.gov.ru и номер страницы
53+
validations:
54+
required: false
55+
- type: dropdown
56+
id: who
57+
attributes:
58+
label: Кто вы
59+
description: Необязательно. Помогает понять, как читать замечание
60+
options:
61+
- Юрист
62+
- Работаю в НКО или хосписе
63+
- Родственник или ухаживающий
64+
- Другое
65+
validations:
66+
required: false
67+
- type: checkboxes
68+
id: privacy
69+
attributes:
70+
label: Перед отправкой
71+
options:
72+
- label: В сообщении нет ФИО, диагнозов, адресов, телефонов и номеров документов
73+
required: true
74+
- label: Я не прикладываю настоящие документы, их фото и сканы
75+
required: true

‎.github/ISSUE_TEMPLATE/problem.yml‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Сообщить о проблеме
2+
description: Ошибка на странице, непонятный текст, неверная ссылка или устаревшие данные
3+
title: "Проблема: "
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
**Это сообщение увидят все. Не пишите ФИО, диагнозы, адреса, телефоны и номера документов.**
9+
10+
Не прикладывайте сканы и фото документов, даже своих. Нам достаточно адреса страницы и пары слов о том, что не так
11+
- type: input
12+
id: page
13+
attributes:
14+
label: Адрес страницы
15+
description: Скопируйте из строки браузера. Если в адресе после знака # есть что-то, удалите эту часть
16+
placeholder: https://openpalliative.github.io/obrashchenie-kit/...
17+
validations:
18+
required: true
19+
- type: textarea
20+
id: what
21+
attributes:
22+
label: Что не так
23+
description: Своими словами. Если текст непонятный, перепишите, как было бы понятнее
24+
validations:
25+
required: true
26+
- type: input
27+
id: source
28+
attributes:
29+
label: Ссылка на официальный источник
30+
description: Если ошибка в норме, сроке или номере. Например, публикация на publication.pravo.gov.ru
31+
validations:
32+
required: false
33+
- type: dropdown
34+
id: device
35+
attributes:
36+
label: Где открывали
37+
options:
38+
- Телефон
39+
- Планшет
40+
- Компьютер
41+
- Печать на бумаге
42+
validations:
43+
required: false
44+
- type: checkboxes
45+
id: privacy
46+
attributes:
47+
label: Перед отправкой
48+
options:
49+
- label: В сообщении нет ФИО, диагнозов, адресов, телефонов и номеров документов
50+
required: true

‎.github/PULL_REQUEST_TEMPLATE.md‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
## Что меняется
2+
3+
<!-- Коротко, своими словами: что и зачем. Если закрывает issue, напишите Closes #номер -->
4+
5+
## Источник
6+
7+
<!-- Для норм, сроков, адресатов и каналов подачи: ссылка на официальную публикацию (publication.pravo.gov.ru), eoNumber, страница скана. Если правка не про данные, напишите «не нужен» -->
8+
9+
## Проверка
10+
11+
- [ ] Правка пакета (`data/pack/`, `data/scenarios.yaml`) проходит `uv run python -m pipeline.pack_lint`
12+
- [ ] У новых и изменённых записей есть источник и дата, несверенное помечено `verified: false`
13+
- [ ] Номер статьи или пункта попадает в документ только через норму из снимка pal-norms, сам текст нормы не вписан в шаблон
14+
- [ ] Нет настоящих документов, их фото и сканов, ни в коде, ни в тестах, ни в скриншотах. В примерах выдуманные данные
15+
- [ ] Нет ФИО, диагнозов, адресов, телефонов людей и номеров документов
16+
- [ ] Нет длинных тире (только `-`), эмодзи и восклицательных знаков
17+
- [ ] Нет доз, медицинских порогов, названий препаратов и советов по лечению
18+
- [ ] Шаблоны и тексты про права идут с плашкой «черновик, нужна проверка юристом в РФ»
19+
- [ ] Нет функций учёта чужих дел: списков подопечных, общих баз, отправки дел на сервер
20+
- [ ] Не меняю `opsite/` (общий UI правится только в хабе, потом `scripts/sync-ui`)
21+
- [ ] `sh scripts/gate.sh` проходит локально
22+
23+
## Кто должен посмотреть
24+
25+
<!-- Тексты документов, адресаты, каналы и сроки: юрист (review:legal). Снимки соседей и номера: review:data -->

‎.github/dependabot.yml‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: github-actions
4+
directory: /
5+
schedule:
6+
interval: monthly
7+
groups:
8+
actions:
9+
patterns: ["*"]
10+
commit-message:
11+
prefix: ci

‎.github/workflows/checks.yml‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: checks
2+
on:
3+
pull_request:
4+
push: { branches: [main] }
5+
workflow_dispatch:
6+
permissions: {}
7+
concurrency:
8+
group: checks-${{ github.event.pull_request.number || github.ref }}
9+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
10+
jobs:
11+
gate:
12+
runs-on: ubuntu-24.04
13+
timeout-minutes: 30
14+
permissions: { contents: read }
15+
steps:
16+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
17+
with: { persist-credentials: false }
18+
- uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
19+
with: { version: "0.11.7", enable-cache: true }
20+
- run: uv sync --frozen
21+
- run: sh scripts/tools/install
22+
- run: scripts/tools/bin/actionlint -shellcheck scripts/tools/bin/shellcheck .github/workflows/*.yml
23+
- run: uv run pytest -q
24+
- run: uv run python -m pipeline.pack_lint
25+
- run: uv run python -m pipeline.review_due --out _reports/review.json
26+
- run: uv run python -m opsite build
27+
- run: uv run python -m opsite check --ci
28+
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
29+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
30+
with: { node-version-file: .node-version, cache: pnpm }
31+
- run: pnpm install --frozen-lockfile
32+
- run: pnpm test:unit
33+
- run: pnpm exec playwright install --with-deps chromium firefox webkit
34+
- run: pnpm test:e2e
35+
- run: pnpm shots
36+
- if: always()
37+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
38+
with: { name: reports, path: _reports, if-no-files-found: ignore }

‎.github/workflows/pages.yml‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: pages
2+
on:
3+
push: { branches: [main] }
4+
workflow_dispatch:
5+
permissions: {}
6+
concurrency: { group: pages, cancel-in-progress: false }
7+
jobs:
8+
build:
9+
runs-on: ubuntu-24.04
10+
timeout-minutes: 15
11+
permissions: { contents: read }
12+
env: { OK_VENDOR: real }
13+
steps:
14+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
15+
with: { persist-credentials: false }
16+
- uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
17+
with: { version: "0.11.7", enable-cache: false }
18+
- run: uv sync --frozen
19+
- run: uv run python -m opsite build
20+
- run: uv run python -m opsite check --ci
21+
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
22+
with: { path: _site }
23+
deploy:
24+
needs: build
25+
runs-on: ubuntu-24.04
26+
timeout-minutes: 15
27+
permissions: { pages: write, id-token: write }
28+
environment: { name: github-pages, url: "${{ steps.d.outputs.page_url }}" }
29+
steps:
30+
- id: d
31+
uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1

‎.github/workflows/release.yml‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: release
2+
on:
3+
push: { tags: ["v*"] }
4+
permissions: {}
5+
jobs:
6+
release:
7+
runs-on: ubuntu-24.04
8+
timeout-minutes: 20
9+
permissions: { contents: write }
10+
env: { OK_VENDOR: real }
11+
steps:
12+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
13+
with: { persist-credentials: false }
14+
- uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
15+
with: { version: "0.11.7", enable-cache: false }
16+
- run: uv sync --frozen
17+
- run: uv run pytest -q
18+
- run: uv run python -m pipeline.pack_lint
19+
- run: uv run python -m opsite build
20+
- run: uv run python -m opsite check --ci
21+
- name: pack
22+
env:
23+
REPO: ${{ github.event.repository.name }}
24+
TAG: ${{ github.ref_name }}
25+
run: |
26+
zip -qr "$REPO-$TAG-site.zip" _site
27+
(cd _site && zip -qr "../$REPO-$TAG-data.zip" data/v1)
28+
sha256sum ./*.zip > SHA256SUMS
29+
- name: publish
30+
env:
31+
GH_TOKEN: ${{ github.token }}
32+
GH_REPO: ${{ github.repository }}
33+
TAG: ${{ github.ref_name }}
34+
run: gh release create "$TAG" ./*.zip SHA256SUMS --verify-tag --generate-notes

‎.github/workflows/sync-data.yml‎

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
name: sync-data
2+
on:
3+
schedule: [{ cron: "43 5 * * 2" }]
4+
workflow_dispatch:
5+
permissions: {}
6+
concurrency: { group: sync-data, cancel-in-progress: false }
7+
jobs:
8+
sync:
9+
runs-on: ubuntu-24.04
10+
timeout-minutes: 20
11+
permissions: { contents: write, pull-requests: write, issues: write, actions: write }
12+
env: { OK_VENDOR: real }
13+
steps:
14+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
15+
with: { persist-credentials: false }
16+
- uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
17+
with: { version: "0.11.7", enable-cache: false }
18+
- run: uv sync --frozen
19+
- run: mkdir -p _reports
20+
- run: uv run python -m opsite sync-data --from pages
21+
- id: build
22+
continue-on-error: true
23+
run: |
24+
uv run python -m opsite build
25+
uv run python -m opsite check --ci
26+
- name: report
27+
env:
28+
BUILD_OK: ${{ steps.build.outcome == 'success' }}
29+
run: uv run python -m pipeline.sync_report --build-ok "$BUILD_OK"
30+
- id: meta
31+
run: |
32+
echo "date=$(date -u +%Y-%m-%d)" >> "$GITHUB_OUTPUT"
33+
echo "labels=$(jq -r '.labels | join(",")' _reports/sync.json)" >> "$GITHUB_OUTPUT"
34+
if [ -n "$(git status --porcelain -- vendor deps.yaml)" ]; then echo "changed=true" >> "$GITHUB_OUTPUT"; else echo "changed=false" >> "$GITHUB_OUTPUT"; fi
35+
- name: upstream
36+
if: steps.meta.outputs.changed == 'true'
37+
run: uv run python -m pipeline.upstream
38+
- id: pr
39+
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
40+
with:
41+
branch: sync/${{ steps.meta.outputs.date }}
42+
title: "data: снимки соседей ${{ steps.meta.outputs.date }}"
43+
commit-message: "data: снимки соседей ${{ steps.meta.outputs.date }}"
44+
body: "Новые снимки pal-norms и pal-directory. Сборка: ${{ steps.build.outcome }}. Проверьте, что документы собираются и даты ответа не сдвинулись без причины. Подробности в _reports/sync.json артефакта sync-reports"
45+
labels: ${{ steps.meta.outputs.labels }}
46+
add-paths: |
47+
vendor/**
48+
deps.yaml
49+
data/snapshots/upstream.json
50+
- name: checks on the pull request
51+
if: steps.pr.outputs.pull-request-operation == 'created' || steps.pr.outputs.pull-request-operation == 'updated'
52+
env:
53+
GH_TOKEN: ${{ github.token }}
54+
GH_REPO: ${{ github.repository }}
55+
BRANCH: ${{ steps.pr.outputs.pull-request-branch }}
56+
run: gh workflow run checks.yml --ref "$BRANCH"
57+
- name: issues
58+
if: ${{ !cancelled() }}
59+
env:
60+
GH_TOKEN: ${{ github.token }}
61+
GH_REPO: ${{ github.repository }}
62+
run: uv run python -m pipeline.issues _reports/sync.json
63+
- if: always()
64+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
65+
with: { name: sync-reports, path: _reports, if-no-files-found: ignore }
66+
- name: keepalive
67+
if: always()
68+
env:
69+
GH_TOKEN: ${{ github.token }}
70+
run: gh api -X PUT "repos/$GITHUB_REPOSITORY/actions/workflows/sync-data.yml/enable"
71+
review-due:
72+
runs-on: ubuntu-24.04
73+
timeout-minutes: 10
74+
permissions: { contents: read, issues: write }
75+
steps:
76+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
77+
with: { persist-credentials: false }
78+
- uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
79+
with: { version: "0.11.7", enable-cache: false }
80+
- run: uv sync --frozen
81+
- id: when
82+
run: if [ "$(date -u +%d)" -le 7 ]; then echo "monthly=true" >> "$GITHUB_OUTPUT"; else echo "monthly=false" >> "$GITHUB_OUTPUT"; fi
83+
- if: steps.when.outputs.monthly == 'true' || github.event_name == 'workflow_dispatch'
84+
run: uv run python -m pipeline.review_due
85+
- if: steps.when.outputs.monthly == 'true' || github.event_name == 'workflow_dispatch'
86+
env:
87+
GH_TOKEN: ${{ github.token }}
88+
GH_REPO: ${{ github.repository }}
89+
run: uv run python -m pipeline.issues _reports/review.json

0 commit comments

Comments
 (0)