# Risk Model
## Contexto
### Estructura general de la regla
Aqui se define la estructura general de la regla a implementar, es importante tener en cuenta:
* Behaviors:

### Definicion de fuentes soportadas
Las fuentes no soportadas deberan pasar un proceso de analisis, desarrollo e integracion para porder hacerlos parte de la reglas, en el siguiente esquema se representa el flujo para determinar este caso de uso.

## Create rule
```curl
POST /api/v1/administrator
```
### Request:
```json
{
"product_id": uuid,
"product_name": string,
"enabled": bolean,
"draft": bolean,
"approved": bolean,
"rule": {
"sync": int,
"parallel": int,
"max_process": int,
"decision_strategy": string,
"steps": {
"any_service": {
"priority": int,
"enabled": int,
"is_service": int,
"dependencies": [],
"actions": {
"entry": [],
"exit": [],
"on_failure": []
},
"type": string [data|ml|datasource],
"direct_rejection": 0,
"binding": {
"natural": [],
"compose": {}
},
"equivalence_matrix": {},
"rejection_rules": {},
"decision": []
},
"compose": {
"priority": int,
"enabled": int,
"mandatory": int,
"dependencies": [],
"type": "compose",
"binding": {
"natural": [],
"compose": {},
"decision": []
},
"equivalence_matrix": {}
}
},
"decision": {
"decision_strategy": {
"sub_scores": {},
"score": {
"decision": {
"pre-calculate": {},
"score": ""
}
}
}
}
}
}
```
### Response
```csvpreview {header="true"}
Code,EndPoint
201,Created
400, Bad Request
401, Unauthorized
500,Internal error
```
```json
{
"created_at": date,
"uuid": uuid,
"rule": {}
}
```
## Update Rule
### Request
```curl
PUT /api/v1/administrator/[UUID]
```
##### Body
```json
{
"product_id": uuid,
"product_name": string,
"enabled": bolean,
"draft": bolean,
"approved": bolean,
"rule": {
"sync": int,
"parallel": int,
"max_process": int,
"decision_strategy": string,
"steps": {
"any_service": {
"priority": int,
"enabled": int,
"is_service": int,
"dependencies": [],
"actions": {
"entry": [],
"exit": [],
"on_failure": []
},
"type": string [data|ml|datasource],
"direct_rejection": 0,
"binding": {
"natural": [],
"compose": {}
},
"equivalence_matrix": {},
"rejection_rules": {},
"decision": []
},
"compose": {
"priority": int,
"enabled": int,
"mandatory": int,
"dependencies": [],
"type": "compose",
"binding": {
"natural": [],
"compose": {},
"decision": []
},
"equivalence_matrix": {}
}
},
"decision": {
"decision_strategy": {
"sub_scores": {},
"score": {
"decision": {
"pre-calculate": {},
"score": ""
}
}
}
}
}
}
```
### Response
```json
{
"message": "Rule has been update",
"status_code": "200 OK"
}
```
```csvpreview {header="true"}
Code, EndPoint
200, Update
400, Bad Request
401, Unauthorized
404, Rule not Exist
500, Internal error
```
## Get Rule
```curl
GET /api/v1/administrator?product_name=[NAME]&uuid=[UUID]
```
### Request
```json
```
### Response
```json
{
"product_id": uuid,
"product_name": string,
"enabled": bolean,
"draft": bolean,
"approved": bolean,
"rule": {
"sync": int,
"parallel": int,
"max_process": int,
"decision_strategy": string,
"steps": {
"any_service": {
"priority": int,
"enabled": int,
"is_service": int,
"dependencies": [],
"actions": {
"entry": [],
"exit": [],
"on_failure": []
},
"type": string [data|ml|datasource],
"direct_rejection": 0,
"binding": {
"natural": [],
"compose": {}
},
"equivalence_matrix": {},
"rejection_rules": {},
"decision": []
},
"compose": {
"priority": int,
"enabled": int,
"mandatory": int,
"dependencies": [],
"type": "compose",
"binding": {
"natural": [],
"compose": {},
"decision": []
},
"equivalence_matrix": {}
}
},
"decision": {
"decision_strategy": {
"sub_scores": {},
"score": {
"decision": {
"pre-calculate": {},
"score": ""
}
}
}
}
}
}
```
## Get Score
```curl
POST /api/v1/consumer
```
### Request
```json
{
"product": uuid,
"document_user": string
}
```
### Response
```json
{
"created_at": date,
"rule": uuid,
"product_name": string,
"process": uuid,
"data": {
"any_source": {}
},
"equivalences": {
"any_source": {}
},
"result": {
"sub_score": {
"decision": {
"calculate": [
{
"score": int,
"item": string,
"sentence": string,
"render": string
}
],
"score": int
}
},
"score": {
"decision": {
"calculate": [
{
"score": int,
"item": string,
"sentence": string,
"render": string
}
],
"score": int
}
}
}
}
```
```csvpreview {header="true"}
Code, EndPoint
200, Update
400, Bad Request
401, Unauthorized
404, Rule not Exist
500, Internal error
```