Cannabis Freedom Index

Changelog f475c2dtree

history: require status chips on filled hemp/industry/research, backfill 240

214 country profiles edited2 files of code, design or docs +296 −10 lines

Countries and states 214 files

Andorra countries/ad.yaml

context › production › status

none

Afghanistan countries/af.yaml

context › production › status

none

Albania countries/al.yaml

context › production › status

medical

Armenia countries/am.yaml

context › production › status

medical

Angola countries/ao.yaml

context › production › status

none

Argentina countries/ar.yaml

context › production › status

medical

Austria countries/at.yaml

context › production › status

state

Australia countries/au/index.yaml

context › production › status

medical

Aruba countries/aw.yaml

context › production › status

none

Azerbaijan countries/az.yaml

context › production › status

none

Barbados countries/bb.yaml

context › production › status

medical

Bangladesh countries/bd.yaml

context › production › status

none

Belgium countries/be.yaml

context › production › status

medical

Burkina Faso countries/bf.yaml

context › production › status

none

Bulgaria countries/bg.yaml

context › production › status

medical

Bahrain countries/bh.yaml

context › production › status

none

Burundi countries/bi.yaml

context › production › status

none

Benin countries/bj.yaml

context › production › status

none

Bermuda countries/bm.yaml

context › production › status

none

Brunei countries/bn.yaml

context › production › status

none

Bolivia countries/bo.yaml

context › production › status

medical

Brazil countries/br.yaml

context › production › status

medical

Bahamas countries/bs.yaml

context › production › status

none

Bhutan countries/bt.yaml

context › production › status

none

Botswana countries/bw.yaml

context › production › status

medical

Belarus countries/by.yaml

context › production › status

none

Belize countries/bz.yaml

context › production › status

medical

Canada countries/ca/index.yaml

context › production › status

open

DR Congo countries/cd.yaml

context › production › status

medical

Congo countries/cg.yaml

context › production › status

none

Chile countries/cl.yaml

context › production › status

medical

Cameroon countries/cm.yaml

context › production › status

none

China countries/cn.yaml

context › production › status

medical

Colombia countries/co.yaml

context › production › status

medical

Costa Rica countries/cr.yaml

context › production › status

medical

Cuba countries/cu.yaml

context › production › status

none

Cabo Verde countries/cv.yaml

context › production › status

medical

Curaçao countries/cw.yaml

context › production › status

medical

Cyprus countries/cy.yaml

context › production › status

medical

Czechia countries/cz.yaml

context › research › status

licensed

Djibouti countries/dj.yaml

context › production › status

none

Denmark countries/dk.yaml

context › production › status

medical

Dominica countries/dm.yaml

context › production › status

none

Algeria countries/dz.yaml

context › production › status

medical

Ecuador countries/ec.yaml

context › production › status

medical

Estonia countries/ee.yaml

context › production › status

medical

Egypt countries/eg.yaml

context › production › status

none

context › research › status

licensed

Eritrea countries/er.yaml

context › production › status

none

Spain countries/es.yaml

context › production › status

medical

Ethiopia countries/et.yaml

context › production › status

none

Finland countries/fi.yaml

context › production › status

none

Fiji countries/fj.yaml

context › hemp › status

high

context › production › status

medical

Micronesia countries/fm.yaml

context › production › status

none

Faroe Islands countries/fo.yaml

context › production › status

medical

France countries/fr.yaml

context › production › status

medical

context › hemp › status

standard

Gabon countries/ga.yaml

context › production › status

medical

United Kingdom countries/gb.yaml

context › production › status

medical

context › hemp › status

strict

Grenada countries/gd.yaml

context › production › status

none

Georgia countries/ge.yaml

context › production › status

none

Guernsey countries/gg.yaml

context › production › status

none

Ghana countries/gh.yaml

context › production › status

medical

Gibraltar countries/gi.yaml

context › production › status

medical

Greenland countries/gl.yaml

context › production › status

medical

Gambia countries/gm.yaml

context › production › status

none

Guinea countries/gn.yaml

context › production › status

none

Greece countries/gr.yaml

context › production › status

medical

Guatemala countries/gt.yaml

context › production › status

medical

Guam countries/gu.yaml

context › production › status

open

Guinea-Bissau countries/gw.yaml

context › production › status

medical

Guyana countries/gy.yaml

context › production › status

medical

Hong Kong countries/hk.yaml

context › production › status

none

Honduras countries/hn.yaml

context › production › status

none

Croatia countries/hr.yaml

context › production › status

medical

context › hemp › status

strict

context › research › status

licensed

Haiti countries/ht.yaml

context › production › status

none

Hungary countries/hu.yaml

context › hemp › text

Only low-THC hemp at or below 0.2% THC from the national or EU variety list may be grown, sown from sealed certified seed, and only low-THC hemp seed may be marketed.[@wiki,d162] Breeding, research growing and seed production of high-THC hemp are reserved for organisations licensed by the public health authority.[@d162] CBD products sit in a restricted grey zone.[@wiki]

context › production › status

medical

context › hemp › status

strict

context › research › status

licensed

Indonesia countries/id.yaml

context › production › status

none

Ireland countries/ie.yaml

context › production › status

none

Israel countries/il.yaml

context › production › status

medical

Isle of Man countries/im.yaml

context › production › status

medical

India countries/in.yaml

context › production › status

medical

Iraq countries/iq.yaml

context › production › status

none

Iran countries/ir.yaml

context › production › status

none

Iceland countries/is.yaml

context › production › status

none

Italy countries/it.yaml

context › production › status

medical

Jersey countries/je.yaml

context › production › status

medical

Jordan countries/jo.yaml

context › production › status

medical

Japan countries/jp.yaml

context › production › status

medical

Kenya countries/ke.yaml

context › production › status

none

Kyrgyzstan countries/kg.yaml

context › production › status

none

Cambodia countries/kh.yaml

context › production › status

medical

Kiribati countries/ki.yaml

context › production › status

medical

Comoros countries/km.yaml

context › production › status

none

North Korea countries/kp.yaml

context › production › status

medical

South Korea countries/kr.yaml

context › production › status

medical

Kuwait countries/kw.yaml

context › production › status

medical

context › hemp › status

none

context › research › status

licensed

Cayman Islands countries/ky.yaml

context › production › status

medical

Kazakhstan countries/kz.yaml

context › production › status

medical

Laos countries/la.yaml

context › production › status

medical

Lebanon countries/lb.yaml

context › production › status

medical

Saint Lucia countries/lc.yaml

context › production › status

none

Liechtenstein countries/li.yaml

context › production › status

none

Sri Lanka countries/lk.yaml

context › production › status

medical

Liberia countries/lr.yaml

context › production › status

none

Lesotho countries/ls.yaml

context › production › status

medical

Lithuania countries/lt.yaml

context › production › status

medical

Luxembourg countries/lu.yaml

context › production › status

none

Latvia countries/lv.yaml

context › production › status

medical

Libya countries/ly.yaml

context › production › status

none

Morocco countries/ma.yaml

context › production › status

medical

Monaco countries/mc.yaml

context › production › status

none

Moldova countries/md.yaml

context › production › status

none

Montenegro countries/me.yaml

context › recreational › text

There is no legal recreational supply. Holding drugs for personal use brings a €100– €2,000 misdemeanour fine; selling, holding for sale, buying or transporting for sale brings two to ten years.[@law,cc] Giving drugs for consumption or providing premises brings six months to five years, or two to ten aggravated.[@cc]

context › recreational › sources

law, cc

context › production › status

medical

context › hemp › status

strict

context › hemp › text

Food and industrial hemp needs a cultivation permit plus a contract for the whole crop, covering hemp at or below 0.2% THC in dry plant material; applicants declare variety, certified-seed quantity, area and sowing plans, and report land by 1 May.[@law,hemp] A scientific legal entity may grow under a separate land-registration exception.[@law]

context › hemp › sources

law, hemp

context › research › status

licensed

context › research › text

A scientific legal entity may grow hemp under a separate land-registration exception to the permit-and-contract route.[@law] No separate research programme, trial or published study was established by the retained sources.

context › research › sources

law

Madagascar countries/mg.yaml

context › production › status

none

Mali countries/ml.yaml

context › production › status

medical

Myanmar countries/mm.yaml

context › production › status

none

Mongolia countries/mn.yaml

context › production › status

none

Macau countries/mo.yaml

context › production › status

medical

Mauritania countries/mr.yaml

context › production › status

none

Malta countries/mt.yaml

context › production › status

open

Mauritius countries/mu.yaml

context › production › status

none

Maldives countries/mv.yaml

context › production › status

none

Malawi countries/mw.yaml

context › production › status

medical

Mexico countries/mx.yaml

context › production › status

medical

Malaysia countries/my.yaml

context › production › status

none

Mozambique countries/mz.yaml

context › production › status

none

Namibia countries/na.yaml

context › production › status

none

Niger countries/ne.yaml

context › production › status

none

Nigeria countries/ng.yaml

context › production › status

medical

context › research › status

restricted

Nicaragua countries/ni.yaml

context › production › status

none

Norway countries/no.yaml

context › production › status

none

Nepal countries/np.yaml

context › production › status

none

Nauru countries/nr.yaml

context › production › status

none

New Zealand countries/nz.yaml

context › production › status

medical

Oman countries/om.yaml

context › production › status

none

context › hemp › status

strict

context › research › status

licensed

Panama countries/pa.yaml

context › production › status

medical

Peru countries/pe.yaml

context › production › status

medical

Philippines countries/ph.yaml

context › production › status

none

Pakistan countries/pk.yaml

context › production › status

medical

Poland countries/pl.yaml

context › production › status

medical

context › research › status

licensed

context › hemp › status

standard

Puerto Rico countries/pr.yaml

context › production › status

medical

Palestine countries/ps.yaml

context › production › status

medical

Portugal countries/pt.yaml

context › production › status

medical

Palau countries/pw.yaml

context › production › status

none

Paraguay countries/py.yaml

context › production › status

medical

Qatar countries/qa.yaml

context › production › status

none

context › hemp › status

none

context › research › status

licensed

Réunion countries/re.yaml

context › production › status

none

context › hemp › status

standard

Romania countries/ro.yaml

context › production › status

medical

context › hemp › status

none

Serbia countries/rs.yaml

context › production › status

medical

context › research › status

licensed

context › hemp › status

standard

Russia countries/ru.yaml

context › production › status

medical

Rwanda countries/rw.yaml

context › production › status

medical

Saudi Arabia countries/sa.yaml

context › production › status

none

Seychelles countries/sc.yaml

context › production › status

none

Sudan countries/sd.yaml

context › production › status

none

Sweden countries/se.yaml

context › production › status

none

Slovenia countries/si.yaml

context › production › status

medical

context › research › status

licensed

Slovakia countries/sk.yaml

context › hemp › text

Hemp may be grown for industrial fibre and seed or for research; EU-catalogue varieties are exempt from the one-year ministry permit requirement.[@z139] CBD from industrial hemp is lawful at up to 0.3% THC since 2022.[@wiki] Growing other cannabis for personal consumption stays criminal, including up to two plants.[@code]

context › hemp › sources

z139, code, wiki

sources

Wikipedia — Cannabis in Slovakia 7 unchanged

context › production › status

medical

context › hemp › status

standard

context › research › status

licensed

Sierra Leone countries/sl.yaml

context › production › status

medical

San Marino countries/sm.yaml

context › production › status

none

Senegal countries/sn.yaml

context › production › status

none

Somalia countries/so.yaml

context › production › status

none

Suriname countries/sr.yaml

context › production › status

none

South Sudan countries/ss.yaml

context › production › status

medical

El Salvador countries/sv.yaml

context › production › status

none

Sint Maarten countries/sx.yaml

context › production › status

none

Syria countries/sy.yaml

context › production › status

none

Eswatini countries/sz.yaml

context › production › status

none

Chad countries/td.yaml

context › production › status

none

Togo countries/tg.yaml

context › production › status

none

Thailand countries/th.yaml

context › production › status

open

Tajikistan countries/tj.yaml

context › production › status

medical

Timor-Leste countries/tl.yaml

context › production › status

none

Turkmenistan countries/tm.yaml

context › production › status

medical

Tunisia countries/tn.yaml

context › production › status

none

Tonga countries/to.yaml

context › production › status

none

Türkiye countries/tr.yaml

context › production › status

medical

Tuvalu countries/tv.yaml

context › production › status

medical

Taiwan countries/tw.yaml

context › production › status

medical

context › hemp › status

strict

Tanzania countries/tz.yaml

context › production › status

none

Ukraine countries/ua.yaml

context › production › status

medical

Uganda countries/ug.yaml

context › production › status

medical

United States countries/us/index.yaml

context › production › status

open

Uzbekistan countries/uz.yaml

context › production › status

none

Venezuela countries/ve.yaml

context › production › status

none

Code, design and documents 2 files

scripts/profile-claims.test.mjs +14 −1
@@ -830,4 +830,17 @@ test('Swiss small-possession table excludes consumption and trial research retai
 });
 
+test('every filled hemp, industry or research context carries its status chip', () => {
+  const bad = [];
+  const walkDir = (dir) => fs.readdirSync(dir, { withFileTypes: true }).flatMap((e) =>
+    e.isDirectory() ? walkDir(path.join(dir, e.name)) : e.name.endsWith('.yaml') ? [path.join(dir, e.name)] : []);
+  for (const f of walkDir(path.join(root, 'countries'))) {
+    const c = yaml.load(fs.readFileSync(f, 'utf8'));
+    for (const s of ['hemp', 'production', 'research']) {
+      if (c.context?.[s] && c.context[s].status === undefined) bad.push(`${path.relative(root, f)}#${s}`);
+    }
+  }
+  assert.deepEqual(bad, []);
+});
+
 test('Taiwan distinguishes legislative passage, effective growing penalties and exceptional medicine permission', () => {
   const d = country('tw'), p = d.segments.cultivation;
@@ -838,5 +851,5 @@ test('Taiwan distinguishes legislative passage, effective growing penalties and
   assert.equal(d.scores.access, 0);
   assert.match(d.context.medical.text, /Dravet and Lennox–Gastaut/);
-  assert.equal(d.context.hemp.status, undefined);
+  assert.equal(d.context.hemp.status, 'strict');
   const all = events();
   assert.equal(all.find(e => e.id === 'taiwan-personal-cultivation-amendment-2022').date, '2022-05-04');

src/content.config.ts +3 −2
@@ -53,8 +53,9 @@ const plantingTrade = z.enum(Object.keys(PLANTING_TRADE) as [string, ...string[]
 const planting = z.object({ seeds: plantingStatus, seeds_trade: plantingTrade, clones: plantingStatus, clones_trade: plantingTrade, text: z.string().min(1), sources: z.array(z.string()) }).strict();
 // clubs, driving, visitors: the cited text plus one status from that section's vocabulary (STATUS_SECTIONS)
-// the newer ones (`optional` in STATUS_SECTIONS) may leave the status out; a standard section (production) stays required
+// a filled hemp, industry or research section must also carry its status chip; only the whole
+// section may be left out
 const statusSections = Object.fromEntries(Object.entries(STATUS_SECTIONS).map(([key, section]) => {
   const status = z.enum(Object.keys(section.statuses) as [string, ...string[]]);
-  const block = z.object({ status: section.optional ? status.optional() : status, text: z.string().min(1), sources: z.array(z.string()) }).strict();
+  const block = z.object({ status, text: z.string().min(1), sources: z.array(z.string()) }).strict();
   return [key, (CONTEXT_IDS as string[]).includes(key) ? block : block.optional()];
 }));

    ↑↓ to move, ↵ to open.