While building the PSU section on Govtpvt, we needed a clean way to store India's public sector companies so the same data could drive tables, filters and per-company pages. Here is the schema we settled on, in case it helps anyone working with Indian government data.
The problem
A "PSU list" looks simple until you try to store it. Companies change status (Miniratna to Navratna to Maharatna), merge, get renamed or move ministries. Public sector banks and insurers are government companies but follow different rules from industrial CPSEs. And recruitment details (GATE or own exam) matter more to readers than the status itself.
The schema
{
"name": "NTPC Limited",
"short_name": "NTPC",
"status": "maharatna",
"status_since": "2010",
"type": "cpse",
"sector": "power",
"ministry": "Ministry of Power",
"listed": true,
"hq": "New Delhi",
"recruitment": ["gate", "apprenticeship"],
"careers_url": "https://careers.ntpc.co.in"
}
A few choices worth explaining:
-
statusis an enum (maharatna,navratna,miniratna_1,miniratna_2,none) plusstatus_since, so upgrades are easy to track. -
typeseparatescpse,state_psu,psb(public sector bank) andinsurer. Mixing them in one flat list confuses readers. -
recruitmentis an array because many companies use more than one route. -
careers_urlalways points at the official site. We never link to third-party mirrors for application forms.
Rendering
Grouping by status gives the Maharatna/Navratna/Miniratna tables, and grouping by sector gives the sector-wise view. Filtering recruitment on gate produces the "PSUs that recruit through GATE" list automatically.
You can see the result on the PSU list in India page. The same approach powers our latest government jobs listings, where every entry links back to the official notice.
If you maintain similar datasets for Indian public data, I'd love to compare notes in the comments.
Top comments (0)