Patent Expiration Rules
Based on the fees paid, we can determine the validity of a patent. Each fee is coded and the DaysIncrement variable indicates how many more days a patent is valid for after that fee is paid. The DaysDuration is how many total days the patent has been valid for since it's grant date. DaysDuration is the key variable, for each fee paid, we add DaysIncrement to DaysDuration. The DaysDuration past the grant date is the validity of the patent.
NOTE: This version does not distinguish when to count from filedate or grant date - it only uses grantdate. Prior to XXX (TO BE FILLED IN BY AVESH), patents had statutory terms of 18 yrs from grant. Subsequent to XXX patents have 20 years from application.
ALSO- keep in mind this is in *allpatentsprocessed* DB, not in the *patent* database.
Located in
Z:\LBO\Clean\patentExpirationRules.txt
FeeCode | Description | DaysIncrement | DaysDuration |
---|---|---|---|
EXP. | Patent Expired for Failure to Pay Maintenance Fees. | 0 | 0 |
EXPX | Patent Reinstated After Maintenance Fee Payment Confirmed. | 0 | 0 |
M1551 | Payment of Maintenance Fee, 4th Year, Large Entity. | 1460 | 2920 |
M1552 | Payment of Maintenance Fee, 8th Year, Large Entity. | 1460 | 4380 |
M1553 | Payment of Maintenance Fee, 12th Year, Large Entity. | 2920 | 7300 |
M1559 | Payment of Maintenance Fee under 1.28(c). | 0 | 0 |
M170 | Payment of Maintenance Fee, 4th Year, PL 96-517. | 1460 | 2920 |
M171 | Payment of Maintenance Fee, 8th Year, PL 96-517. | 1460 | 4380 |
M172 | Payment of Maintenance Fee, 12th Year, PL 96-517. | 2920 | 7300 |
M173 | Payment of Maintenance Fee, 4th Year, PL 97-247. | 1460 | 2920 |
M174 | Payment of Maintenance Fee, 8th Year, PL 97-247. | 1460 | 4380 |
M175 | Payment of Maintenance Fee, 12th Year, PL 97-247 | 2920 | 7300 |
M183 | Payment of Maintenance Fee, 4th Year, Large Entity. | 1460 | 2920 |
M184 | Payment of Maintenance Fee, 8th Year, Large Entity. | 1460 | 4380 |
M185 | Payment of Maintenance Fee, 12th Year, Large Entity. | 2920 | 7300 |
M2551 | Payment of Maintenance Fee, 4th Yr, Small Entity. | 1460 | 2920 |
M2552 | Payment of Maintenance Fee, 8th Yr, Small Entity. | 1460 | 4380 |
M2553 | Payment of Maintenance Fee, 12th Yr, Small Entity. | 2920 | 7300 |
M273 | Payment of Maintenance Fee, 4th Yr, Small Entity, PL 97-247. | 1460 | 2920 |
M274 | Payment of Maintenance Fee, 8th Yr, Small Entity, PL 97-247. | 1460 | 4380 |
M275 | Payment of Maintenance Fee,12th Yr, Small Entity, PL 97-247. | 2920 | 7300 |
M283 | Payment of Maintenance Fee, 4th Yr, Small Entity. | 1460 | 2920 |
M284 | Payment of Maintenance Fee, 8th Yr, Small Entity. | 1460 | 4380 |
M285 | Payment of Maintenance Fee, 12th Yr, Small Entity. | 2920 | 7300 |
M3551 | Payment of Maintenance Fee, 4th Year, Micro Entity. | 1460 | 2920 |
M3552 | Payment of Maintenance Fee, 8th Year, Micro Entity. | 1460 | 4380 |
M3553 | Payment of Maintenance Fee, 12th Year, Micro Entity. | 2920 | 7300 |
Building Start and End Table
Created PatentExpirationRules table using the data shown in the table above. Maintfeeevents is a table with all of the USPTO data on fees paid. The earliest grantdate in this dataset is 1981-09-01 and the latest is 2016-06-28. The earliest feedate is 1980-12-19 and the latest feedate is 5000-01-1 (NO THIS IS NOT A TYPO- someone please fix why we have fees being paid in the year 5000). The second latest feedate is 2016-06-13.
SQL steps are located at
E:\McNair\Projects\LBO\Clean\Building the Patent Start End Table.sql
/* These are instructions for building the patentstartend table, which identifies for each patent (number) the dates at which it is granted and at which it expired. It uses a database of all maintenance fee events and a list of the types of maintenance fee events and their effect the length of patent life */ --First, we need to import the table of Maintenance fee events (from copy in Z:\LBO\Clean, originally from Z:\USPTO_Consolidated\Maint_Fee_Events) CREATE TABLE Maintfeeevents ( patentNumber VARCHAR(7) NOT NULL, appNumber VARCHAR(8) NOT NULL, smallEntity VARCHAR(1) NOT NULL, appFilingDate DATE NOT NULL, grantDate DATE NOT NULL, feeDate DATE NOT NULL, feeCode VARCHAR(5) NOT NULL ); \COPY Maintfeeevents FROM 'MaintFeeEvents_20160613.txt' WITH DELIMITER AS E' ' HEADER NULL AS CSV; --Now import table of fee codes (and the duration of the extensions) from (Z:\LBO\Clean) --daysDuration represents the number of days from grantdate that patent will remain active due to maintenance fee event --I.e., 8 years for 4th year extension, 12 years for 8th year extension, 20 years for 12th year extension --Note that we give the expiration events a value of 0 since these can occur after any such extension (or lack thereof). CREATE TABLE PatentExpirationRules ( feeCode VARCHAR(5) NOT NULL, description VARCHAR(255) NOT NULL, daysIncrement INTEGER NOT NULL, daysDuration INTEGER NOT NULL ); \COPY PatentExpirationRules FROM 'patentExpirationRules.txt' WITH DELIMITER AS E'\t' HEADER NULL AS CSV; --We can approximate the actual expiration date by taking the max of daysDuration and adding that number of days to the original grantdate SELECT M.patentnumber, MAX(M.grantdate) as grantdate, MAX(GREATEST(M.grantdate + P.daysDuration, M.grantdate + 1460)) as expdate INTO patentstartend FROM maintfeeevents as M RIGHT JOIN patentexpirationrules as P ON M.feecode = P.feecode GROUP BY M.patentnumber ; /* There is an alternative way to do this using fee expiration events; however, there are two problems: 1) The USPTO may have accidentally omitted some expiration events 2) Sometimes there are late payments; this leads to reinstatement of the patent. Should be solved by taking last expiration event, but there are potential problems: 2a) See problem 1 2b) Might not have expiration event at conclusion of 20 years (after all three extensions expire) */