---
title: "ФГИС «Управление ГЕОП» — Government cloud resource management · alekhin.dev"
description: "Requests, contracts and cloud resource consumption tracking for government information systems."
canonical_url: "https://alekhin.dev/en/projects/fgisu/"
meta:
  "og:description": "Requests, contracts and cloud resource consumption tracking for government information systems."
  "og:image": "https://alekhin.dev/_og/s/o_5674785694254bca.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "ФГИС «Управление ГЕОП» — Government cloud resource management"
  "twitter:image": "https://alekhin.dev/_og/s/o_5674785694254bca.png"
---

> Index of every page on this site: [llms.txt](https://alekhin.dev/llms.txt)

[Back to projects](https://alekhin.dev/en/#projects)2022—2024

Government cloud resource management

# ФГИС «Управление ГЕОП»

Requests, contracts and cloud resource consumption tracking for government information systems.

The federal information system “Management of the Unified State Cloud Platform” connects an agency’s computing needs with approvals, contracts and service provision. The government customer is Russia’s Ministry of Digital Development, Communications and Mass Media.

The system manages the government cloud: agencies request resources for their information systems, suppliers manage service provision, and the regulator reviews requirements and monitors usage.

<dl>

<dt>Task</dt>
<dd>Connect agency requests, contract terms, infrastructure and actual cloud service consumption within a shared workflow.</dd>

<dt>What I built</dt>
<dd>Approval automation with Zeebe, microservices and shared rules for exchanging data, connected to account interfaces, resource records and analytics.</dd>

<dt>Result</dt>
<dd>A resource requirement passes through approval and becomes the basis for an order. Participants can track its status, agreed volumes and resource usage.</dd></dl>

## My role

Designed the microservice architecture and developed services with Node.js and NestJS. Wrote code for backend services, integrations and account interfaces. Responsible for business process automation with Zeebe and the contract microservice; maintained a shared service library.

<dl>

<dt>Scope</dt>
<dd>Architecture / Microservices / Business processes / Interfaces</dd>

<dt>Period</dt>
<dd>2022—2024</dd>

<dt>Status</dt>
<dd>Contribution completed</dd></dl>

## Stack

- NestJS
- TypeScript
- Zeebe
- gRPC
- Vue
- Nuxt
- PostgreSQL
- ClickHouse
- Cube.js
- RabbitMQ

*Server infrastructure. Illustration.*

A server aisle represents the cloud infrastructure whose resources FGISU manages.

## Who uses the system and why

Cloud resources support government information systems, budgets and contractual obligations. Participants need to know who requested computing capacity, the terms of provision and how it is used. The system brings these records and workflows together.

- [Voskhod Research Institute: system purpose](https://www.voskhod.ru/projects/scsmev/)
- [Public information about the government customer](https://www.voskhod.ru/news/press/gosorgany-pereezzhayut-v-oblaka/)

- ### Consumer agency

  Defines its information system’s computing, storage and other service requirements. Tracks approvals, orders and consumption.
- ### Resource supplier

  Works with services, contract terms and orders. Matches requested volumes to available infrastructure.
- ### Regulator and analyst

  Review requirements, take part in approvals and analyse resource usage. Reports help compare ordered volumes with actual consumption.

## From a request to consumption tracking

An agency needs additional resources for its information system. It submits a request and agrees its contents; the approved volumes then form the basis for orders. After services are provided, the system helps track usage. Select a step for details.

Select a block to learn its role. Keyboard: Tab, then Enter; Escape closes the description.

An agency needs additional resources for its information system. It submits a request and agrees its contents; the approved volumes then form the basis for orders. After services are provided, the system helps track usage. Select a step for details.

- **Define requirements**

  System, resources and volumes
- **Approve**

  Decisions and revisions
- **Link to an order**

  Agreed resources and contract
- **Monitor**

  Records, consumption and reports

*Request management. Demonstration interface; organisations and data are fictional.*

Example request list with filters, information systems, consumers and approval statuses. No confidential customer data is used.

## My contribution

Designed microservice interactions and implemented them in code. My main responsibilities were business process automation with Zeebe, the contract service and a shared service library. I also developed requests, resource records, reporting and account interfaces.

- ### Zeebe and business processes

  Developed the Zeebe integration, business process diagrams and task handlers. Connected approvals, revision requests, reminders and stage transitions to actions in the account interface.
- ### Contract microservice

  Developed the contract microservice and its integrations: services and pricing, volume limits, consumer access, attachments, invoices and service quality terms.
- ### Shared service library

  Maintained the shared library: data exchange between services, data structures, access checks and Zeebe integration. Shared modules were used across the system’s services.
- ### Requests and resource records

  Developed the request service and its processes. Extended the infrastructure inventory (CMDB): request versions, approved resource sets and links between volumes and orders. Worked on technical support processes.
- ### Account interfaces and integrations

  Extended the Nuxt/Vue portal’s account overview for each user role, consumption forecasts and technical support. Developed the shared entry point for interface requests (API gateway) and data exchange with services.
- ### Reports and documents

  Worked on reporting services, Cube.js models, the report builder interface and government agency IT resource records. Extended document generation, file storage and the change log.

## Microservices with clear responsibilities

The account interface sends requests to a shared entry point: the API gateway. Node.js and NestJS services handle requests, resources and contracts, while Zeebe manages approvals and participants’ tasks. Select a block to learn its role.

Select a block to learn its role. Keyboard: Tab, then Enter; Escape closes the description.

The account interface sends requests to a shared entry point: the API gateway. Node.js and NestJS services handle requests, resources and contracts, while Zeebe manages approvals and participants’ tasks. Select a block to learn its role.

- **Account interface**

  Consumer, supplier, regulator
- **API gateway**

  Shared entry point
- **Requests**

  Requirements and approvals
- **Resources**

  Infrastructure and volumes
- **Contracts**

  Services, terms and orders
- **Processes**

  Approvals and tasks
- **Analytics**

  Consumption and forecasts
- **Documents**

  Forms and attachments

Main components and their interactions.

## Keeping decisions and resources consistent

A single request brings together the agency, supplier and regulator. Resource requirements can change during approval. The system needs to preserve the agreed version, offer each participant the right actions and carry the approved volumes into the order.

- ### Requirement versions

  Revised requirements must preserve the approved resource set. Saved versions connect participants’ decisions to specific resources.
- ### Roles and access

  Consumers, suppliers and regulators work with the same request but have different actions available. Access checks apply in the interface and on the server.
- ### Long-running approvals

  A process waits for a human decision, returns a request for revision and resumes after a response. Zeebe stores its state and assigns work to task handlers.
- ### Connection to orders

  Requests, selected resources, services and orders are linked. The change log records actions, while notifications keep participants informed.

*Request contents and approval. Demonstration interface with fictional data.*

Example resource requirement with its contents, approval participants and order link. All values illustrate the workflow.

## Ordered resources and actual consumption

Work continues after approval: participants need to see how the supplied capacity is used. Analytics combines resource records and metrics for reports and consumption forecasts. The report builder offers measures, groupings and filters; the document generator produces forms and exports.

*Consumption analytics. Demonstration interface; all figures are illustrative.*

Example comparison of ordered and consumed resources. Figures and charts illustrate a workflow and do not represent operational system metrics.

<details>

<summary>Technical details

</summary>

The backend uses Node.js, NestJS and TypeScript. The API gateway accepts interface requests and routes them to the appropriate microservice. Services exchange data through gRPC, a protocol that lets one service call functions in another. A shared service library provides data structures, data exchange modules and access checks.

Zeebe manages approvals and long-running business processes: assigns tasks, waits for decisions and moves requests to the next stage. RabbitMQ and WebSocket deliver notifications so participants can see changes in their accounts.

Nuxt and Vue power account interfaces; PostgreSQL stores business data; ClickHouse and Cube.js serve analytics and forecasts. Separate services generate documents and handle files in MinIO/S3.

</details>

## Let’s discuss your project

Tell me what you need: a website, store, service or workflow automation.

## Contact

[alekhin.v99@gmail.com](mailto:alekhin.v99@gmail.com)

[Telegram](https://t.me/alekhin_vv) [GitHub](https://github.com/ValentinAlekhin)

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://alekhin.dev/en/#website","@type":"WebSite","description":"Websites, online stores, customer portals and workflow automation. I help define the task, build it and launch.","inLanguage":"en-US","name":"alekhin.dev","url":"https://alekhin.dev/en/","publisher":{"@id":"https://alekhin.dev/#identity"},"translationOfWork":{"@id":"https://alekhin.dev/#website"}},{"@id":"https://alekhin.dev/en/projects/fgisu/#webpage","@type":"WebPage","description":"Requests, contracts and cloud resource consumption tracking for government information systems.","name":"ФГИС «Управление ГЕОП» — Government cloud resource management","url":"https://alekhin.dev/en/projects/fgisu/","breadcrumb":{"@id":"https://alekhin.dev/en/projects/fgisu/#breadcrumb"},"image":{"@id":"https://alekhin.dev/#/schema/image/1"},"isPartOf":{"@id":"https://alekhin.dev/en/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://alekhin.dev/en/projects/fgisu/"]}]},{"@id":"https://alekhin.dev/#identity","@type":"Person","email":"mailto:alekhin.v99@gmail.com","jobTitle":"Website and web service developer","name":"Valentin Alekhin","url":"https://alekhin.dev/","knowsAbout":["TypeScript","Vue","Nuxt","Node.js","Go","SaaS"],"sameAs":["https://github.com/ValentinAlekhin","https://t.me/alekhin_vv"]},{"@id":"https://alekhin.dev/en/projects/fgisu/#/schema/software-application/1","@type":"SoftwareApplication","applicationCategory":"BusinessApplication","description":"Requests, contracts and cloud resource consumption tracking for government information systems.","inLanguage":"en-US","name":"ФГИС «Управление ГЕОП»","operatingSystem":"Web","url":"/en/projects/fgisu/","creator":{"@id":"https://alekhin.dev/#identity"},"image":{"@id":"https://alekhin.dev/#/schema/image/2"},"mainEntityOfPage":{"@id":"https://alekhin.dev/en/projects/fgisu/#webpage"}},{"@id":"https://alekhin.dev/en/projects/fgisu/#breadcrumb","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","name":"alekhin.dev","item":"https://alekhin.dev/en/","position":1},{"@type":"ListItem","name":"ФГИС «Управление ГЕОП»","item":"https://alekhin.dev/en/projects/fgisu/","position":2}]},{"@id":"https://alekhin.dev/#/schema/image/1","@type":"ImageObject","contentUrl":"https://alekhin.dev/projects/fgisu/datacenter-cover.webp","inLanguage":"en-US","url":"https://alekhin.dev/projects/fgisu/datacenter-cover.webp"},{"@id":"https://alekhin.dev/#/schema/image/2","@type":"ImageObject","contentUrl":"https://alekhin.dev/projects/fgisu/datacenter-cover.webp","inLanguage":"en-US","url":"https://alekhin.dev/projects/fgisu/datacenter-cover.webp"}]}
```

## Sitemap

See the full [sitemap](https://alekhin.dev/sitemap.md) for all pages.
