# sdkJobId

**Kind:** Function

**Source:** [`atloria-monorepo/libs/parser-core/src/openapi/sdk-packaging.ts`](https://github.com/sherkety/atloria/blob/main/atloria-monorepo/libs/parser-core/src/openapi/sdk-packaging.ts#L84)

Deterministic jobId. BullMQ REJECTS custom ids containing ':' ("Custom Id
cannot contain :") — '-' separators only. Deterministic so a burst of spec
upserts collapses to one pending job per (project, language, hash); the
producer must therefore set removeOnComplete AND removeOnFail to `true`
(a retained job with the same id silently swallows later add()s).

## Signature

```ts
function sdkJobId(projectId: string, language: string, specHash: string): string
```

## Parameters

| Name | Type |
|---|---|
| `projectId` | `string` |
| `language` | `string` |
| `specHash` | `string` |

**Returns:** `string`
