# core/converters/system.converter.ts

> 47 lines of code and 7 definitions.

Tree: GovLab Docs
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/docs#file-docs-core-converters-system-converter-ts
Source text: https://banes-lab.com/source/docs/core/converters/system.converter.ts.txt

Listed in [core/converters](https://banes-lab.com/api/source/docs/core/converters.md), after [core/converters/package.converter.ts](https://banes-lab.com/source/docs/core/converters/package.converter.ts.md).

## Definitions

- `systemBody` (lexical_declaration, line 31)
- `systemDoc` (lexical_declaration, line 42, exported)
- `SYSTEM_DOC_ID` (lexical_declaration, line 15)
- `SECTIONS` (lexical_declaration, line 22)
- `diagrams` (lexical_declaration, line 32)
- `mermaid` (lexical_declaration, line 33)
- `deferred` (lexical_declaration, line 36)

## Contained in

- [core/converters](https://banes-lab.com/anatomy/docs/folder-docs-core-converters.md)

## Uses

- [configuration/strings/system.strings.ts](https://banes-lab.com/source/docs/configuration/strings/system.strings.ts.md)
- [core/formatters/markdown.formatter.ts](https://banes-lab.com/source/docs/core/formatters/markdown.formatter.ts.md)

## Linked from

- [configuration/strings](https://banes-lab.com/anatomy/docs/folder-docs-configuration-strings.md)
- [core/converters](https://banes-lab.com/anatomy/docs/folder-docs-core-converters.md)
- [core/formatters](https://banes-lab.com/anatomy/docs/folder-docs-core-formatters.md)

## Source

```typescript
import type { DocumentDecl, DocumentSection } from "#types/document.types";
import { SYSTEM_DOC, SYSTEM_HEADINGS, systemTitle } from "#configuration/strings/system.strings";
import type { SystemModel, SystemSection } from "#types/system.types";
import {
    dataEntityDiagram,
    deploymentDiagram,
    dispatchDiagram,
    messageContractDiagram,
    securityDiagram,
    systemContextDiagram,
} from "#core/formatters/system.formatter";
import { bullets } from "#core/formatters/markdown.formatter";
import { mermaidFence } from "#configuration/strings/package.strings";

const SYSTEM_DOC_ID = {
    concern: "architecture",
    name: "system-architecture",
    status: "current",
    type: "reference",
} as const;

const SECTIONS: readonly SystemSection[] = [
    { heading: SYSTEM_HEADINGS.context, render: systemContextDiagram },
    { heading: SYSTEM_HEADINGS.messages, render: messageContractDiagram },
    { heading: SYSTEM_HEADINGS.data, render: dataEntityDiagram },
    { heading: SYSTEM_HEADINGS.deployment, render: deploymentDiagram },
    { heading: SYSTEM_HEADINGS.dispatch, render: dispatchDiagram },
    { heading: SYSTEM_HEADINGS.security, render: securityDiagram },
];

const systemBody = function systemBody(model: SystemModel): DocumentSection[] {
    const diagrams = SECTIONS.flatMap((section): DocumentSection[] => {
        const mermaid = section.render(model);
        return mermaid === null ? [] : [{ content: mermaidFence(mermaid), heading: section.heading }];
    });
    const deferred = model.runtimeDeferred ?? [];
    return deferred.length === 0
        ? diagrams
        : [...diagrams, { content: bullets(deferred), heading: SYSTEM_HEADINGS.deferred }];
};

export const systemDoc = function systemDoc(model: SystemModel): DocumentDecl {
    return {
        ...SYSTEM_DOC_ID,
        body: systemBody(model),
        generated: true,
        lead: SYSTEM_DOC.lead,
        summary: SYSTEM_DOC.summary,
        title: systemTitle(model.name),
    };
};
```
