# core/counters/finding.counter.ts

> 10 lines of code and 2 definitions.

Tree: GovLab Docs
Language: typescript
Layer: operations
Canonical: https://banes-lab.com/anatomy/docs#file-docs-core-counters-finding-counter-ts
Source text: https://banes-lab.com/source/docs/core/counters/finding.counter.ts.txt

Listed in [core/counters](https://banes-lab.com/api/source/docs/core/counters.md), before [core/counters/source.counter.ts](https://banes-lab.com/source/docs/core/counters/source.counter.ts.md).

## Definitions

- `countFindings` (lexical_declaration, line 4, exported)
- `sumCategories` (lexical_declaration, line 8, exported)

## Contained in

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

## Used by

- [core/coordinators/validation.coordinator.ts](https://banes-lab.com/source/docs/core/coordinators/validation.coordinator.ts.md)

## Linked from

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

## Source

```typescript
import type { Categories, PerDocEntry } from "#types/finding.types";
import { FINDING_CATEGORIES } from "#configuration/constants/finding.constants";

export const countFindings = function countFindings(all: Categories): number {
    return FINDING_CATEGORIES.reduce((sum, key) => sum + (all[key]?.length ?? 0), 0);
};

export const sumCategories = function sumCategories(perDoc: readonly PerDocEntry[]): Record<string, number> {
    return Object.fromEntries(
        FINDING_CATEGORIES.map((key) => [key, perDoc.reduce((sum, entry) => sum + (entry.all[key]?.length ?? 0), 0)]),
    );
};
```
