[@ant] feat(blagorost): шаблон 1010 «Служебная записка по расходам программы» + протокол 1011
— 1010.ExpenseStatement переписан под бумажный шаблон 1010.СлужебнаяЗапискаПоРасходам.pdf (Action: project_name/component_name/deadline/total_amount/items[]/position/statement_number; Liquid-разметка по образцу 1005 InitProjectStatement). — 1011.ExpenseDecision переписан как протокол решения совета по записке 1010 (по образцу 1006 InitProjectDecision; повестка ссылается на номер записки и состав затрат, решение фиксирует согласование списания по Фонду хозяйственной деятельности). — Из ProgramExpensesManagementResolver/Service удалены дублирующие generator-мутации capitalGenerateProgramExpenseStatement/Decision: генерация теперь только через общие capitalGenerateExpenseStatement/Decision (тот же registry 1010/1011). SDK: schema.gql + Zeus regenerated.
This commit is contained in:
@@ -7923,20 +7923,6 @@ type Mutation {
|
||||
"""
|
||||
capitalGenerateGetLoanStatement(data: GenerateDocumentInput!, options: GenerateDocumentOptionsInput): GeneratedDocument!
|
||||
|
||||
"""
|
||||
Сгенерировать решение совета о расходе программы (registry 1013)
|
||||
|
||||
Требуемые роли: chairman, member.
|
||||
"""
|
||||
capitalGenerateProgramExpenseDecision(data: GenerateDocumentInput!, options: GenerateDocumentOptionsInput): GeneratedDocument!
|
||||
|
||||
"""
|
||||
Сгенерировать заявление о расходе программы (registry 1012)
|
||||
|
||||
Требуемые роли: chairman, member.
|
||||
"""
|
||||
capitalGenerateProgramExpenseStatement(data: GenerateDocumentInput!, options: GenerateDocumentOptionsInput): GeneratedDocument!
|
||||
|
||||
"""
|
||||
Сгенерировать заявление об инвестировании в программу благороста (без привязки к проекту)
|
||||
|
||||
|
||||
-31
@@ -1,13 +1,9 @@
|
||||
import { Args, Mutation, Resolver } from '@nestjs/graphql';
|
||||
import { UseGuards } from '@nestjs/common';
|
||||
import { Throttle } from '@nestjs/throttler';
|
||||
import { GqlJwtAuthGuard } from '~/application/auth/guards/graphql-jwt-auth.guard';
|
||||
import { RolesGuard } from '~/application/auth/guards/roles.guard';
|
||||
import { AuthRoles } from '~/application/auth/decorators/auth.decorator';
|
||||
import { TransactionDTO } from '~/application/common/dto/transaction-result-response.dto';
|
||||
import { GeneratedDocumentDTO } from '~/application/document/dto/generated-document.dto';
|
||||
import { GenerateDocumentInputDTO } from '~/application/document/dto/generate-document-input.dto';
|
||||
import { GenerateDocumentOptionsInputDTO } from '~/application/document/dto/generate-document-options-input.dto';
|
||||
import { ProgramExpensesManagementService } from '../services/program-expenses-management.service';
|
||||
import {
|
||||
ApproveProgramExpenseInputDTO,
|
||||
@@ -85,31 +81,4 @@ export class ProgramExpensesManagementResolver {
|
||||
return this.service.topupProgramExpense(data);
|
||||
}
|
||||
|
||||
@Mutation(() => GeneratedDocumentDTO, {
|
||||
name: 'capitalGenerateProgramExpenseStatement',
|
||||
description: 'Сгенерировать заявление о расходе программы (registry 1012)',
|
||||
})
|
||||
@Throttle({ default: { limit: 3, ttl: 60000 } })
|
||||
@UseGuards(GqlJwtAuthGuard, RolesGuard)
|
||||
@AuthRoles(['chairman', 'member'])
|
||||
generateProgramExpenseStatement(
|
||||
@Args('data') data: GenerateDocumentInputDTO,
|
||||
@Args('options', { nullable: true }) options: GenerateDocumentOptionsInputDTO,
|
||||
): Promise<GeneratedDocumentDTO> {
|
||||
return this.service.generateProgramExpenseStatement(data, options);
|
||||
}
|
||||
|
||||
@Mutation(() => GeneratedDocumentDTO, {
|
||||
name: 'capitalGenerateProgramExpenseDecision',
|
||||
description: 'Сгенерировать решение совета о расходе программы (registry 1013)',
|
||||
})
|
||||
@Throttle({ default: { limit: 3, ttl: 60000 } })
|
||||
@UseGuards(GqlJwtAuthGuard, RolesGuard)
|
||||
@AuthRoles(['chairman', 'member'])
|
||||
generateProgramExpenseDecision(
|
||||
@Args('data') data: GenerateDocumentInputDTO,
|
||||
@Args('options', { nullable: true }) options: GenerateDocumentOptionsInputDTO,
|
||||
): Promise<GeneratedDocumentDTO> {
|
||||
return this.service.generateProgramExpenseDecision(data, options);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-29
@@ -1,11 +1,6 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Cooperative } from 'cooptypes';
|
||||
import type { TransactResult } from '@wharfkit/session';
|
||||
import { ProgramExpensesManagementInteractor } from '../use-cases/program-expenses-management.interactor';
|
||||
import { DocumentInteractor } from '~/application/document/interactors/document.interactor';
|
||||
import { GenerateDocumentInputDTO } from '~/application/document/dto/generate-document-input.dto';
|
||||
import { GenerateDocumentOptionsInputDTO } from '~/application/document/dto/generate-document-options-input.dto';
|
||||
import { GeneratedDocumentDTO } from '~/application/document/dto/generated-document.dto';
|
||||
import type {
|
||||
ApproveProgramExpenseInputDTO,
|
||||
AuthorizeProgramExpenseInputDTO,
|
||||
@@ -17,13 +12,14 @@ import type {
|
||||
|
||||
/**
|
||||
* Сервис уровня приложения для расходов программы Благорост (Эпик B).
|
||||
*
|
||||
* Генерация документов — через общие `capitalGenerateExpenseStatement` /
|
||||
* `capitalGenerateExpenseDecision` (registry 1010/1011), см.
|
||||
* `ExpensesManagementService`.
|
||||
*/
|
||||
@Injectable()
|
||||
export class ProgramExpensesManagementService {
|
||||
constructor(
|
||||
private readonly interactor: ProgramExpensesManagementInteractor,
|
||||
private readonly documentInteractor: DocumentInteractor,
|
||||
) {}
|
||||
constructor(private readonly interactor: ProgramExpensesManagementInteractor) {}
|
||||
|
||||
createProgramExpense(data: CreateProgramExpenseInputDTO): Promise<TransactResult> {
|
||||
return this.interactor.createProgramExpense(data);
|
||||
@@ -43,24 +39,4 @@ export class ProgramExpensesManagementService {
|
||||
topupProgramExpense(data: TopupProgramExpensePoolInputDTO): Promise<TransactResult> {
|
||||
return this.interactor.topupProgramExpense(data);
|
||||
}
|
||||
|
||||
async generateProgramExpenseStatement(
|
||||
data: GenerateDocumentInputDTO,
|
||||
options: GenerateDocumentOptionsInputDTO,
|
||||
): Promise<GeneratedDocumentDTO> {
|
||||
return (await this.documentInteractor.generateDocument({
|
||||
data: { ...data, registry_id: Cooperative.Registry.ExpenseStatement.registry_id },
|
||||
options,
|
||||
})) as GeneratedDocumentDTO;
|
||||
}
|
||||
|
||||
async generateProgramExpenseDecision(
|
||||
data: GenerateDocumentInputDTO,
|
||||
options: GenerateDocumentOptionsInputDTO,
|
||||
): Promise<GeneratedDocumentDTO> {
|
||||
return (await this.documentInteractor.generateDocument({
|
||||
data: { ...data, registry_id: Cooperative.Registry.ExpenseDecision.registry_id },
|
||||
options,
|
||||
})) as GeneratedDocumentDTO;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -867,14 +867,6 @@ export const AllTypesProps: Record<string,any> = {
|
||||
data:"GenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
},
|
||||
capitalGenerateProgramExpenseDecision:{
|
||||
data:"GenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
},
|
||||
capitalGenerateProgramExpenseStatement:{
|
||||
data:"GenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
},
|
||||
capitalGenerateProgramMoneyInvestStatement:{
|
||||
data:"ProgramCapitalizationMoneyInvestStatementGenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
@@ -3640,8 +3632,6 @@ export const ReturnTypes: Record<string,any> = {
|
||||
capitalGenerateGenerationPropertyInvestStatement:"GeneratedDocument",
|
||||
capitalGenerateGetLoanDecision:"GeneratedDocument",
|
||||
capitalGenerateGetLoanStatement:"GeneratedDocument",
|
||||
capitalGenerateProgramExpenseDecision:"GeneratedDocument",
|
||||
capitalGenerateProgramExpenseStatement:"GeneratedDocument",
|
||||
capitalGenerateProgramMoneyInvestStatement:"GeneratedDocument",
|
||||
capitalGenerateProjectGenerationContract:"GeneratedDocument",
|
||||
capitalGenerateRegistrationDocuments:"GenerateCapitalRegistrationDocumentsOutputDTO",
|
||||
|
||||
@@ -6523,8 +6523,6 @@ capitalGenerateGenerationPropertyInvestDecision?: [{ data: ValueTypes["GenerateD
|
||||
capitalGenerateGenerationPropertyInvestStatement?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanDecision?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanStatement?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseDecision?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseStatement?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramMoneyInvestStatement?: [{ data: ValueTypes["ProgramCapitalizationMoneyInvestStatementGenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProjectGenerationContract?: [{ data: ValueTypes["ProjectGenerationContractGenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateRegistrationDocuments?: [{ data: ValueTypes["GenerateCapitalRegistrationDocumentsInputDTO"] | Variable<any, string>},ValueTypes["GenerateCapitalRegistrationDocumentsOutputDTO"]],
|
||||
@@ -14941,8 +14939,6 @@ capitalGenerateGenerationPropertyInvestDecision?: [{ data: ResolverInputTypes["G
|
||||
capitalGenerateGenerationPropertyInvestStatement?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanDecision?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanStatement?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseDecision?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseStatement?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramMoneyInvestStatement?: [{ data: ResolverInputTypes["ProgramCapitalizationMoneyInvestStatementGenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProjectGenerationContract?: [{ data: ResolverInputTypes["ProjectGenerationContractGenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateRegistrationDocuments?: [{ data: ResolverInputTypes["GenerateCapitalRegistrationDocumentsInputDTO"]},ResolverInputTypes["GenerateCapitalRegistrationDocumentsOutputDTO"]],
|
||||
@@ -23291,14 +23287,6 @@ export type ModelTypes = {
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateGetLoanStatement: ModelTypes["GeneratedDocument"],
|
||||
/** Сгенерировать решение совета о расходе программы (registry 1013)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseDecision: ModelTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление о расходе программы (registry 1012)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseStatement: ModelTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление об инвестировании в программу благороста (без привязки к проекту)
|
||||
|
||||
Требуемые роли: chairman, member, user. */
|
||||
@@ -32342,14 +32330,6 @@ export type GraphQLTypes = {
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateGetLoanStatement: GraphQLTypes["GeneratedDocument"],
|
||||
/** Сгенерировать решение совета о расходе программы (registry 1013)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseDecision: GraphQLTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление о расходе программы (registry 1012)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseStatement: GraphQLTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление об инвестировании в программу благороста (без привязки к проекту)
|
||||
|
||||
Требуемые роли: chairman, member, user. */
|
||||
|
||||
@@ -1,22 +1,122 @@
|
||||
import type { ICommonUser, ICooperativeData, IVars } from '../../model'
|
||||
import type { IGenerate, IMetaDocument } from '../../document'
|
||||
|
||||
export const registry_id = 1010
|
||||
|
||||
// Модель действия для генерации
|
||||
/**
|
||||
* Интерфейс генерации служебной записки по расходам программы «Благорост».
|
||||
* Соответствует бумажному шаблону 1010 (см. `~/blago/production/shared/1010.СлужебнаяЗапискаПоРасходам.pdf`).
|
||||
*/
|
||||
export interface Action extends IGenerate {
|
||||
registry_id: number
|
||||
statement_number: string
|
||||
project_name: string
|
||||
project_hash: string
|
||||
component_name: string
|
||||
component_hash: string
|
||||
deadline: string
|
||||
total_amount: string
|
||||
items: string[]
|
||||
position: string
|
||||
}
|
||||
|
||||
export type Meta = IMetaDocument & Action
|
||||
|
||||
// Модель данных документа
|
||||
export interface Model {
|
||||
meta: IMetaDocument
|
||||
coop: ICooperativeData
|
||||
vars: IVars
|
||||
user: ICommonUser
|
||||
statement_number: string
|
||||
project_name: string
|
||||
project_hash: string
|
||||
component_name: string
|
||||
component_hash: string
|
||||
deadline: string
|
||||
total_amount: string
|
||||
items: string[]
|
||||
position: string
|
||||
}
|
||||
|
||||
export const title = 'Заявление о расходах'
|
||||
export const description = 'Форма заявления о произведенных расходах'
|
||||
export const context = '<div class="digital-document"><div style="text-align: center"><h2>ЗАЯВЛЕНИЕ О РАСХОДАХ</h2></div><p>Прошу рассмотреть и утвердить произведенные расходы на нужды кооператива.</p><p>Подпись: Иван Иванович</p></div>'
|
||||
export const title = 'Служебная записка по расходам программы Благорост'
|
||||
export const description = 'Заявление пайщика в Совет кооператива о согласовании списания затрат по компоненту проекта из средств целевой программы «Благорост»'
|
||||
|
||||
export const translations = {}
|
||||
export const exampleData = {}
|
||||
export const context = `<style>
|
||||
.digital-document { padding: 20px; white-space: pre-wrap; }
|
||||
.digital-document p { margin: 0 0 8px 0; }
|
||||
.header-right { text-align: right; }
|
||||
.title { text-align: center; font-weight: bold; margin: 24px 0 16px 0; }
|
||||
.items { padding-left: 32px; }
|
||||
.items li { margin-bottom: 4px; }
|
||||
.signature { display: flex; justify-content: space-between; margin-top: 32px; }
|
||||
.signature .who { text-align: left; }
|
||||
.signature .sig { text-align: right; }
|
||||
</style>
|
||||
|
||||
<div class="digital-document">
|
||||
<p class="header-right">{% trans 'addressee_council' %}<br/>{% trans 'addressee_coop_label' %} {{ vars.full_abbr }}<br/>"{{ vars.name }}"</p>
|
||||
<p class="header-right">{% trans 'addressee_from' %} {{ user.full_name_or_short_name }}</p>
|
||||
<p>{% trans 'date_label' %} {{ meta.created_at }}</p>
|
||||
<p class="title">{% trans 'document_title', statement_number %}</p>
|
||||
<p>{% trans 'preamble', component_name, project_name, deadline, total_amount %}</p>
|
||||
<ol class="items">
|
||||
{% for item in items %}<li>{{ item }}</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
<p>{% trans 'fund_clause' %}</p>
|
||||
<div class="signature">
|
||||
<div class="who">{{ user.full_name_or_short_name }}<br/>{{ position }}</div>
|
||||
<div class="sig">{% trans 'signed_by_digital_signature' %}</div>
|
||||
</div>
|
||||
</div>`
|
||||
|
||||
export const translations = {
|
||||
ru: {
|
||||
addressee_council: 'В Совет Потребительского Кооператива',
|
||||
addressee_coop_label: '',
|
||||
addressee_from: 'от пайщика',
|
||||
date_label: 'Дата:',
|
||||
document_title: 'СЛУЖЕБНАЯ ЗАПИСКА № {0}',
|
||||
preamble:
|
||||
'Прошу согласовать списание затрат на реализацию Компонента "{0}", в рамках Проекта "{1}" в срок до {2}, согласно условий и из средств целевой потребительской программы "БЛАГОРОСТ" в общей сумме {3} руб., а именно:',
|
||||
fund_clause: 'по Фонду хозяйственной деятельности.',
|
||||
signed_by_digital_signature: 'Подписано электронной подписью',
|
||||
},
|
||||
en: {
|
||||
addressee_council: 'To the Council of the Consumer Cooperative',
|
||||
addressee_coop_label: '',
|
||||
addressee_from: 'from the participant',
|
||||
date_label: 'Date:',
|
||||
document_title: 'SERVICE MEMO No. {0}',
|
||||
preamble:
|
||||
'I request approval of expenses for implementation of Component "{0}", within Project "{1}" by {2}, in accordance with terms and from funds of the targeted consumer program "BLAGOROST" in the total amount of {3} RUB, namely:',
|
||||
fund_clause: 'from the Operating Activities Fund.',
|
||||
signed_by_digital_signature: 'Signed with electronic signature',
|
||||
},
|
||||
}
|
||||
|
||||
export const exampleData = {
|
||||
meta: {
|
||||
created_at: '01.06.2026',
|
||||
},
|
||||
statement_number: '12',
|
||||
project_name: 'Цифровой кооператив',
|
||||
project_hash: 'B2C3D4E5F6789ABC',
|
||||
component_name: 'Платёжный шлюз',
|
||||
component_hash: 'A1B2C3D4E5F6789A',
|
||||
deadline: '31.07.2026',
|
||||
total_amount: '150 000',
|
||||
items: [
|
||||
'Оплата хостинга и доменных имён за июль 2026 г. — 30 000 руб.',
|
||||
'Закупка SSL-сертификатов на 12 мес. — 20 000 руб.',
|
||||
'Оплата работ подрядчика по интеграции — 100 000 руб.',
|
||||
],
|
||||
position: 'Председатель Совета',
|
||||
vars: {
|
||||
name: 'ВОСХОД',
|
||||
full_abbr: 'Потребительский Кооператив',
|
||||
},
|
||||
user: {
|
||||
full_name_or_short_name: 'Иванов Иван Иванович',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,24 +1,191 @@
|
||||
import type { IGenerate, IMetaDocument } from '../../document'
|
||||
import type { IDecisionData, IGenerate, IMetaDocument } from '../../document'
|
||||
import type { ICooperativeData, IVars } from '../../model'
|
||||
|
||||
export const registry_id = 1011
|
||||
|
||||
// Модель действия для генерации
|
||||
/**
|
||||
* Интерфейс генерации протокола решения совета по служебной записке о расходах
|
||||
* программы «Благорост» (соответствует записке 1010).
|
||||
*/
|
||||
export interface Action extends IGenerate {
|
||||
registry_id: number
|
||||
request_id: number
|
||||
decision_id: number
|
||||
statement_number: string
|
||||
project_name: string
|
||||
project_hash: string
|
||||
component_name: string
|
||||
component_hash: string
|
||||
deadline: string
|
||||
total_amount: string
|
||||
items: string[]
|
||||
applicant_full_name: string
|
||||
}
|
||||
|
||||
export type Meta = IMetaDocument & Action
|
||||
|
||||
// Модель данных документа
|
||||
export interface Model {
|
||||
coop: ICooperativeData
|
||||
meta: IMetaDocument
|
||||
decision: IDecisionData
|
||||
vars: IVars
|
||||
statement_number: string
|
||||
project_name: string
|
||||
project_hash: string
|
||||
component_name: string
|
||||
component_hash: string
|
||||
deadline: string
|
||||
total_amount: string
|
||||
items: string[]
|
||||
applicant_full_name: string
|
||||
}
|
||||
|
||||
export const title = 'Решение совета о расходах'
|
||||
export const description = 'Форма решения совета о произведенных расходах'
|
||||
export const context = '<div class="digital-document"><h1>ПРОТОКОЛ № 1</h1><p>Собрания Совета кооператива ВОСХОД</p><p>Решение: Одобрить произведенные расходы пайщика Иван Иванович.</p><p>Подпись: Алексей Муравьев</p></div>'
|
||||
export const title = 'Протокол решения совета по служебной записке о расходах программы Благорост'
|
||||
export const description = 'Форма протокола решения совета по согласованию списания затрат по записке 1010 из средств программы «Благорост»'
|
||||
|
||||
export const translations = {}
|
||||
export const exampleData = {}
|
||||
export const context = `<style>
|
||||
h1 { margin: 0; text-align: center; }
|
||||
h3 { margin: 0; padding-top: 15px; }
|
||||
.about { padding: 20px; }
|
||||
.about p { margin: 0; }
|
||||
.signature { padding-top: 20px; }
|
||||
.digital-document { padding: 20px; white-space: pre-wrap; }
|
||||
.subheader { padding-bottom: 20px; }
|
||||
table { width: 100%; border-collapse: collapse; }
|
||||
th, td { border: 1px solid #ccc; padding: 8px; text-align: left; word-wrap: break-word; overflow-wrap: break-word; }
|
||||
th { background-color: #f4f4f4; width: 30%; }
|
||||
.items { padding-left: 32px; margin: 0; }
|
||||
.items li { margin-bottom: 4px; }
|
||||
</style>
|
||||
|
||||
<div class="digital-document">
|
||||
<h1 class="header">{% trans 'protocol_number', decision.id %}</h1>
|
||||
<p style="text-align:center" class="subheader">{% trans 'council_meeting_name' %} {{ vars.full_abbr_genitive }} "{{ vars.name }}"</p>
|
||||
<p style="text-align: right">{{ meta.created_at }}, {{ coop.city }}</p>
|
||||
<table class="about">
|
||||
<tbody>
|
||||
<tr><th>{% trans 'meeting_format' %}</th><td>{% trans 'meeting_format_value' %}</td></tr>
|
||||
<tr><th>{% trans 'meeting_place' %}</th><td>{{ coop.full_address }}</td></tr>
|
||||
<tr><th>{% trans 'meeting_date' %}</th><td>{{ decision.date }}</td></tr>
|
||||
<tr><th>{% trans 'opening_time' %}</th><td>{{ decision.time }}</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>{% trans 'council_members' %}</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
{% for member in coop.members %}
|
||||
<tr><th>{% if member.is_chairman %}{% trans 'chairman_of_the_council' %}{% else %}{% trans 'member_of_the_council' %}{% endif %}</th><td>{{ member.last_name }} {{ member.first_name }} {{ member.middle_name }}</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>{% trans 'meeting_legality' %}</h3>
|
||||
<p>{% trans 'voting_results', decision.voters_percent %} {% trans 'quorum' %} {% trans 'chairman_of_the_meeting', coop.chairman.last_name, coop.chairman.first_name, coop.chairman.middle_name %}.</p>
|
||||
<h3>{% trans 'agenda' %}</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>№</th><td>{% trans 'question' %}</td></tr>
|
||||
<tr><th>1</th><td>{% trans 'expense_question', statement_number, applicant_full_name, component_name, project_name, deadline, total_amount %}</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>{% trans 'expense_items_label' %}</h3>
|
||||
<ol class="items">
|
||||
{% for item in items %}<li>{{ item }}</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
<h3>{% trans 'voting' %}</h3>
|
||||
<p>{% trans 'vote_results' %}</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>{% trans 'votes_for' %}</th><td>{{ decision.votes_for }}</td></tr>
|
||||
<tr><th>{% trans 'votes_against' %}</th><td>{{ decision.votes_against }}</td></tr>
|
||||
<tr><th>{% trans 'votes_abstained' %}</th><td>{{ decision.votes_abstained }}</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>{% trans 'decision_made' %}</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>№</th><td>{% trans 'decision' %}</td></tr>
|
||||
<tr><th>1</th><td>{% trans 'expense_decision', component_name, project_name, deadline, total_amount %}</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<p>{% trans 'closing_time', decision.time %}</p>
|
||||
<div class="signature"><p>{% trans 'signature' %}</p><p>{% trans 'chairman' %} {{ coop.chairman.last_name }} {{ coop.chairman.first_name }} {{ coop.chairman.middle_name }}</p></div>
|
||||
</div>`
|
||||
|
||||
export const translations = {
|
||||
ru: {
|
||||
meeting_format: 'Форма',
|
||||
meeting_format_value: 'Заочная',
|
||||
meeting_place: 'Место',
|
||||
meeting_date: 'Дата',
|
||||
opening_time: 'Время открытия',
|
||||
council_members: 'ЧЛЕНЫ СОВЕТА',
|
||||
voting_results: 'Количество голосов составляет {0}% от общего числа членов Совета.',
|
||||
quorum: 'Кворум для решения поставленных на повестку дня вопросов имеется.',
|
||||
meeting_legality: 'СОБРАНИЕ ПРАВОМОЧНО',
|
||||
chairman_of_the_meeting: 'Председатель собрания совета: {0} {1} {2}',
|
||||
agenda: 'ПОВЕСТКА ДНЯ',
|
||||
question: 'Вопрос',
|
||||
expense_question:
|
||||
'О согласовании служебной записки № {0} от {1} по списанию затрат на реализацию Компонента "{2}" в рамках Проекта "{3}" в срок до {4} из средств программы "БЛАГОРОСТ" в общей сумме {5} руб.',
|
||||
expense_items_label: 'СОСТАВ ЗАТРАТ',
|
||||
voting: 'ГОЛОСОВАНИЕ',
|
||||
vote_results: 'По первому вопросу повестки дня проголосовали:',
|
||||
votes_for: 'ЗА',
|
||||
votes_against: 'ПРОТИВ',
|
||||
votes_abstained: 'ВОЗДЕРЖАЛСЯ',
|
||||
decision_made: 'РЕШИЛИ',
|
||||
decision: 'Решение',
|
||||
expense_decision:
|
||||
'Согласовать списание затрат на реализацию Компонента "{0}" в рамках Проекта "{1}" в срок до {2} в общей сумме {3} руб. из средств целевой потребительской программы "БЛАГОРОСТ" по Фонду хозяйственной деятельности.',
|
||||
closing_time: 'Время закрытия собрания совета: {0}.',
|
||||
protocol_number: 'ПРОТОКОЛ № {0}',
|
||||
council_meeting_name: 'Собрания Совета',
|
||||
chairman_of_the_council: 'Председатель совета',
|
||||
member_of_the_council: 'Член совета',
|
||||
signature: 'Документ подписан электронной подписью.',
|
||||
chairman: 'Председатель',
|
||||
},
|
||||
}
|
||||
|
||||
export const exampleData = {
|
||||
meta: {
|
||||
created_at: '02.06.2026 00:01',
|
||||
},
|
||||
statement_number: '12',
|
||||
applicant_full_name: 'Иванов Иван Иванович',
|
||||
project_name: 'Цифровой кооператив',
|
||||
project_hash: 'B2C3D4E5F6789ABC',
|
||||
component_name: 'Платёжный шлюз',
|
||||
component_hash: 'A1B2C3D4E5F6789A',
|
||||
deadline: '31.07.2026',
|
||||
total_amount: '150 000',
|
||||
items: [
|
||||
'Оплата хостинга и доменных имён за июль 2026 г. — 30 000 руб.',
|
||||
'Закупка SSL-сертификатов на 12 мес. — 20 000 руб.',
|
||||
'Оплата работ подрядчика по интеграции — 100 000 руб.',
|
||||
],
|
||||
coop: {
|
||||
city: 'Москва',
|
||||
full_address: 'Смольная 3-84',
|
||||
chairman: {
|
||||
last_name: 'Муравьев',
|
||||
first_name: 'Алексей',
|
||||
middle_name: 'Николаевич',
|
||||
},
|
||||
},
|
||||
decision: {
|
||||
time: '00:01',
|
||||
date: '02.06.2026',
|
||||
votes_for: '3',
|
||||
votes_against: '0',
|
||||
votes_abstained: '0',
|
||||
voters_percent: '100',
|
||||
id: '12',
|
||||
},
|
||||
vars: {
|
||||
full_abbr_genitive: 'потребительского кооператива',
|
||||
name: 'ВОСХОД',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -867,14 +867,6 @@ export const AllTypesProps: Record<string,any> = {
|
||||
data:"GenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
},
|
||||
capitalGenerateProgramExpenseDecision:{
|
||||
data:"GenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
},
|
||||
capitalGenerateProgramExpenseStatement:{
|
||||
data:"GenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
},
|
||||
capitalGenerateProgramMoneyInvestStatement:{
|
||||
data:"ProgramCapitalizationMoneyInvestStatementGenerateDocumentInput",
|
||||
options:"GenerateDocumentOptionsInput"
|
||||
@@ -3640,8 +3632,6 @@ export const ReturnTypes: Record<string,any> = {
|
||||
capitalGenerateGenerationPropertyInvestStatement:"GeneratedDocument",
|
||||
capitalGenerateGetLoanDecision:"GeneratedDocument",
|
||||
capitalGenerateGetLoanStatement:"GeneratedDocument",
|
||||
capitalGenerateProgramExpenseDecision:"GeneratedDocument",
|
||||
capitalGenerateProgramExpenseStatement:"GeneratedDocument",
|
||||
capitalGenerateProgramMoneyInvestStatement:"GeneratedDocument",
|
||||
capitalGenerateProjectGenerationContract:"GeneratedDocument",
|
||||
capitalGenerateRegistrationDocuments:"GenerateCapitalRegistrationDocumentsOutputDTO",
|
||||
|
||||
@@ -6523,8 +6523,6 @@ capitalGenerateGenerationPropertyInvestDecision?: [{ data: ValueTypes["GenerateD
|
||||
capitalGenerateGenerationPropertyInvestStatement?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanDecision?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanStatement?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseDecision?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseStatement?: [{ data: ValueTypes["GenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramMoneyInvestStatement?: [{ data: ValueTypes["ProgramCapitalizationMoneyInvestStatementGenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateProjectGenerationContract?: [{ data: ValueTypes["ProjectGenerationContractGenerateDocumentInput"] | Variable<any, string>, options?: ValueTypes["GenerateDocumentOptionsInput"] | undefined | null | Variable<any, string>},ValueTypes["GeneratedDocument"]],
|
||||
capitalGenerateRegistrationDocuments?: [{ data: ValueTypes["GenerateCapitalRegistrationDocumentsInputDTO"] | Variable<any, string>},ValueTypes["GenerateCapitalRegistrationDocumentsOutputDTO"]],
|
||||
@@ -14941,8 +14939,6 @@ capitalGenerateGenerationPropertyInvestDecision?: [{ data: ResolverInputTypes["G
|
||||
capitalGenerateGenerationPropertyInvestStatement?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanDecision?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateGetLoanStatement?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseDecision?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramExpenseStatement?: [{ data: ResolverInputTypes["GenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProgramMoneyInvestStatement?: [{ data: ResolverInputTypes["ProgramCapitalizationMoneyInvestStatementGenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateProjectGenerationContract?: [{ data: ResolverInputTypes["ProjectGenerationContractGenerateDocumentInput"], options?: ResolverInputTypes["GenerateDocumentOptionsInput"] | undefined | null},ResolverInputTypes["GeneratedDocument"]],
|
||||
capitalGenerateRegistrationDocuments?: [{ data: ResolverInputTypes["GenerateCapitalRegistrationDocumentsInputDTO"]},ResolverInputTypes["GenerateCapitalRegistrationDocumentsOutputDTO"]],
|
||||
@@ -23291,14 +23287,6 @@ export type ModelTypes = {
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateGetLoanStatement: ModelTypes["GeneratedDocument"],
|
||||
/** Сгенерировать решение совета о расходе программы (registry 1013)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseDecision: ModelTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление о расходе программы (registry 1012)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseStatement: ModelTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление об инвестировании в программу благороста (без привязки к проекту)
|
||||
|
||||
Требуемые роли: chairman, member, user. */
|
||||
@@ -32342,14 +32330,6 @@ export type GraphQLTypes = {
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateGetLoanStatement: GraphQLTypes["GeneratedDocument"],
|
||||
/** Сгенерировать решение совета о расходе программы (registry 1013)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseDecision: GraphQLTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление о расходе программы (registry 1012)
|
||||
|
||||
Требуемые роли: chairman, member. */
|
||||
capitalGenerateProgramExpenseStatement: GraphQLTypes["GeneratedDocument"],
|
||||
/** Сгенерировать заявление об инвестировании в программу благороста (без привязки к проекту)
|
||||
|
||||
Требуемые роли: chairman, member, user. */
|
||||
|
||||
Reference in New Issue
Block a user