---
title: "ManagedExactDecimal · types"
url: https://developers.dagio.ai/reference/types-managed-exact-decimal/
---

# ManagedExactDecimal · types

   
                                    
                                                                              
                                             
                  
           
          
   

The following types define named objects and their relationships. Tables include inherited properties. Schema-derived types refer to their validated structures; a TypeScript declaration does not replace the compiler’s semantic checks.

## ManagedExactDecimalFormat

Explicit base-ten precision and scale; this is not the historical approximate number Field.

| Field | Options / expected values | Description |
| --- | --- | --- |
| `precision` | `number` | **Required.** Defines precision for this object. Observe the type, variants and bounds in the Options column. |
| `scale` | `number` | **Required.** Defines scale for this object. Observe the type, variants and bounds in the Options column. |

```typescript
export interface ManagedExactDecimalFormat {
  readonly precision: number;
  readonly scale: number;
}
```

## ManagedExactDecimalRounding

Rounding is an explicit calculation point, never an implicit value-admission coercion.

```typescript
export type ManagedExactDecimalRounding =
  | 'half-even'
  | 'half-up'
  | 'toward-zero'
  | 'away-from-zero'
  | 'floor'
  | 'ceiling';
```

```typescript
type ManagedExactDecimalRounding = "half-even" | "half-up" | "toward-zero" | "away-from-zero" | "floor" | "ceiling";
```

## ManagedExactDecimalOperand

Each operand retains its declared format instead of borrowing an approximate number type.

| Field | Options / expected values | Description |
| --- | --- | --- |
| `format` | `ManagedExactDecimalFormat` | **Required.** Presentation format compatible with the value type. |
| `value` | `string` | **Required.** Effective value interpreted according to the enclosing type and discriminant. |

```typescript
export interface ManagedExactDecimalOperand {
  readonly format: ManagedExactDecimalFormat;
  readonly value: string;
}
```

## ManagedExactDecimalOutput

A null rounding point requires an exactly representable result at the declared output scale.

| Field | Options / expected values | Description |
| --- | --- | --- |
| `format` | `ManagedExactDecimalFormat` | **Required.** Presentation format compatible with the value type. |
| `rounding` | `ManagedExactDecimalRounding \| null` | **Required.** Defines rounding for this object. Observe the type, variants and bounds in the Options column. |

```typescript
export interface ManagedExactDecimalOutput {
  readonly format: ManagedExactDecimalFormat;
  readonly rounding: ManagedExactDecimalRounding | null;
}
```

## ManagedNumericFieldValueDefinition

Value admission uses only the immutable numerical declaration, independent of any schema library.

| Field | Options / expected values | Description |
| --- | --- | --- |
| `repeatable` | `boolean` | **Required.** Whether multiple values or instances are admitted. |
| `minimum` | `string \| undefined` | Optional. Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `maximum` | `string \| undefined` | Optional. Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `precision` | `number` | **Required.** Defines precision for this object. Observe the type, variants and bounds in the Options column. |
| `scale` | `number` | **Required.** Defines scale for this object. Observe the type, variants and bounds in the Options column. |

```typescript
export interface ManagedNumericFieldValueDefinition extends ManagedExactDecimalFormat {
  readonly repeatable: boolean;
  readonly minimum?: string | undefined;
  readonly maximum?: string | undefined;
}
```

## ManagedNumericFieldDeclaration

Declaration validation shares the value engine without requiring any schema library at runtime.

| Field | Options / expected values | Description |
| --- | --- | --- |
| `default` | `string \| readonly string[] \| undefined` | Optional. Initial value matching the declared type; does not replace an existing saved value. |
| `repeatable` | `boolean` | **Required.** Whether multiple values or instances are admitted. |
| `minimum` | `string \| undefined` | Optional. Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `maximum` | `string \| undefined` | Optional. Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `precision` | `number` | **Required.** Defines precision for this object. Observe the type, variants and bounds in the Options column. |
| `scale` | `number` | **Required.** Defines scale for this object. Observe the type, variants and bounds in the Options column. |

```typescript
export interface ManagedNumericFieldDeclaration extends ManagedNumericFieldValueDefinition {
  readonly default?: string | readonly string[] | undefined;
}
```

[All references](https://developers.dagio.ai/reference/)

<!-- surface-examples:start -->

## Applied examples : Required text and business choices

Company uses required text input; Status uses a declared list of choices.

### Configuration

Fragment placed in `forms[].fields[]`. [Properties and accepted values](https://developers.dagio.ai/reference/workspace-model-foundation/).

```json
{
  "contract": "WorkspaceFormControl@2",
  "repeatable": false,
  "key": "company",
  "label": "Company",
  "input": "text",
  "binding": {
    "kind": "field",
    "fieldKey": "company"
  },
  "required": true,
  "ruleKeys": [],
  "options": []
}
```

### Variation and connection

Fragment placed in `forms[].fields[]`. [Properties and accepted values](https://developers.dagio.ai/reference/workspace-model-foundation/).

```json
{
  "contract": "WorkspaceFormControl@2",
  "repeatable": false,
  "key": "status",
  "label": "Status",
  "input": "choice",
  "binding": {
    "kind": "field",
    "fieldKey": "status"
  },
  "required": true,
  "ruleKeys": [],
  "options": [
    "prospect",
    "active"
  ]
}
```

### UI layout example

The illustrative layout below places this configuration in the Clients/Quotes app. Insert each fragment at the stated location, with Field, Query and Action references matching the Model declarations.

1. Client identity
2. Notes and follow-up
3. Settings
4. Linked quotes

<!-- surface-examples:end -->
