fix(membership-exit): заявление о выходе (200) — только цифровая подпись, без шапки утверждения
Typecheck / desktop (pull_request) Successful in 13m59s
Typecheck / controller (pull_request) Has been cancelled

Заявление о выходе из кооператива подписывается цифровой подписью (signatures[]),
поэтому из документа убрано поле собственноручной подписи (рукописная картинка):
- cooptypes 200: убраны Action.signature/Model.signature, <img src="{{ signature }}">,
  signature из exampleData;
- factory Actions/200: убрана логика поиска/сохранения подписи в mongo;
  Templates/200: убрано свойство signature из AJV-схемы;
- controller DTO: убрано поле signature (@IsString) из меты заявления.
  Это и вызывало "signature must be a string" — ValidationPipe (422, не логируется)
  рубил генерацию, т.к. фронт картинку не передаёт.

Также откат самодуманной шапки "ФОРМА УТВЕРЖДЕНА решением Собрания Совета (Протокол №)":
исходная форма заявления её не содержит. Убраны vars.participant_exit_application
(cooptypes IVars + factory VarsSchema + фикстура теста), проверка протокола в фабрике
и переводы APPROVED/approved_by_council/protocol.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
coopops
2026-06-15 14:47:30 +00:00
parent 5aea77bdcd
commit 0c995b1bca
6 changed files with 2 additions and 72 deletions
@@ -68,10 +68,6 @@ export interface IVars {
protocol_number: string
protocol_day_month_year: string
}
participant_exit_application?: { // Заявление на выход из кооператива
protocol_number: string
protocol_day_month_year: string
}
coopenomics_agreement?: { // Оферта на подключение кооператива
protocol_number: string
protocol_day_month_year: string
@@ -8,7 +8,6 @@ export const registry_id = 200
* Интерфейс генерации заявления на выход из состава пайщиков кооператива
*/
export interface Action extends IGenerate {
signature?: string
skip_save: boolean
}
@@ -23,7 +22,6 @@ export interface Model {
coop: ICooperativeData
meta: IMetaDocument
vars: IVars
signature?: string
}
export const title = 'Заявление на выход из кооператива'
@@ -42,11 +40,6 @@ padding-top: 30px;
}
</style>
<div class="digital-document">
<div style="text-align: right;">
<p style="margin: 0px !important">{% trans 'APPROVED' %}</p>
<p style="margin: 0px !important">{% trans 'approved_by_council' %} {{ coop.short_name }}</p>
<p style="margin: 0px !important">({% trans 'protocol' %} {{ vars.participant_exit_application.protocol_number }} {% trans 'from' %} {{ vars.participant_exit_application.protocol_day_month_year }})</p>
</div>
{% if type == 'individual' %}
<h1 class="header">{% trans 'application_exit_individual' %}</h1>
@@ -56,7 +49,6 @@ padding-top: 30px;
<p>{% trans 'request_to_exit', coop.full_name, coop.details.ogrn, coop.details.inn, coop.details.kpp %}</p>
<p>{% trans 'obligation_to_settle_individual' %}</p>
<div class="signature">
<img style="max-width: 150px;" src="{{ signature }}"/>
<p>{% trans 'signed_electronically' %}</p>
<p style="text-align: right;">{{ individual.last_name }} {{ individual.first_name }} {{ individual.middle_name }}</p>
</div>
@@ -69,7 +61,6 @@ padding-top: 30px;
<p>{% trans 'request_to_exit', coop.full_name, coop.details.ogrn, coop.details.inn, coop.details.kpp %}</p>
<p>{% trans 'obligation_to_settle_individual' %}</p>
<div class="signature">
<img style="max-width: 150px;" src="{{ signature }}"/>
<p>{% trans 'signed_electronically' %}</p>
<p style="text-align: right;">{{ entrepreneur.last_name }} {{ entrepreneur.first_name }} {{ entrepreneur.middle_name }}</p>
</div>
@@ -82,7 +73,6 @@ padding-top: 30px;
<p>{% trans 'request_to_exit_legal_entity', organization.represented_by.position, organization.represented_by.last_name, organization.represented_by.first_name, organization.represented_by.middle_name, organization.represented_by.based_on, organization.full_name, coop.full_name %}</p>
<p>{% trans 'obligation_to_settle_legal_entity' %}</p>
<div class="signature">
<img style="max-width: 150px;" src="{{ signature }}"/>
<p>{% trans 'signed_electronically' %}</p>
<p style="text-align: right;">{{ organization.represented_by.last_name }} {{ organization.represented_by.first_name }} {{ organization.represented_by.middle_name }}</p>
</div>
@@ -92,9 +82,6 @@ padding-top: 30px;
export const translations = {
ru: {
APPROVED: 'ФОРМА УТВЕРЖДЕНА',
approved_by_council: 'решением Собрания Совета',
protocol: 'Протокол № СС-',
from: 'от',
of_consumer_cooperative: 'Потребительского кооператива',
to_council_of: 'В Совет',
@@ -185,12 +172,7 @@ export const exampleData = {
email: 'an.mddf@gmail.com',
},
type: 'individual',
signature: '',
vars: {
passport_request: 'yes',
participant_exit_application: {
protocol_number: '10-04-2024',
protocol_day_month_year: '10 апреля 2024 г.',
},
},
}