docs: панель файлов — маршруты консолидации в CLAUDE.md и demo-prepare.sh (#26)
Загрузка и список файлов в demo-prepare.sh идут через /consolidations/$C/legal-entities/$LE/files, C берётся из consolidation_id карточки версии. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
6ee1d0e1cb
commit
9f56442a0c
@ -41,7 +41,7 @@ SPA кредитного аналитика АРМ КА: справочники
|
|||||||
- `src/utils/` — чистые функции без React/store/API: деньги (`money.ts`, суммы — строки), подписи статусов/типов/периодов (`labels.ts`), скачивание и имя файла (`download.ts`).
|
- `src/utils/` — чистые функции без React/store/API: деньги (`money.ts`, суммы — строки), подписи статусов/типов/периодов (`labels.ts`), скачивание и имя файла (`download.ts`).
|
||||||
- `src/auth/` — `AuthGate` (профиль `/me`), `DevLogin` (`POST /dev/token`; форма показывается в любой сборке, заглушка «вход через РАИСА» — после 404 «Not Found» от бэкенда, то есть когда dev-эмитент выключен), `token.ts`.
|
- `src/auth/` — `AuthGate` (профиль `/me`), `DevLogin` (`POST /dev/token`; форма показывается в любой сборке, заглушка «вход через РАИСА» — после 404 «Not Found» от бэкенда, то есть когда dev-эмитент выключен), `token.ts`.
|
||||||
- `src/store/` — Redux Toolkit: `store.ts`, слайсы `companyGroupsSlice` и `consolidations` (+ `thunks.ts`).
|
- `src/store/` — Redux Toolkit: `store.ts`, слайсы `companyGroupsSlice` и `consolidations` (+ `thunks.ts`).
|
||||||
- `src/layouts/` — страницы (маршруты в `src/App.tsx`, в т.ч. `/documents/:document_id` и `/groups/:group_id/versions/:version_id/osv`), `src/widgets/` — блоки экранов (`DocumentReview` — проверка ББ/ОФР/ОСВ со сканом, `ConsolidatedOsv` — сводная ОСВ, `FilesDrawer` — файлы ЮЛ), `src/components/` — примитивы
|
- `src/layouts/` — страницы (маршруты в `src/App.tsx`, в т.ч. `/documents/:document_id` и `/groups/:group_id/versions/:version_id/osv`), `src/widgets/` — блоки экранов (`DocumentReview` — проверка ББ/ОФР/ОСВ со сканом, `ConsolidatedOsv` — сводная ОСВ, `FilesDrawer` — файлы ЮЛ (стол консолидации / все файлы ЮЛ, подпись консолидации, селектор `store/slices/consolidations/selectors.ts`)), `src/components/` — примитивы
|
||||||
(`GenericTable`, `TableTag`, `PageTitle`), `src/types/` — DTO API.
|
(`GenericTable`, `TableTag`, `PageTitle`), `src/types/` — DTO API.
|
||||||
|
|
||||||
## Команды
|
## Команды
|
||||||
|
|||||||
@ -9,7 +9,10 @@ API="${API:-localhost:8000/api/v1}"
|
|||||||
F="${FIXTURES_DIR:-$(cd "$(dirname "$0")/../.." && pwd)/fixtures}/osv"
|
F="${FIXTURES_DIR:-$(cd "$(dirname "$0")/../.." && pwd)/fixtures}/osv"
|
||||||
H="Authorization: Bearer $(curl -sf -X POST "$API/dev/token" -H 'Content-Type: application/json' -d "{\"email\":\"$EMAIL\"}" | python3 -c 'import sys,json;print(json.load(sys.stdin)["access_token"])')"
|
H="Authorization: Bearer $(curl -sf -X POST "$API/dev/token" -H 'Content-Type: application/json' -d "{\"email\":\"$EMAIL\"}" | python3 -c 'import sys,json;print(json.load(sys.stdin)["access_token"])')"
|
||||||
|
|
||||||
members=$(curl -sf "$API/consolidations/versions/$V" -H "$H" | python3 -c '
|
card=$(curl -sf "$API/consolidations/versions/$V" -H "$H")
|
||||||
|
# загрузка идёт в консолидацию (период), а не в версию: consolidation_id берём из карточки версии
|
||||||
|
C=$(echo "$card" | python3 -c 'import sys,json;print(json.load(sys.stdin)["consolidation_id"])')
|
||||||
|
members=$(echo "$card" | python3 -c '
|
||||||
import sys,json
|
import sys,json
|
||||||
for m in json.load(sys.stdin)["members"]: print(m["id"], m["inn"], m["name"])')
|
for m in json.load(sys.stdin)["members"]: print(m["id"], m["inn"], m["name"])')
|
||||||
# ЮЛ ищем по ИНН (в справочнике имена могут быть в верхнем регистре)
|
# ЮЛ ищем по ИНН (в справочнике имена могут быть в верхнем регистре)
|
||||||
@ -19,7 +22,7 @@ LE_SCH=$(le_by_inn 3528104476)
|
|||||||
[ -n "$LE_RB" ] && [ -n "$LE_SCH" ] || { echo "В периметре версии нет РБ или Счастливочной:"; echo "$members"; exit 1; }
|
[ -n "$LE_RB" ] && [ -n "$LE_SCH" ] || { echo "В периметре версии нет РБ или Счастливочной:"; echo "$members"; exit 1; }
|
||||||
|
|
||||||
upload() { for f in "$F/$2"/2024-Q{1,2,3}/*; do
|
upload() { for f in "$F/$2"/2024-Q{1,2,3}/*; do
|
||||||
curl -s -X POST "$API/legal-entities/$1/files?consolidation_version_id=$V" -H "$H" -F "files=@$f" \
|
curl -s -X POST "$API/consolidations/$C/legal-entities/$1/files" -H "$H" -F "files=@$f" \
|
||||||
| python3 -c 'import sys,json;d=json.load(sys.stdin);print("принят" if d.get("accepted") else d.get("rejected") or d)'
|
| python3 -c 'import sys,json;d=json.load(sys.stdin);print("принят" if d.get("accepted") else d.get("rejected") or d)'
|
||||||
done; }
|
done; }
|
||||||
upload "$LE_RB" rb
|
upload "$LE_RB" rb
|
||||||
@ -29,7 +32,7 @@ echo "Жду распознавания…"
|
|||||||
for _ in $(seq 1 60); do
|
for _ in $(seq 1 60); do
|
||||||
pending=0
|
pending=0
|
||||||
for LE in $LE_RB $LE_SCH; do
|
for LE in $LE_RB $LE_SCH; do
|
||||||
n=$(curl -sf "$API/legal-entities/$LE/files?limit=100" -H "$H" | python3 -c 'import sys,json;print(sum(f["status"] in ("UPLOADED","PROCESSING") for f in json.load(sys.stdin)["items"]))')
|
n=$(curl -sf "$API/consolidations/$C/legal-entities/$LE/files?limit=100" -H "$H" | python3 -c 'import sys,json;print(sum(f["status"] in ("UPLOADED","PROCESSING") for f in json.load(sys.stdin)["items"]))')
|
||||||
pending=$((pending + n))
|
pending=$((pending + n))
|
||||||
done
|
done
|
||||||
[ "$pending" -eq 0 ] && break
|
[ "$pending" -eq 0 ] && break
|
||||||
@ -37,7 +40,7 @@ for _ in $(seq 1 60); do
|
|||||||
done
|
done
|
||||||
|
|
||||||
for LE in $LE_RB $LE_SCH; do
|
for LE in $LE_RB $LE_SCH; do
|
||||||
curl -sf "$API/legal-entities/$LE/files?limit=100" -H "$H" | python3 -c '
|
curl -sf "$API/consolidations/$C/legal-entities/$LE/files?limit=100" -H "$H" | python3 -c '
|
||||||
import sys,json
|
import sys,json
|
||||||
for f in json.load(sys.stdin)["items"]:
|
for f in json.load(sys.stdin)["items"]:
|
||||||
for d in f["documents"]:
|
for d in f["documents"]:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user