# EnhancedDataQualificationDto

A model the API reference uses in a request or a response. The operation pages link every field typed as this model here.

The gateway's own assessment of how well this transaction's enhanced data met the commercial-card
requirements, recorded when the transaction settled: the addendum level the processor handler
attempted, the level it actually emitted, and stable codes describing anything that is likely to
cost the transaction an enhanced interchange rate.

## Fields
- `isPreview` (boolean): `true` when this node is a preview computed at request time rather than the  record of a settlement. Absent (or `false`) on every stored result. (nullable)
- `attemptedLevel` ([CedpQualificationLevel](https://devportal.demo.winkpg.io/docs/api/models/CedpQualificationLevel.md)): The addendum level the settlement set out to build from the data supplied on the transaction. (nullable)
  Values:
  - `None`: No enhanced-data addendum was attempted; the row settles at Level 1.
  - `Level2`: A Level 2 addendum was attempted (tax, tax-exempt flag, purchase order).
  - `Level3`: A Level 3 addendum was attempted (Level 2 header plus itemized line detail).
- `emittedLevel` ([CedpQualificationLevel](https://devportal.demo.winkpg.io/docs/api/models/CedpQualificationLevel.md)): The addendum level that actually went to the processor. Equal to `attemptedLevel`  unless the addendum was withheld, in which case `gateReason` says why. (nullable)
  Values:
  - `None`: No enhanced-data addendum was attempted; the row settles at Level 1.
  - `Level2`: A Level 2 addendum was attempted (tax, tax-exempt flag, purchase order).
  - `Level3`: A Level 3 addendum was attempted (Level 2 header plus itemized line detail).
- `gateReason` (string): A stable code for the emission decision, or `null` when the addendum was sent  as attempted. Never free text. (nullable)
- `findings` (array<[EnhancedDataQualificationFindingDto](https://devportal.demo.winkpg.io/docs/api/models/EnhancedDataQualificationFindingDto.md)>): Every finding, in evaluation order: line-level findings first, ordered by line index. (nullable)
  Fields of each item:
  - `code` ([CedpFindingCode](https://devportal.demo.winkpg.io/docs/api/models/CedpFindingCode.md)): The reason this line, or the transaction as a whole, is unlikely to qualify. (nullable)
    Values:
    - `QuantityNotPositive`: A line item's quantity is null, zero, or negative. Enhanced rates need a positive quantity.
    - `UnitPriceNotPositive`: A line item's unit price is null, zero, or negative. Enhanced rates need a positive unit cost.
    - `LineTotalMismatch`: A line item's total does not reconcile with quantity, unit price, discount, and line tax within a penny.
    - `BlankOrPlaceholderDescription`: A line item's description is null, blank, or all zeros.
    - `BlankOrPlaceholderProductCode`: A line item's product code is null, blank, or all zeros.
    - `BlankOrPlaceholderCommodityCode`: A line item's commodity code is null, blank, or all zeros.
    - `BlankOrPlaceholderUnitOfMeasure`: A line item's unit of measure is null, blank, or all zeros.
    - `TaxRatioOutOfBounds`: Tax is present but falls outside the card brand's accepted share of the settled total: at least 0.1%, and at most 22% for Visa or 30% for Mastercard.
    - `ZeroTaxWithoutExemptFlag`: Tax is zero or absent and the transaction is not flagged tax exempt. Informational: a genuinely untaxed sale is legitimate, but it will not earn an enhanced rate without the exempt flag.
    - `MissingCustomerCode`: No customer reference of any kind was supplied: purchase order, order number, and invoice number are all blank or placeholder.
    - `NoLineItems`: Level 3 header data was supplied with no line items, so the row settles on the Level 2 path and cannot reach a Level 3 rate.
    - `Level3WithheldIncomplete`: The merchant supplied Level 3 data, but the addendum was deliberately withheld because the values that would have gone on the wire were incomplete. The processor sends no fabricated filler in their place, so the row settles at the fallback level for its card brand instead.
    - `UnitOfMeasureNotRecognized`: A line item's unit of measure is present but is not a recognized unit-of-measure code: each or units where the programs expect EA. Compared case-insensitively after trimming, so ea is recognized.
    - `QuantityTruncatedToWholeNumber`: A line item's quantity was submitted with a fractional part, and the addendum carries only the whole-number part of it.
    - `DescriptionMatchesMerchantName`: A line item's description is the merchant's own name. Acquirer guidance treats a line that names the seller instead of what was sold as a placeholder, the same as a blank.
    - `GenericDescription`: A line item's description is a single generic word that says nothing about the item, such as Service, Product, Item or Misc. The list of generic words is deliberately short.
    - `SingleCharacterValue`: A line item's description or product code is a single character once trimmed. One character cannot describe or identify anything, and acquirer guidance reads it as filler typed to get past a required field.
    - `PipeCharacterPresent`: A pipe character (|) is present in a line item's description, product code, commodity code or unit of measure, or in the purchase order, order number or invoice number. A pipe is a field delimiter in the formats enhanced data is exchanged in, and its presence usually means several values were concatenated into one field.
  - `lineIndex` (integer(int32)): The zero-based index of the line item that raised the finding, or `null` when  the finding is about the transaction as a whole rather than one line. (nullable)
- `findingCount` (integer(int32)): The number of findings, counting a code once per line that raised it. Zero on a transaction  that was evaluated and came back clean. (nullable)
- `processor` (string): The processor whose settlement produced this result, as its gateway processor key. Findings  are not comparable across processors that build different addenda. (nullable)
- `evaluatorVersion` (integer(int32)): The evaluator rule-set revision that produced this result. It is bumped whenever a rule is  added, removed or changed, so a qualification rate trended across releases can tell a data  improvement from a rule change. Absent on a result recorded before the revision was stamped. (nullable)
- `evaluatedAt` (string(date-time)): When the evaluation ran, in UTC. (nullable)

## See also

- [All documentation](https://devportal.demo.winkpg.io/llms.txt): the machine-readable index of every public page on this site.
