diff --git a/db_scripts/diff/15394.down b/db_scripts/diff/15394.down
new file mode 100644
index 00000000..0d2482e8
--- /dev/null
+++ b/db_scripts/diff/15394.down
@@ -0,0 +1,3 @@
+use billing;
+
+alter table contracts drop column product_id;
diff --git a/db_scripts/diff/15394.up b/db_scripts/diff/15394.up
new file mode 100644
index 00000000..d2a9cc01
--- /dev/null
+++ b/db_scripts/diff/15394.up
@@ -0,0 +1,31 @@
+use billing;
+
+alter table contracts add column product_id int(11) unsigned default null;
+
+update 
+  contracts c
+join (
+  select
+    bm1.contract_id,
+    max(bm1.id) as id
+  from
+       billing.billing_mappings bm1 
+  join (
+    select
+      bm2.contract_id,
+      max(bm2.start_date) as start_date
+    from
+      billing.billing_mappings bm2 
+    where (
+      bm2.end_date >= now() or bm2.end_date is null) 
+      and (bm2.start_date <= now() or bm2.start_date is null
+    ) group by bm2.contract_id
+  ) as mx on bm1.contract_id = mx.contract_id and bm1.start_date <=> mx.start_date 
+  group by bm1.contract_id
+) as bm_actual on bm_actual.contract_id = c.id
+join
+  billing.billing_mappings bm on bm.id = bm_actual.id
+set c.product_id = bm.product_id;
+
+alter table contracts modify column product_id int(11) unsigned not null, add constraint c_productid_ref foreign key (product_id) references products (id) on update cascade;
+