---
# System prepended metadata

title: tbdiligence Modules

---

# tbdiligence Architecture

## Impulse Modules

#### API
- HTTP server
- Request validation and client authentication
- Implements high level of tbdiligence features by calling other modules

#### SanctionScreener
- Manages screening of submissions
- Reads and writes via SubmissionPersistence

#### SubmissionPersistence
- Persist all data about submissions
- Handles encryption/tokenisation
- The only module that talks to DB

#### CastellumClient
- Wrapper around Castellum's API
- Uses OAuth token stored in Secrets Manager

#### VCIssuer
- Produces signed VCs from a Submission
- Talks to AWS KMS to sign and verify with Issuer keys

#### ReScreenJob
- Periodic task
- Searches for Submissions that need re-screening
- Submits them to SanctionScreener

### Castellum Refresh Lambda
- Periodically fetches an OAuth token from Castellum, stores in Secrets Manager
- Not an Impulse module
- Lambda is invoked on schedule by AWS

## Lines and Boxes
![](https://hackmd.io/_uploads/Bkjh3PHTn.png)


## Flow

### Submission
```mermaid
sequenceDiagram
	actor D as DIDPay
	participant A as API
	participant SS as SanctionsScreener
	participant SP as SubmissionPersistence
	participant C as CastellumClient
	participant VC as VCIssuer
	D->>+A: POST /submissions
	A->>SP: Create Submission
	A-->>+SS: Screen Submission :id (async)
	A->>-D: 202 Accepted
	SS->>+SP: Read Submission :id
	SP->>-SS: Alice
	SS->>+C: Screen Entity
	C->>-SS: Result
	SS->>-SP: Update Submission
	D->>+A: GET /submissions/:id
	A->>+SP: Read Submission
	SP->>-A: Alice
	A->>+VC: Generate VC
	VC->>-A: VC
	A->>-D: 200 Submission
```

### Re-Screening

```mermaid
sequenceDiagram
	participant R as ReScreenJob
	participant SP as SubmissionPersistence
	participant SS as SanctionsScreener
	participant C as CastellumClient
	loop Every N minutes
		R->>+SP: Fetch Submissions
		SP->>-R: Submission IDs
		loop Each Submission
			R->>+SS: Screen Submission :id
			SS->>+SP: Read Submission :id
			SP->>-SS: Alice
			SS->>+C: Screen Entity
			C->>-SS: Result
			SS->>-SP: Update Submission
		end
	end
```

Note: The Screen Submission unit in SubmissionScreener is used by the initial screen and re-screen

