module GS1::Extensions::DateMonthBased
Extension for a GS1
date. Ensures correct formating and validation.
OBS! Month-based expiry
Expiry dates for a batch of medicinal product are generally set by month, rather than day. If a batch expires in March 2021, for example, it expires at the very end of the month. From the 1st April 2021, the EMVS will report that the pack identifier has expired if it has not already been decommissioned for some other reason.
Manufacturers represent expiry by month in one of two ways. They either set the expiry date to be the last day of the month or they set the day component of the date (DD) to '00'. Examples are shown below:
Format A: 210331 Format B: 210300
These two formats effectively indicate the same expiry date. The first specifies a specific day (the last day of the month). The second specifies only the month of expiry.
The format used in the barcodes must be exactly the same as the format used within the EMVS. If the manufacturer uploads batch data to the European Hub using one format, but prints the barcodes using the other, the dates will not match and the national system will raise 'potential falsified medicine' alerts. In this case, the packs cannot be supplied until the manufacturer corrects the data within the EMVS.
Public Class Methods
# File lib/gs1/extensions/date_month_based.rb, line 28 def self.included(base) base.define :date_month_based base.define :length, barcode: 6 end
# File lib/gs1/extensions/date_month_based.rb, line 33 def initialize(date) if date.respond_to?(:strftime) super(date.strftime('%y%m%d')) else super(date) end end
Public Instance Methods
# File lib/gs1/extensions/date_month_based.rb, line 41 def to_date to_date_format_a || to_date_format_b end
Private Instance Methods
# File lib/gs1/extensions/date_month_based.rb, line 47 def to_date_format_a ::Date.strptime(data, '%y%m%d') rescue TypeError, ArgumentError nil end
# File lib/gs1/extensions/date_month_based.rb, line 53 def to_date_format_b ::Date.strptime(data, '%y%m00').next_month.prev_day rescue TypeError, ArgumentError nil end