Skip to content

The checkout barcode is about to carry the batch number and the expiry date.

Retail is moving to 2D barcodes, and by the end of 2027 checkout systems should be able to scan them. The one thing the till needs is the same product number the striped barcode carried. The prize is what else fits in the same scan: the batch, the expiry, and a serial. That is not a checkout upgrade, it is an item master upgrade, and the teams that capture those attributes turn a scan into cleaner valuation, faster recalls, and returns they can trust.

A checkout deadline that is really a data invitation.

For decades a product carried one striped barcode that did one job: it returned a product number so the till could look up a price. That number is the Global Trade Item Number, the GTIN, and it has been the quiet backbone of retail and of every item master behind it. Industry is now moving to a two dimensional barcode, a QR Code carrying a GS1 Digital Link or a GS1 DataMatrix, and it has set a date for the change. GS1 calls the effort Sunrise 2027, and the plan is to help ensure that 2D barcodes can be scanned and processed at any retail point of sale by the end of 2027.

The requirement to make checkout keep working is deliberately modest. GS1 is explicit that, at a minimum, price lookup systems must use the GTIN encoded in the 2D barcode the same way they use it in a 1D barcode, and that processing the GTIN is the only requirement for the Sunrise 2027 transition. If all you do is read the same product number from a new symbol, the register still rings up the sale. That is the floor, and it is worth being clear that clearing the floor is not the point of the exercise.

The point is what else the same scan can carry. A 2D barcode has room for more than an identity, and the GS1 system already defines the extra elements: a batch or lot number, an expiration date in a fixed date form, a serial number for a uniquely identifiable unit. GS1 itself frames the benefits as improved inventory management, enhanced recall readiness, greater sustainability and ethical sourcing, and better product authentication. Every one of those benefits is a finance and operations outcome, and every one of them depends on data landing in a record, not on a prettier code on the pack.

Read as a systems problem, this is an opportunity dressed as a checkout mandate. The same attributes that let a store scan a richer code are the attributes that decide what your inventory is worth, how far a recall reaches, and whether a return is genuine. They belong in the item master and on the stock line, captured at the scan rather than keyed later or left off entirely. Build that once and a near expiry write down or a recall becomes a query against clean data. The rest of this piece walks through what Sunrise 2027 actually asks, what the extra data unlocks, and the record worth building.

What the scan can carry, and where each piece belongs.

The change is small to state and large in effect. The table below sets out what a 2D barcode can carry, the GS1 Application Identifier that defines each element, what the transition asks of your systems, and what each piece should produce in the data a finance team owns. The Application Identifier is the prefix that tells a scanner and a host what the following characters mean and how they are formatted, so the mapping from pack to record is a standard rather than a guess.

What a 2D barcode carries, the GS1 Application Identifier behind each element, what Sunrise 2027 asks, and what each should produce in a finance team's data. Definitions are drawn from the GS1 Application Identifiers reference and the GS1 US Sunrise 2027 material.
What the scan carriesGS1 Application IdentifierWhat the transition asksWhat it produces in your data
Read the GTIN, first and alwaysGTIN via AI (01), the only Sunrise requirementA 2D barcode at checkout must return the same Global Trade Item Number the striped barcode returned, so price lookup keeps working. GS1 is explicit that processing the GTIN is the only requirement for the Sunrise 2027 transition.The GTIN held as the item master identity key, parsed the same way from a 1D or a 2D symbol, so nothing at the till or in receiving depends on which barcode a pack happens to carry.
Capture the batch or lot when it is thereBatch or lot via AI (10)The same 2D barcode can carry a batch or lot number, up to twenty characters. That lot is what ties a unit back to a production run, a supplier delivery, and a recall notice.The lot captured against the GTIN at receipt and at sale, so a stock line is not just a quantity of a product but a quantity of a specific run that can be found again.
Capture the expiration dateExpiration date via AI (17), YYMMDDA dated good can carry its expiration date in the barcode in a fixed YYMMDD form. Read at receipt, it is the input to first expiry first out picking and to a write down before the stock is dead rather than after.The expiry held as a real date on the stock line, not a note on a shelf label, so the value of near expiry inventory is computable rather than discovered at a count.
Capture the serial for serialised itemsSerial number via AI (21)For serialised goods the barcode can carry a unique serial number, up to twenty characters. A serial turns a unit into a uniquely identifiable thing for warranty, authentication, and a returned item you can check against what was sold.The serial captured where it matters, so a return, a warranty claim, or an authentication check reads a known unit rather than a guess from a model number.
Store the attributes, not just the identityTesting found systems process GTIN but drop the restGS1 testing found that retailers hit issues processing Application Identifier data such as expiration date, and that scanners and POS systems were often not set up to process and store it. Reading the GTIN is table stakes; keeping the attributes is the work.A data path from scan to record that preserves the lot, the expiry, and the serial, rather than parsing them and throwing them away because the old flow only expected a product number.
Plan for the dual-marked packDual-marking now, single-carrier from 2027During the transition a pack carries both the striped barcode and the 2D one, and from 2027 a single 2D carrier becomes an option depending on trading partner capabilities. Receiving has to handle both without breaking.Receiving and point-of-sale logic that treats the GTIN as the constant and the carrier as a detail, so a pack with one symbol or two, old or new, lands in the same clean record.
What a 2D barcode carries, the GS1 Application Identifier behind each element, what Sunrise 2027 asks, and what each should produce in a finance team's data. Definitions are drawn from the GS1 Application Identifiers reference and the GS1 US Sunrise 2027 material.

The theme worth sitting with runs down the last column: the GTIN is an identity, and the batch, expiry, and serial are the attributes that make the identity actionable. A quantity of a product tells you how much you have. A quantity of a specific lot that expires on a specific date tells you what it is worth, whether it is caught in a recall, and when it has to move. The 1D barcode could only ever deliver the first. The 2D barcode can deliver the second, if the record on the other side is ready to hold it.

That readiness is exactly where GS1 found the gap. In testing with its Barcode Capabilities Test Kit, retailers hit issues processing Application Identifier data such as expiration date, scanners and point of sale systems were often not set up to process and store it, and even systems that could read a GTIN plus attributes could not always store all of the encoded data. The lesson is blunt and useful: reading the extra data and keeping the extra data are different problems, and only the first is required for checkout. The second is the one that pays a finance team back.

The item master, read as a governed record.

A worked example makes it concrete. Take a single dated grocery product identified by a GTIN. The item master says what it is and how it behaves: it is a dated good, it is not serialised, it is costed first expiry first out, and it is written down as it nears expiry. Each delivery of that product is a distinct lot with its own expiration date, so the batch and the expiry belong on the stock line, not on the item. The GTIN keys everything, and it is parsed the same way whether the pack showed a striped barcode, a QR Code, or a DataMatrix.

Here is that logic expressed as a record. The item master carries the identity and the behaviour flags. The stock line carries the captured lot and expiry from the scan. Valuation is derived from the expiry rather than found at a count. Traceability reduces to a query by GTIN and lot. Returns read a serial where the item is serialised. And a completeness query at the end names the gaps that would make any of it untrustworthy.

An item master and inventory record shaped for a 2D barcode scan

# Item master and inventory record shaped for a 2D barcode scan
# Names, figures, and dates are placeholders for shape, not real values.

item:
  gtin: "00614141999996"          # AI (01), the identity key, from 1D or 2D
  description: "Chilled pasta sauce 400g"
  dated_good: true                 # carries an expiration date
  serialised: false                # not a unit-serialised item
  costing: FEFO                    # first expiry first out
  nrv_policy: write_down_near_expiry

stock_line:                        # one specific run of the product
  gtin: "00614141999996"
  batch_lot: "L26-0912"            # AI (10), captured at receipt
  expiration_date: 2026-12-31      # AI (17), read as YYMMDD 261231
  quantity_on_hand: 480
  received_on: 2026-09-02
  supplier_delivery: "GRN-2026-8841"
  unit_cost: 1.42
  location: "DC-EAST / A-14"

valuation:                         # derived from the captured attributes
  days_to_expiry: 90
  near_expiry_flag: false          # policy threshold, e.g. 30 days
  net_realisable_value: 1.42       # held at cost until the threshold trips
  reserve_booked: 0.00

traceability:
  run_units_by_lot: "L26-0912 -> 480 on hand, 1200 received, 720 sold"
  recall_reach: "query by gtin + batch_lot returns every affected line"

returns:
  serial_required: false           # true would read AI (21) on the unit
  in_date_check: "return valid only while expiration_date not passed"

completeness_query:                # the readiness control, run on demand
  - dated_good with no expiration_date captured
  - stock within reserve threshold of expiry with no reserve booked
  - serialised item sold or returned with no serial on record

The completeness query is what keeps it honest. Keying valuation off an expiration date held on the stock line means a near expiry write down is computed from the record rather than discovered when someone walks the aisle. Keeping the lot means a recall notice becomes a query that returns the exact affected lines instead of a decision to quarantine everything or guess. Scoping the serial to the items that need it keeps returns honest without taxing products that will never use it. None of this is elaborate. It is ordinary inventory discipline pointed at data that, for the first time, can arrive in the same scan that already had to happen.

How one 2D barcode scan carries the GTIN, batch, expiry, and serial into an item master and inventory record that drives valuation, recall reach, and returnsA flow that starts from a single 2D barcode scan on a pack. The scan carries the GTIN under Application Identifier 01, the batch or lot under 10, the expiration date under 17, and a serial number under 21. The GTIN resolves to the item master identity key, which is the only element required for the Sunrise 2027 checkout transition. The batch, expiry, and serial are captured onto the stock line as attributes. From those attributes three uses follow: the expiration date drives first expiry first out picking and near expiry write downs at lower of cost and net realisable value; the batch or lot drives recall reach, so a query by GTIN and lot returns every affected line; and the serial drives warranty, authentication, and returns against a known unit. A guard beneath states that reading the GTIN is the floor, that the data path must preserve the attributes rather than drop them, and that one completeness query lists any dated good with no expiry, any near expiry stock with no reserve, and any serialised movement with no serial.ONE SCAN INTO THE ITEM MASTER2D BARCODE SCANGTIN (01)Batch or lot (10)Expiry (17), YYMMDDSerial (21)QR with GS1 Digital Linkor GS1 DataMatrixITEM MASTER AND STOCK LINEGTIN is the identity keyThe only element checkout needsLot, expiry, serial capturedonto the stock line as attributesOne run of a product, not justa quantity of an identityEXPIRY DRIVES VALUATIONFirst expiry first out,near expiry write downLOT DRIVES RECALL REACHQuery by GTIN and lotreturns every affected lineSERIAL DRIVES RETURNSWarranty, authentication,a return against a known unitATTRIBUTE DROPPED?Read but not stored means therecord looks complete and is notTHE GUARDReading the GTIN keeps checkout working and is the floor, not the finish. The data path must keep the lot, the expiry, and the serial.Completeness is one query: any dated good with no expiry, any near expiry stock with no reserve, any serialised movement with no serial.Run it before valuation or a recall depends on the data, not after a bad number or a recall you cannot scope.
One 2D barcode scan carries the GTIN plus the batch, expiry, and serial. The GTIN resolves to the item master identity key, the only element checkout requires, and the attributes are captured onto the stock line, where the expiry drives valuation, the lot drives recall reach, and the serial drives returns. An attribute read but not stored leaves the record looking complete when it is not, so the completeness query is what keeps it honest.

An implementation checklist.

  1. 1.Confirm the GTIN survives every path into your systems. A 2D barcode at checkout must return the same Global Trade Item Number the striped barcode did, and GS1 says processing the GTIN is the only requirement for the Sunrise 2027 transition. Make sure your point-of-sale, receiving, and item lookup parse the GTIN identically from a 1D or a 2D symbol, so the identity key is stable no matter which carrier a pack shows.
  2. 2.Decide which of your items are dated, lotted, or serialised, and record that on the item master. The value of the 2D barcode is the batch, the expiry, and the serial it can carry, but only some products need each. Flag each item for whether it is a dated good, whether it is lot managed, and whether it is serialised, so the capture and the downstream rules only fire where they belong.
  3. 3.Capture the expiration date as a real date, not a shelf note. A 2D barcode can carry the expiry in a fixed YYMMDD form under Application Identifier (17). Read it at receipt and hold it on the stock line, so first expiry first out picking and near expiry write downs run off a value in the record rather than off a physical inspection nobody has time for.
  4. 4.Capture the batch or lot so a recall is a query. Application Identifier (10) carries a batch or lot number of up to twenty characters, and that lot is what connects a unit to a production run and a supplier delivery. Store it against the GTIN at receipt and at sale, so finding every affected unit after a recall notice is a query over the item and the lot, not a warehouse walk.
  5. 5.Preserve the attributes end to end, because reading them is not keeping them. GS1 testing found systems that could read Application Identifier data still could not store all of it, and often were not set up to process expiration date at all. Trace your own path from scan to record and remove every place the lot, the expiry, or the serial is parsed and then dropped because the flow only expected a product number.
  6. 6.Handle the dual-marked pack without special cases. Through the transition a pack carries both barcodes, and from 2027 a single 2D carrier becomes an option depending on trading partners. Treat the GTIN as the constant and the symbol as a detail, so a pack with one code or two lands in the same clean record and no receiving clerk has to decide which barcode to trust.
  7. 7.Run one completeness query before you rely on any of it. Any dated good with no expiration date captured, any stock inside your reserve threshold of expiry with no reserve booked, and any serialised item sold or returned with no serial on record is a gap. While that list has entries, the attributes are not yet trustworthy for valuation or traceability, and the list is far cheaper to clear than a mispriced write down or a recall you cannot scope.

Failure modes, framed so you can avoid them.

  • Treating Sunrise 2027 as a checkout project and stopping at the GTIN. Reading the product number keeps the till working, and that is the floor, not the finish. A team that upgrades scanning but never stores the batch or the expiry has paid for the new barcode and kept none of the data that made it worth carrying.
  • Reading the expiration date and then dropping it. GS1 found systems that could parse Application Identifier data but could not store all of it. An expiry that is scanned and discarded is worse than one never read, because the record looks complete while the value that drives a write down quietly never arrives.
  • Keeping expiry as a shelf label rather than a field. A date printed for a person to read is not a date a system can act on. If the expiration date lives on the shelf and not on the stock line, first expiry first out and near expiry reserves stay manual, and the write down still happens at a count instead of in the ledger.
  • Holding stock by product when the risk lives in the lot. A quantity of a GTIN with no batch behind it cannot answer a recall. When a supplier flags a bad run, the team that stored only the product number has to quarantine everything or guess, while the team that kept the lot returns the exact affected lines in a query.
  • Serialising nothing, or serialising everything. A serial number is powerful for warranty, authentication, and returns on the goods that need it, and pure overhead on the ones that do not. Deciding per item, on the item master, is what keeps serial capture useful rather than a cost applied evenly to products that will never use it.
  • Building only for the new barcode and breaking on the old one. Packs will carry both symbols for years, and a flow rewritten to expect a 2D code that chokes on a 1D one is a step backward. The GTIN is the same either way, so the carrier should never be a branch point in receiving or at the till.
  • Letting the item master lag the packaging. Suppliers add 2D barcodes to packs on their own timeline, and an item master that has no place to put a lot or an expiry means the data arrives at receiving and lands nowhere. The record has to be ready to hold the attribute before the first pack that carries it shows up.
  • Assuming the online link is the point. GS1 Digital Link can connect a scan to web content, which is useful, but the finance value is the structured data in the barcode that a host can read without any online connection at all. Chasing the consumer landing page while ignoring the batch and expiry that drive valuation is optimising the wrong half.

What this asks of the data model.

  • The GTIN is the identity key, parsed the same from any carrier. Whether a pack shows a striped barcode, a QR Code with GS1 Digital Link, or a GS1 DataMatrix, the product number is the constant, so the item master keys on the GTIN and never on the symbol that delivered it.
  • Batch or lot is a captured attribute of the stock line, not the item. Two deliveries of the same GTIN are different lots with different expiries and different recall exposure, so the lot belongs on the stock line, and the item master carries only whether the product is lot managed at all.
  • The expiration date is a real date the system acts on. Held as a date rather than a printed label, it feeds first expiry first out picking, near expiry reserves, and lower of cost and net realisable value, so the value of dated stock is derived rather than discovered.
  • The serial number is scoped to the items that need it. Serialised goods gain a uniquely identifiable unit for warranty, authentication, and returns, while non serialised goods carry none, and the item master flag is what keeps that decision explicit and per product.
  • Application Identifiers are the shared grammar between the pack and the record. Because (01), (10), (17), and (21) define the meaning and format of each element, the mapping from barcode to field is a standard, not a per supplier guess, and a conformant parse fills the right column every time.
  • Preservation is a property of the whole path, not the scanner. A symbol read at the dock is worth nothing if the attribute is dropped before it reaches the stock line, so the data path from scan to record is designed to keep the lot, the expiry, and the serial, not just to read them.
  • The carrier is a transition detail, held loosely. Dual-marked packs and single-carrier packs will coexist for years, so the record notes what it read but does not depend on it, and the same clean line results whether one symbol was scanned or two.
  • Completeness reduces to one query. Any dated good with no expiry, any near expiry stock with no reserve, and any serialised movement with no serial is the exception list, and it can run before valuation or a recall depends on the data rather than surfacing in a bad number.

The evidence to keep.

  • The item master flags for dated, lot managed, and serialised, so a reader can see which attributes each product is expected to carry and why the downstream rules fire where they do.
  • The captured lot and expiry on stock lines, showing that receiving preserved the batch or lot number and the expiration date from the barcode rather than reading and discarding them.
  • The first expiry first out and near expiry reserve calculations, tracing each write down back to an expiration date held on the stock line, so a reserve is evidenced by a date in the record rather than a judgement at a count.
  • The lot to unit traceability, showing that a query by GTIN and batch or lot returns every affected line, evidencing that a recall can be scoped from data rather than a physical search.
  • The serial records for serialised movements, tying a sale, a warranty claim, or a return to a specific unit, so a returned item can be checked against what actually left.
  • The dual-carrier handling record, showing that packs with a 1D symbol, a 2D symbol, or both resolved to the same GTIN and the same clean stock line through the transition.
  • The Application Identifier mapping, documenting that each element read from the barcode landed in the correct field by its GS1 definition, so the parse is auditable rather than bespoke.
  • The completeness exception report, ideally empty, listing any dated good without an expiry, any near expiry stock without a reserve, and any serialised movement without a serial, so the gaps were checked before the data was relied on.

Questions worth asking in your own review.

  • Does the same GTIN come out of a 1D and a 2D barcode through every path, checkout, receiving, and item lookup, so the identity key never depends on the carrier?
  • For each dated product, is the expiration date captured as a real date on the stock line, or does it still live on a shelf label a person has to read?
  • When goods arrive, do we store the batch or lot against the GTIN, so a recall notice becomes a query rather than a warehouse walk?
  • Have we decided, per item on the master, which products are dated, which are lot managed, and which are serialised, so capture and rules only fire where they belong?
  • Does our data path from scan to record actually keep the lot, the expiry, and the serial, or does it read them and drop them because the flow only expected a product number?
  • Do our first expiry first out picking and near expiry write downs run off a date in the record, so the value of aging stock is computed rather than found at a count?
  • Can receiving handle a pack that carries both barcodes, and one that carries only a 2D symbol, without a special case that could break?
  • Could we produce, today, a list of every dated good with no expiry, every near expiry line with no reserve, and every serialised movement with no serial?

What this adds up to.

The move to 2D barcodes is a welcome change, and the checkout requirement behind it is refreshingly small. Read the same GTIN from a new symbol and the till keeps working. A team that stops there has met the letter of Sunrise 2027 and left the value on the table, because the value was never the code, it was the batch, the expiry, and the serial the same scan could have carried into the record.

The build that captures that value is small and pays off across the business. Key the item master on the GTIN and parse it the same from any carrier. Flag which products are dated, lotted, or serialised. Capture the expiry as a real date, the lot against the GTIN, and the serial where it matters, and make sure the path from scan to record keeps them rather than dropping them. Wire the expiry to valuation, the lot to traceability, and the serial to returns. Do that and a write down or a recall is a query, and the same clean data makes counts, audits, and cost of goods steadier all year.

If there is one place to start, run the completeness query against your own inventory before you lean on any of it: every dated good with no expiration date captured, every line inside your reserve threshold of expiry with no reserve booked, and every serialised movement with no serial on record. For a small catalogue that list is short and the work is a week. For a large one it is the work, and it is far better found now, while packs are only beginning to carry the richer code, than discovered in a mispriced write down or a recall you cannot scope.

Sources.

The Sunrise 2027 date, the requirement that checkout process the GTIN and that this is the only requirement for the transition, the named benefits, the findings from GS1 US testing, the example encoding of a GTIN with an expiration date and a batch or lot, and the dual-marking then single-carrier transition come from the GS1 US Sunrise 2027 one-pager, which was read directly as a PDF, and the GS1 US Sunrise 2027 topic page. The Application Identifier definitions and formats, including GTIN (01), batch or lot (10), expiration date (17) in YYMMDD, and serial number (21), were read directly from the GS1 Application Identifiers reference, with the encoding and parsing rules resting on the GS1 General Specifications. The vision of a single multipurpose 2D barcode usable at the retail point of sale and to access digital content, and the design in which identifiers can be read by a host without any online connection, come from the GS1 Digital Link standard page. No embedded posts from X appear here, because no public post on this transition could be verified as current, relevant, and authentic at the time of writing, and an unverified embed is worse than none. Nothing here is accounting, inventory, or legal advice for a specific company. The figures, names, and dates in the worked example and the record are placeholders for shape rather than real values, and how a given company adopts 2D barcodes depends on its own products, its trading partners, and its systems.