# GIPSS (primary myelofibrosis)

GIPSS

Status: LIVE
Price: $0.005 USDC
`GET /api/calc/gipss`
HTML: https://magentlab.com/docs/gipss
Markdown: https://magentlab.com/docs/gipss.md

Not a medical device. Not a diagnosis, dose, or listing recommendation.

## What it computes

Sum the Tefferi 2018 GIPSS (genetically inspired prognostic scoring system) for primary myelofibrosis and return low (0), intermediate_1 (1), intermediate_2 (2), or high (≥3).

## When to use

When an agent needs the published GIPSS point total and risk group and must not invent a PMF diagnosis or transplant listing, and must not substitute DIPSS, DIPSS Plus, or MIPSS70-plus.

## When not to use

- Not a medical device and not a PMF diagnosis or transplant listing. magent does not examine the patient.
- This is Tefferi 2018 GIPSS only, not DIPSS, not DIPSS Plus, not MIPSS70, and not MIPSS70-plus.
- magent does not karyotype. karyotype is the caller-assigned three-tier class (favorable, unfavorable, vhr) from Tefferi 2018 revised cytogenetics.
- magent does not sequence. calr_type1_like, asxl1_mutated, srsf2_mutated, and u2af1_q157_mutated are caller-assigned flags. U2AF1 scores only Q157, not S34.
- Published median and 5-year survivals are Tefferi 2018 cohort figures for the four GIPSS bands, not a patient-specific prediction.

## Formula

```
GIPSS = karyotype (favorable 0, unfavorable 1, vhr 2) + absence of type 1/like CALR 1 + asxl1_mutated 1 + srsf2_mutated 1 + u2af1_q157_mutated 1; Tefferi 2018; max 6; low 0, intermediate_1 1, intermediate_2 2, high ≥3
```

## Citation

[GIPSS: genetically inspired prognostic scoring system for primary myelofibrosis](https://doi.org/10.1038/s41375-018-0107-z)
Tefferi A, Guglielmelli P, Nicolosi M, Mannelli F, Mudireddy M, Bartalucci N, Finke CM, Lasho TL, Hanson CA, Ketterling RP, Begna KH, Gangat N, Pardanani A, Vannucchi AM
Leukemia. 2018;32(7):1631-1642
DOI: [10.1038/s41375-018-0107-z](https://doi.org/10.1038/s41375-018-0107-z)

## Worked example

### Favorable karyotype, type 1/like CALR, no high-risk mutations

Given: `asxl1_mutated=false, calr_type1_like=true, karyotype=favorable, srsf2_mutated=false, u2af1_q157_mutated=false`

1. karyotype favorable → 0; calr_type1_like true → 0; asxl1_mutated false → 0; srsf2_mutated false → 0; u2af1_q157_mutated false → 0
2. Score = 0 (max 6); risk_group = low


### VHR karyotype, no type 1/like CALR, ASXL1 and SRSF2

Given: `asxl1_mutated=true, calr_type1_like=false, karyotype=vhr, srsf2_mutated=true, u2af1_q157_mutated=false`

1. karyotype vhr → 2; absence of type 1/like CALR → 1; asxl1_mutated → 1; srsf2_mutated → 1; u2af1_q157_mutated false → 0
2. Score = 5 (max 6); risk_group = high (≥3)


## Also searched as

- GIPSS
- genetically inspired prognostic scoring system
- Tefferi GIPSS
- GIPSS myelofibrosis
- primary myelofibrosis GIPSS
- PMF GIPSS
- Tefferi 2018 GIPSS
- genetically inspired PMF score

## Parameters

- `karyotype` (string, required): Tefferi 2018 revised three-tier karyotype as assigned by the caller (mutually exclusive). favorable is a normal karyotype or sole 13q−, +9, 20q−, chromosome 1 translocation/duplication, or sex chromosome abnormality including −Y and scores 0. unfavorable is all other abnormalities and scores 1. vhr is very high risk: single/multiple −7, i(17q), inv(3)/3q21, 12p−/12p11.2, 11q−/11q23, +21, or other autosomal trisomies not including +8/+9 and scores 2. magent does not karyotype.
- `calr_type1_like` (boolean, required): Presence of a type 1/like CALR mutation as assigned by the caller (Tefferi 2018). false (absence) scores 1. true scores 0. Type 2/like CALR, JAK2, MPL, and triple-negative are absence of type 1/like CALR. magent does not sequence.
- `asxl1_mutated` (boolean, required): ASXL1 mutation as assigned by the caller (Tefferi 2018). true scores 1. magent does not sequence.
- `srsf2_mutated` (boolean, required): SRSF2 mutation as assigned by the caller (Tefferi 2018). true scores 1. magent does not sequence.
- `u2af1_q157_mutated` (boolean, required): U2AF1 Q157 mutation (Q157P or Q157R) as assigned by the caller (Tefferi 2018). true scores 1. U2AF1 S34 does not score. magent does not sequence.

## Bulk (POST)

POST the same path with a JSON items array. The first item is the GET unit; each additional item is $0.002. Invalid items return HTTP 400 before settlement.

Method: `POST /api/calc/gipss`
Max items: 25
Price: unit_amount + extra_item_amount * (n - 1) (unit 5000 atomic, extra 2000 atomic)
Status: PREVIEW

- 1 to 25 items. Each item uses the same keys as the GET query parameters.
- POST of 1 item costs the same as GET. Lists longer than 25: chunk into multiple POSTs. Extra items still execute; do not pad dummy rows.
- The first invalid item fails the whole request (index in the 400 JSON). You are not charged.
- HTTP 200 is {count, path, items}. Each items[i] is the GET 200 body for that row.
- Catalog misses (empty matches, found=false) stay paid 200s inside that slot.
- x402 resource URL is this path plus n and body_sha256. Browsers that prefer text/html get the same paywall as GET; Pay retries POST with the same items.

Example request:

```json
{
  "items": [
    {
      "asxl1_mutated": "false",
      "calr_type1_like": "true",
      "karyotype": "favorable",
      "srsf2_mutated": "false",
      "u2af1_q157_mutated": "false"
    },
    {
      "asxl1_mutated": "false",
      "calr_type1_like": "true",
      "karyotype": "favorable",
      "srsf2_mutated": "false",
      "u2af1_q157_mutated": "false"
    }
  ]
}
```

Human paywall (two-item fixture): https://api.magentlab.com/paywall/bulk/gipss

Example 200:

```json
{
  "count": 2,
  "path": "/api/calc/gipss",
  "items": [
    {
      "components": [
        {
          "value": "favorable",
          "factor": "karyotype",
          "points": 0,
          "present": false
        },
        {
          "factor": "absence_of_calr_type1_like",
          "points": 0,
          "present": false
        },
        {
          "factor": "asxl1_mutated",
          "points": 0,
          "present": false
        },
        {
          "factor": "srsf2_mutated",
          "points": 0,
          "present": false
        },
        {
          "factor": "u2af1_q157_mutated",
          "points": 0,
          "present": false
        }
      ],
      "disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
      "citation": {
        "authors": "Tefferi A, Guglielmelli P, Nicolosi M, Mannelli F, Mudireddy M, Bartalucci N, Finke CM, Lasho TL, Hanson CA, Ketterling RP, Begna KH, Gangat N, Pardanani A, Vannucchi AM",
        "doi": "10.1038/s41375-018-0107-z",
        "id": "tefferi-2018",
        "pmid": "29654267",
        "source": "Leukemia. 2018;32(7):1631-1642",
        "title": "GIPSS: genetically inspired prognostic scoring system for primary myelofibrosis"
      },
      "formula": "gipss",
      "formula_expression": "GIPSS = karyotype (favorable 0, unfavorable 1, vhr 2) + absence of type 1/like CALR 1 + asxl1_mutated 1 + srsf2_mutated 1 + u2af1_q157_mutated 1; Tefferi 2018; max 6; low 0, intermediate_1 1, intermediate_2 2, high ≥3",
      "max_score": 6,
      "score": 0,
      "risk_group": "low",
      "asxl1_mutated": false,
      "calr_type1_like": true,
      "five_year_survival_percent": 94,
      "karyotype": "favorable",
      "median_survival_years": 26.4,
      "srsf2_mutated": false,
      "u2af1_q157_mutated": false
    },
    {
      "components": [
        {
          "value": "favorable",
          "factor": "karyotype",
          "points": 0,
          "present": false
        },
        {
          "factor": "absence_of_calr_type1_like",
          "points": 0,
          "present": false
        },
        {
          "factor": "asxl1_mutated",
          "points": 0,
          "present": false
        },
        {
          "factor": "srsf2_mutated",
          "points": 0,
          "present": false
        },
        {
          "factor": "u2af1_q157_mutated",
          "points": 0,
          "present": false
        }
      ],
      "disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
      "citation": {
        "authors": "Tefferi A, Guglielmelli P, Nicolosi M, Mannelli F, Mudireddy M, Bartalucci N, Finke CM, Lasho TL, Hanson CA, Ketterling RP, Begna KH, Gangat N, Pardanani A, Vannucchi AM",
        "doi": "10.1038/s41375-018-0107-z",
        "id": "tefferi-2018",
        "pmid": "29654267",
        "source": "Leukemia. 2018;32(7):1631-1642",
        "title": "GIPSS: genetically inspired prognostic scoring system for primary myelofibrosis"
      },
      "formula": "gipss",
      "formula_expression": "GIPSS = karyotype (favorable 0, unfavorable 1, vhr 2) + absence of type 1/like CALR 1 + asxl1_mutated 1 + srsf2_mutated 1 + u2af1_q157_mutated 1; Tefferi 2018; max 6; low 0, intermediate_1 1, intermediate_2 2, high ≥3",
      "max_score": 6,
      "score": 0,
      "risk_group": "low",
      "asxl1_mutated": false,
      "calr_type1_like": true,
      "five_year_survival_percent": 94,
      "karyotype": "favorable",
      "median_survival_years": 26.4,
      "srsf2_mutated": false,
      "u2af1_q157_mutated": false
    }
  ]
}
```

## Response fields

- `formula` (string): gipss
- `formula_expression` (string): Exact expression used
- `score` (integer): GIPSS points 0-6
- `max_score` (integer): Always 6 (2+1+1+1+1)
- `risk_group` (string): low when score is 0, intermediate_1 when 1, intermediate_2 when 2, high when ≥3 (Tefferi 2018). Not a PMF diagnosis. Not DIPSS. Not MIPSS70-plus.
- `karyotype` (string): Caller-assigned three-tier karyotype used (favorable, unfavorable, or vhr)
- `calr_type1_like` (boolean): Caller-assigned type 1/like CALR flag used
- `asxl1_mutated` (boolean): Caller-assigned ASXL1 mutation flag used
- `srsf2_mutated` (boolean): Caller-assigned SRSF2 mutation flag used
- `u2af1_q157_mutated` (boolean): Caller-assigned U2AF1 Q157 mutation flag used (not S34)
- `median_survival_years` (number): Tefferi 2018 published median overall survival in years for this GIPSS band (low 26.4, intermediate_1 8.0, intermediate_2 4.2, high 2). Cohort figure, not a patient-specific prediction.
- `five_year_survival_percent` (integer): Tefferi 2018 published 5-year survival percent for this GIPSS band (low 94, intermediate_1 73, intermediate_2 40, high 14). Cohort figure, not a patient-specific prediction.
- `components` (array): Per-factor points
- `citation` (object): Tefferi et al. Leukemia 2018 GIPSS citation
- `disclaimer` (string): Not-a-device notice

## Example JSON

Frozen fixture. Not a live lookup.

```json
{
  "components": [
    {
      "value": "favorable",
      "factor": "karyotype",
      "points": 0,
      "present": false
    },
    {
      "factor": "absence_of_calr_type1_like",
      "points": 0,
      "present": false
    },
    {
      "factor": "asxl1_mutated",
      "points": 0,
      "present": false
    },
    {
      "factor": "srsf2_mutated",
      "points": 0,
      "present": false
    },
    {
      "factor": "u2af1_q157_mutated",
      "points": 0,
      "present": false
    }
  ],
  "disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
  "citation": {
    "authors": "Tefferi A, Guglielmelli P, Nicolosi M, Mannelli F, Mudireddy M, Bartalucci N, Finke CM, Lasho TL, Hanson CA, Ketterling RP, Begna KH, Gangat N, Pardanani A, Vannucchi AM",
    "doi": "10.1038/s41375-018-0107-z",
    "id": "tefferi-2018",
    "pmid": "29654267",
    "source": "Leukemia. 2018;32(7):1631-1642",
    "title": "GIPSS: genetically inspired prognostic scoring system for primary myelofibrosis"
  },
  "formula": "gipss",
  "formula_expression": "GIPSS = karyotype (favorable 0, unfavorable 1, vhr 2) + absence of type 1/like CALR 1 + asxl1_mutated 1 + srsf2_mutated 1 + u2af1_q157_mutated 1; Tefferi 2018; max 6; low 0, intermediate_1 1, intermediate_2 2, high ≥3",
  "max_score": 6,
  "score": 0,
  "risk_group": "low",
  "asxl1_mutated": false,
  "calr_type1_like": true,
  "five_year_survival_percent": 94,
  "karyotype": "favorable",
  "median_survival_years": 26.4,
  "srsf2_mutated": false,
  "u2af1_q157_mutated": false
}
```

## Errors

- HTTP 400 `invalid_gipss_karyotype`: karyotype must be favorable, unfavorable, or vhr (Tefferi 2018 GIPSS revised cytogenetic tiers). Returned before settlement; you are not charged.
- HTTP 400 `invalid_flag`: boolean clinical flags must be true or false Returned before settlement; you are not charged.
- HTTP 400 `invalid_items`: POST body must be a JSON object with only an items array Returned before settlement; you are not charged.
- HTTP 400 `invalid_item_count`: items must be an array of 1 to 25 objects Returned before settlement; you are not charged.
- HTTP 400 `invalid_item`: each items entry must be a JSON object Returned before settlement; you are not charged.

Shared HTTP 402 and 503: https://magentlab.com/docs/payments

## Related tools

- [DIPSS](https://magentlab.com/docs/dipss) — Sum the Passamonti 2010 DIPSS (dynamic international prognostic scoring system) for primary myelofibrosis and return low (0), intermediate_1 (1–2), intermediate_2 (3–4), or high (5–6).

## Payment

Unpaid requests return HTTP 402 even if query parameters or POST items are missing or invalid, so CDP and agents can index the path. After a PAYMENT-SIGNATURE, invalid params return HTTP 400 JSON before settlement. magent does not charge. Fix the params, then request a new 402 quote for that complete URL. Catalog misses (empty matches, found=false) are valid paid 200s.

- GET the tool with Accept: application/json (do not send Accept: text/html unless you want the human paywall).
- HTTP 402 means you have not paid. Decode the base64 PAYMENT-REQUIRED header. HTTP 503 is not a new quote.
- Sign accepts[0] (exact, EIP-3009) with validBefore = now + maxTimeoutSeconds (600 seconds), or accepts[1] (batch-settlement deposit/voucher) on product GET. Ping and POST {items} stay exact. Magent retries transient facilitator 429/5xx before answering.
- Retry the same URL with PAYMENT-SIGNATURE (base64 JSON of accepted and payload). Magent attaches canonical extensions.bazaar on CDP verify/settle; echoing 402 bazaar is optional.
- Success is HTTP 200 JSON plus PAYMENT-RESPONSE. exact settles before the tool. batch-settlement verifies (and deposit-settles) before the tool and commits the charge after HTTP 2xx. HTTP 503: retry the same PAYMENT-SIGNATURE. Mint a new exact nonce only after a new HTTP 402.

- offered `exact` on eip155:8453: Fixed-price USDC on Base. The buyer authorizes the advertised amount (EIP-3009). magent settles before the tool runs (paymentFlow upfront). extra.assetTransferMethod=eip3009 extra.paymentFlow=upfront.
- offered `batch-settlement` on eip155:8453: Payment-channel vouchers claimed later in batches. Exact stays accepts[0]. Same-path POST {items} is still exact. extra.assetTransferMethod=eip3009 extra.paymentFlow=authorization.

- not offered `upto`: Not offered. Usage-based: buyer authorizes a ceiling, seller settles the actual amount after work. Reserved for a future metered tool. Not for current calculators or code search.

Same-path POST {items} is still scheme exact: one EIP-3009 authorization for GET unit plus $0.002 per extra item. That is not x402 batch-settlement (payment channels / vouchers).

Shared HTTP 402 and 503 table: https://magentlab.com/docs/payments

Stdio MCP (one process per host): https://magentlab.com/docs/mcp

## Guarantees

- HTTP 402 is unpaid, including a missing query. After PAYMENT-SIGNATURE, invalid parameters return HTTP 400 before settlement. You are not charged. HTTP 402 never includes the tool JSON.
- exact: settlement finishes before the tool (paymentFlow upfront). batch-settlement: verify/deposit before the tool; chargedCumulativeAmount commits after HTTP 2xx. Uncertain or failed settlement fails closed (HTTP 503). Retry the same PAYMENT-SIGNATURE.
- HTTP 402 is unpaid only. Do not sign a second authorization because of a 503.
- Execution is timeout-bounded and concurrency-capped.
- Calculator inputs are stored encrypted for allowlisted operators (Magent Console). They are not in public logs, SSH lookups, catalog, or rollups. Request logs store path without query.
