Spaces:
Running
Running
updated
Browse files- Dockerfile +31 -15
- app/app.py +48 -44
- app/policy_vector_db.py +12 -8
- combined_context.jsonl +90 -0
- create_granular_chunks.py +134 -0
- processed_chunks.json +0 -0
Dockerfile
CHANGED
|
@@ -1,37 +1,53 @@
|
|
| 1 |
-
|
| 2 |
|
| 3 |
-
#
|
|
|
|
|
|
|
|
|
|
| 4 |
RUN apt-get update && apt-get install -y \
|
| 5 |
-
|
| 6 |
&& rm -rf /var/lib/apt/lists/*
|
| 7 |
|
| 8 |
-
# Set working directory
|
| 9 |
WORKDIR /app
|
| 10 |
|
| 11 |
-
# Create writable directories
|
| 12 |
RUN mkdir -p /app/.cache /app/vector_database && chmod -R 777 /app
|
| 13 |
|
| 14 |
-
# Set environment variables
|
| 15 |
ENV TRANSFORMERS_CACHE=/app/.cache \
|
| 16 |
HF_HOME=/app/.cache \
|
| 17 |
CHROMADB_DISABLE_TELEMETRY=true
|
| 18 |
|
| 19 |
-
#
|
| 20 |
-
RUN pip install --no-cache-dir
|
|
|
|
| 21 |
|
| 22 |
-
# Install
|
| 23 |
COPY requirements.txt .
|
| 24 |
RUN pip install --no-cache-dir -r requirements.txt
|
| 25 |
|
| 26 |
-
#
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
-
# Download your
|
| 30 |
-
RUN curl -
|
| 31 |
-
https://huggingface.co/Kalpokoch/
|
|
|
|
| 32 |
|
| 33 |
# Expose the application port
|
| 34 |
EXPOSE 7860
|
| 35 |
|
| 36 |
-
# Run the FastAPI application
|
| 37 |
CMD ["uvicorn", "app.app:app", "--host", "0.0.0.0", "--port", "7860"]
|
|
|
|
| 1 |
+
# FINAL DOCKERFILE
|
| 2 |
|
| 3 |
+
# Use the standard Python 3.11 image for maximum compatibility
|
| 4 |
+
FROM python:3.11
|
| 5 |
+
|
| 6 |
+
# Install system dependencies
|
| 7 |
RUN apt-get update && apt-get install -y \
|
| 8 |
+
curl build-essential cmake \
|
| 9 |
&& rm -rf /var/lib/apt/lists/*
|
| 10 |
|
|
|
|
| 11 |
WORKDIR /app
|
| 12 |
|
| 13 |
+
# Create writable directories
|
| 14 |
RUN mkdir -p /app/.cache /app/vector_database && chmod -R 777 /app
|
| 15 |
|
| 16 |
+
# Set environment variables
|
| 17 |
ENV TRANSFORMERS_CACHE=/app/.cache \
|
| 18 |
HF_HOME=/app/.cache \
|
| 19 |
CHROMADB_DISABLE_TELEMETRY=true
|
| 20 |
|
| 21 |
+
# --- FIX: Install a specific and VERIFIED pre-built wheel ---
|
| 22 |
+
RUN pip install --no-cache-dir \
|
| 23 |
+
https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.75/llama_cpp_python-0.2.75-cp311-cp311-manylinux_2_28_x86_64.whl
|
| 24 |
|
| 25 |
+
# Install the rest of the dependencies
|
| 26 |
COPY requirements.txt .
|
| 27 |
RUN pip install --no-cache-dir -r requirements.txt
|
| 28 |
|
| 29 |
+
# --- ADDED: Auto-generate the granular context file ---
|
| 30 |
+
# 1. Copy the raw data and the processing script
|
| 31 |
+
COPY combined_context.jsonl .
|
| 32 |
+
COPY create_granular_chunks.py .
|
| 33 |
+
|
| 34 |
+
# 2. Run the script to create 'processed_chunks.json'
|
| 35 |
+
RUN python create_granular_chunks.py
|
| 36 |
+
|
| 37 |
+
# 3. Clean up the raw data and script, as they are no longer needed
|
| 38 |
+
RUN rm combined_context.jsonl create_granular_chunks.py
|
| 39 |
+
# ----------------------------------------------------
|
| 40 |
+
|
| 41 |
+
# Copy the application code
|
| 42 |
+
COPY ./app ./app
|
| 43 |
|
| 44 |
+
# Download your GGUF model
|
| 45 |
+
RUN curl -fL -o /app/phi1.5_dop_q4_k_m.gguf \
|
| 46 |
+
https://huggingface.co/Kalpokoch/Phi1.5QuantizedFineTuned/resolve/main/dop-phi-1.5_q4_k_m.gguf \
|
| 47 |
+
&& echo "✅ Model downloaded."
|
| 48 |
|
| 49 |
# Expose the application port
|
| 50 |
EXPOSE 7860
|
| 51 |
|
| 52 |
+
# Run the FastAPI application
|
| 53 |
CMD ["uvicorn", "app.app:app", "--host", "0.0.0.0", "--port", "7860"]
|
app/app.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
from fastapi import FastAPI, HTTPException
|
| 2 |
from pydantic import BaseModel
|
| 3 |
from llama_cpp import Llama
|
| 4 |
-
import logging
|
| 5 |
from app.policy_vector_db import PolicyVectorDB, ensure_db_populated
|
| 6 |
-
import asyncio
|
| 7 |
-
import os
|
| 8 |
|
| 9 |
# -----------------------------
|
| 10 |
# ✅ Logging Configuration
|
|
@@ -22,65 +23,62 @@ async def root():
|
|
| 22 |
return {"status": "✅ Server is running and ready."}
|
| 23 |
|
| 24 |
# -----------------------------
|
| 25 |
-
# ✅
|
| 26 |
-
# -----------------------------
|
| 27 |
-
class Feedback(BaseModel):
|
| 28 |
-
question: str
|
| 29 |
-
answer: str
|
| 30 |
-
feedback: str
|
| 31 |
-
|
| 32 |
-
@app.post("/feedback")
|
| 33 |
-
async def collect_feedback(feedback: Feedback):
|
| 34 |
-
logger.info(f"[FEEDBACK] Question: {feedback.question} | Answer: {feedback.answer} | Feedback: {feedback.feedback}")
|
| 35 |
-
return {"status": "✅ Feedback recorded. Thank you!"}
|
| 36 |
-
|
| 37 |
-
# -----------------------------
|
| 38 |
-
# ✅ Vector DB Configuration
|
| 39 |
# -----------------------------
|
| 40 |
DB_PERSIST_DIRECTORY = "/app/vector_database"
|
|
|
|
| 41 |
CHUNKS_FILE_PATH = "/app/processed_chunks.json"
|
|
|
|
| 42 |
logger.info("[INFO] Initializing vector DB...")
|
| 43 |
db = PolicyVectorDB(
|
| 44 |
persist_directory=DB_PERSIST_DIRECTORY,
|
| 45 |
top_k_default=5,
|
| 46 |
-
relevance_threshold=0.
|
| 47 |
)
|
|
|
|
|
|
|
| 48 |
if not ensure_db_populated(db, CHUNKS_FILE_PATH):
|
| 49 |
-
logger.warning("[WARNING] DB not populated. RAG will not function correctly.")
|
| 50 |
else:
|
| 51 |
-
logger.info("[INFO] Vector DB ready.")
|
| 52 |
|
| 53 |
# -----------------------------
|
| 54 |
-
# ✅ Load
|
| 55 |
# -----------------------------
|
| 56 |
-
|
|
|
|
|
|
|
| 57 |
logger.info(f"[INFO] Loading GGUF model from: {MODEL_PATH}")
|
| 58 |
|
| 59 |
llm = Llama(
|
| 60 |
model_path=MODEL_PATH,
|
| 61 |
n_ctx=2048,
|
| 62 |
-
n_threads=
|
| 63 |
-
|
| 64 |
-
use_mlock=False,
|
| 65 |
verbose=False
|
| 66 |
)
|
| 67 |
logger.info("[INFO] Model loaded successfully.")
|
| 68 |
|
| 69 |
# -----------------------------
|
| 70 |
-
# ✅
|
| 71 |
# -----------------------------
|
| 72 |
class Query(BaseModel):
|
| 73 |
question: str
|
| 74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
# -----------------------------
|
| 76 |
-
# ✅
|
| 77 |
# -----------------------------
|
| 78 |
-
LLM_TIMEOUT_SECONDS = int(os.getenv("LLM_TIMEOUT_SECONDS", "
|
| 79 |
-
logger.info(f"[INFO] LLM_TIMEOUT_SECONDS set to: {LLM_TIMEOUT_SECONDS} seconds
|
| 80 |
|
| 81 |
async def generate_llm_response(prompt: str):
|
| 82 |
"""Helper function to run synchronous LLM inference."""
|
| 83 |
-
response = llm(prompt, max_tokens=384, stop=["###"], temperature=0.2)
|
| 84 |
answer = response["choices"][0]["text"].strip()
|
| 85 |
if not answer:
|
| 86 |
raise ValueError("Empty response from LLM")
|
|
@@ -98,35 +96,41 @@ async def chat(query: Query):
|
|
| 98 |
reverse=True
|
| 99 |
)
|
| 100 |
|
| 101 |
-
for i, r in enumerate(search_results):
|
| 102 |
-
logger.info(f"[DEBUG] Chunk {i+1} | Score: {r['relevance_score']:.4f} | Snippet: {r['text'][:80]}...")
|
| 103 |
-
|
| 104 |
if not filtered:
|
| 105 |
logger.info("[RESPONSE] No relevant context found.")
|
| 106 |
return {
|
| 107 |
"question": question,
|
| 108 |
-
"context_used": "No relevant context found
|
| 109 |
-
"answer": "Sorry, I
|
| 110 |
}
|
| 111 |
|
| 112 |
context = filtered[0]["text"]
|
| 113 |
-
logger.info(f"[INFO] Using top context (score: {filtered[0]['relevance_score']:.4f})
|
| 114 |
|
| 115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
|
| 117 |
-
answer = "Sorry, I couldn't process your request right now. Please try again later
|
| 118 |
try:
|
| 119 |
answer = await asyncio.wait_for(generate_llm_response(prompt), timeout=LLM_TIMEOUT_SECONDS)
|
| 120 |
except asyncio.TimeoutError:
|
| 121 |
-
logger.warning(f"[TIMEOUT] LLM generation timed out after {LLM_TIMEOUT_SECONDS} seconds
|
| 122 |
-
answer = "Sorry,
|
| 123 |
except Exception as e:
|
| 124 |
-
logger.error(f"[ERROR] An unexpected error occurred during LLM generation: {str(e)}
|
| 125 |
-
answer = "Sorry,
|
| 126 |
|
| 127 |
-
logger.info(f"[RESPONSE] Answered
|
| 128 |
return {
|
| 129 |
"question": question,
|
| 130 |
"context_used": context,
|
| 131 |
"answer": answer
|
| 132 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import json
|
| 3 |
+
import asyncio
|
| 4 |
+
import logging
|
| 5 |
from fastapi import FastAPI, HTTPException
|
| 6 |
from pydantic import BaseModel
|
| 7 |
from llama_cpp import Llama
|
|
|
|
| 8 |
from app.policy_vector_db import PolicyVectorDB, ensure_db_populated
|
|
|
|
|
|
|
| 9 |
|
| 10 |
# -----------------------------
|
| 11 |
# ✅ Logging Configuration
|
|
|
|
| 23 |
return {"status": "✅ Server is running and ready."}
|
| 24 |
|
| 25 |
# -----------------------------
|
| 26 |
+
# ✅ Vector DB and Data Configuration
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
# -----------------------------
|
| 28 |
DB_PERSIST_DIRECTORY = "/app/vector_database"
|
| 29 |
+
# This file is generated by the create_granular_chunks.py script in the Dockerfile
|
| 30 |
CHUNKS_FILE_PATH = "/app/processed_chunks.json"
|
| 31 |
+
|
| 32 |
logger.info("[INFO] Initializing vector DB...")
|
| 33 |
db = PolicyVectorDB(
|
| 34 |
persist_directory=DB_PERSIST_DIRECTORY,
|
| 35 |
top_k_default=5,
|
| 36 |
+
relevance_threshold=0.35 # Start with a reasonable threshold for granular chunks
|
| 37 |
)
|
| 38 |
+
|
| 39 |
+
# This function now runs on startup to populate the DB if it's empty
|
| 40 |
if not ensure_db_populated(db, CHUNKS_FILE_PATH):
|
| 41 |
+
logger.warning("[WARNING] DB not populated. Chunks file may be missing or empty. RAG will not function correctly.")
|
| 42 |
else:
|
| 43 |
+
logger.info("[INFO] Vector DB is ready.")
|
| 44 |
|
| 45 |
# -----------------------------
|
| 46 |
+
# ✅ Load Your Re-Quantized GGUF Model
|
| 47 |
# -----------------------------
|
| 48 |
+
# Points to the compatible GGUF file downloaded in the Dockerfile
|
| 49 |
+
MODEL_PATH = "/app/phi1.5_dop_q4_k_m.gguf"
|
| 50 |
+
|
| 51 |
logger.info(f"[INFO] Loading GGUF model from: {MODEL_PATH}")
|
| 52 |
|
| 53 |
llm = Llama(
|
| 54 |
model_path=MODEL_PATH,
|
| 55 |
n_ctx=2048,
|
| 56 |
+
n_threads=2,
|
| 57 |
+
n_gpu_layers=0,
|
|
|
|
| 58 |
verbose=False
|
| 59 |
)
|
| 60 |
logger.info("[INFO] Model loaded successfully.")
|
| 61 |
|
| 62 |
# -----------------------------
|
| 63 |
+
# ✅ API Schemas
|
| 64 |
# -----------------------------
|
| 65 |
class Query(BaseModel):
|
| 66 |
question: str
|
| 67 |
|
| 68 |
+
class Feedback(BaseModel):
|
| 69 |
+
question: str
|
| 70 |
+
answer: str
|
| 71 |
+
feedback: str
|
| 72 |
+
|
| 73 |
# -----------------------------
|
| 74 |
+
# ✅ Endpoints
|
| 75 |
# -----------------------------
|
| 76 |
+
LLM_TIMEOUT_SECONDS = int(os.getenv("LLM_TIMEOUT_SECONDS", "45"))
|
| 77 |
+
logger.info(f"[INFO] LLM_TIMEOUT_SECONDS set to: {LLM_TIMEOUT_SECONDS} seconds.")
|
| 78 |
|
| 79 |
async def generate_llm_response(prompt: str):
|
| 80 |
"""Helper function to run synchronous LLM inference."""
|
| 81 |
+
response = llm(prompt, max_tokens=384, stop=["Instruct:", "Output:", "###"], temperature=0.2, echo=False)
|
| 82 |
answer = response["choices"][0]["text"].strip()
|
| 83 |
if not answer:
|
| 84 |
raise ValueError("Empty response from LLM")
|
|
|
|
| 96 |
reverse=True
|
| 97 |
)
|
| 98 |
|
|
|
|
|
|
|
|
|
|
| 99 |
if not filtered:
|
| 100 |
logger.info("[RESPONSE] No relevant context found.")
|
| 101 |
return {
|
| 102 |
"question": question,
|
| 103 |
+
"context_used": "No relevant context found.",
|
| 104 |
+
"answer": "Sorry, I could not find a relevant policy to answer that question. Please try rephrasing."
|
| 105 |
}
|
| 106 |
|
| 107 |
context = filtered[0]["text"]
|
| 108 |
+
logger.info(f"[INFO] Using top context (score: {filtered[0]['relevance_score']:.4f})")
|
| 109 |
|
| 110 |
+
# This prompt format matches how you fine-tuned Phi-1.5
|
| 111 |
+
prompt = f"""Instruct: Use the following context to answer the question.
|
| 112 |
+
Context: {context}
|
| 113 |
+
Question: {question}
|
| 114 |
+
Output:"""
|
| 115 |
|
| 116 |
+
answer = "Sorry, I couldn't process your request right now. Please try again later."
|
| 117 |
try:
|
| 118 |
answer = await asyncio.wait_for(generate_llm_response(prompt), timeout=LLM_TIMEOUT_SECONDS)
|
| 119 |
except asyncio.TimeoutError:
|
| 120 |
+
logger.warning(f"[TIMEOUT] LLM generation timed out after {LLM_TIMEOUT_SECONDS} seconds.")
|
| 121 |
+
answer = "Sorry, the request took too long to process. Please try again with a simpler question."
|
| 122 |
except Exception as e:
|
| 123 |
+
logger.error(f"[ERROR] An unexpected error occurred during LLM generation: {str(e)}")
|
| 124 |
+
answer = "Sorry, an unexpected error occurred while generating a response."
|
| 125 |
|
| 126 |
+
logger.info(f"[RESPONSE] Answered: {answer[:100]}...")
|
| 127 |
return {
|
| 128 |
"question": question,
|
| 129 |
"context_used": context,
|
| 130 |
"answer": answer
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
@app.post("/feedback")
|
| 134 |
+
async def collect_feedback(feedback: Feedback):
|
| 135 |
+
logger.info(f"[FEEDBACK] Question: {feedback.question} | Answer: {feedback.answer} | Feedback: {feedback.feedback}")
|
| 136 |
+
return {"status": "✅ Feedback recorded. Thank you!"}
|
app/policy_vector_db.py
CHANGED
|
@@ -14,7 +14,8 @@ class PolicyVectorDB:
|
|
| 14 |
self.persist_directory = persist_directory
|
| 15 |
self.client = chromadb.PersistentClient(path=persist_directory, settings=Settings(allow_reset=True))
|
| 16 |
self.collection_name = "neepco_dop_policies"
|
| 17 |
-
|
|
|
|
| 18 |
self.collection = None
|
| 19 |
self.top_k_default = top_k_default
|
| 20 |
self.relevance_threshold = relevance_threshold
|
|
@@ -38,18 +39,21 @@ class PolicyVectorDB:
|
|
| 38 |
|
| 39 |
existing_ids = set()
|
| 40 |
try:
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
|
|
|
|
|
|
|
|
|
| 44 |
|
| 45 |
new_chunks = [chunk for chunk in chunks if chunk.get('id') and str(chunk.get('id')) not in existing_ids]
|
| 46 |
|
| 47 |
if not new_chunks:
|
| 48 |
-
logger.info("No new chunks to add.")
|
| 49 |
return
|
| 50 |
|
| 51 |
logger.info(f"Adding {len(new_chunks)} new chunks to the vector database...")
|
| 52 |
-
batch_size =
|
| 53 |
for i in range(0, len(new_chunks), batch_size):
|
| 54 |
batch = new_chunks[i:i + batch_size]
|
| 55 |
texts = [chunk['text'] for chunk in batch]
|
|
@@ -58,7 +62,7 @@ class PolicyVectorDB:
|
|
| 58 |
metadatas = []
|
| 59 |
for chunk in batch:
|
| 60 |
meta = chunk.get('metadata')
|
| 61 |
-
if not meta:
|
| 62 |
meta = {"description": "General information chunk."}
|
| 63 |
metadatas.append(self._flatten_metadata(meta))
|
| 64 |
|
|
@@ -96,7 +100,7 @@ def ensure_db_populated(db_instance: PolicyVectorDB, chunks_file_path: str):
|
|
| 96 |
logger.error(f"Chunks file not found at {chunks_file_path}. Cannot populate DB.")
|
| 97 |
return False
|
| 98 |
|
| 99 |
-
#
|
| 100 |
with open(chunks_file_path, 'r', encoding='utf-8') as f:
|
| 101 |
chunks_to_add = json.load(f)
|
| 102 |
|
|
|
|
| 14 |
self.persist_directory = persist_directory
|
| 15 |
self.client = chromadb.PersistentClient(path=persist_directory, settings=Settings(allow_reset=True))
|
| 16 |
self.collection_name = "neepco_dop_policies"
|
| 17 |
+
# Using a faster, smaller model is recommended for better performance on CPU
|
| 18 |
+
self.embedding_model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2', device='cpu')
|
| 19 |
self.collection = None
|
| 20 |
self.top_k_default = top_k_default
|
| 21 |
self.relevance_threshold = relevance_threshold
|
|
|
|
| 39 |
|
| 40 |
existing_ids = set()
|
| 41 |
try:
|
| 42 |
+
# Check for existing IDs to avoid trying to re-insert them
|
| 43 |
+
existing_ids = set(collection.get(ids=[str(c['id']) for c in chunks if c.get('id')])['ids'])
|
| 44 |
+
except Exception:
|
| 45 |
+
logger.warning("Could not efficiently retrieve existing IDs. Proceeding with add, ChromaDB will handle duplicates.")
|
| 46 |
+
existing_ids = set()
|
| 47 |
+
|
| 48 |
|
| 49 |
new_chunks = [chunk for chunk in chunks if chunk.get('id') and str(chunk.get('id')) not in existing_ids]
|
| 50 |
|
| 51 |
if not new_chunks:
|
| 52 |
+
logger.info("No new chunks to add to the database.")
|
| 53 |
return
|
| 54 |
|
| 55 |
logger.info(f"Adding {len(new_chunks)} new chunks to the vector database...")
|
| 56 |
+
batch_size = 64 # Smaller batch size can be more stable for large embeddings
|
| 57 |
for i in range(0, len(new_chunks), batch_size):
|
| 58 |
batch = new_chunks[i:i + batch_size]
|
| 59 |
texts = [chunk['text'] for chunk in batch]
|
|
|
|
| 62 |
metadatas = []
|
| 63 |
for chunk in batch:
|
| 64 |
meta = chunk.get('metadata')
|
| 65 |
+
if not meta: # Handles cases where metadata is missing or empty
|
| 66 |
meta = {"description": "General information chunk."}
|
| 67 |
metadatas.append(self._flatten_metadata(meta))
|
| 68 |
|
|
|
|
| 100 |
logger.error(f"Chunks file not found at {chunks_file_path}. Cannot populate DB.")
|
| 101 |
return False
|
| 102 |
|
| 103 |
+
# This is the correct method for a standard .json file
|
| 104 |
with open(chunks_file_path, 'r', encoding='utf-8') as f:
|
| 105 |
chunks_to_add = json.load(f)
|
| 106 |
|
combined_context.jsonl
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"section": "Annexure A", "title": "Budget", "clause": 1, "items": ["Annual and revised estimates for capital expenditure", "Annual and revised estimates for operational expenditure", "Budget requirement for five-year plans"]}
|
| 2 |
+
{"section": "Annexure A", "title": "Plans", "clause": 2, "items": ["Annual Plans", "Five-Year Plans", "Long-Term Plans", "Corporate Plans", "Resource Mobilization Plans"]}
|
| 3 |
+
{"section": "Annexure A", "title": "Acquisitions", "clause": 3, "description": "Acquiring shares, stock, securities, etc., of other companies (except Govt. securities for short term and registered employee co-ops)"}
|
| 4 |
+
{"section": "Annexure A", "title": "Capital Estimates", "clause": 4, "items": ["Approval of feasibility/project/township reports exceeding ₹100 crore", "Capital expenditure above ₹50 crore not included in approved capital budget", "Deviation of more than 10% from Board/Govt.-approved component estimates"]}
|
| 5 |
+
{"section": "Annexure A", "title": "Procurement and Consultancy", "clause": 5, "items": ["Award of work/supply contracts > ₹100 crore", "Commitments for contracts > ₹100 crore", "Consultancy contracts > ₹2 crore", "Foreign consultancy/collaboration agreements (irrespective of value)", "Contract value variations beyond ₹100–200 crore based on contract size", "Idle charges/interest/hire charges > ₹5 crore", "Disputed claims > ₹5 crore"], "subcommittee_items": ["LOI/contracts between ₹100–200 crore", "BOQ/item substitutions/deviations > 25% but ≤ ₹200 crore", "Idle charges/claims between ₹2–10 crore", "Disputed claims between ₹2–10 crore"]}
|
| 6 |
+
{"section": "Annexure A", "title": "Personnel", "clause": 6, "items": ["Recruitment/promotion/VRS policy changes involving > ₹1 crore", "Creation of posts of DGM (E-7) and above", "Changes in pay structure/wages", "Policy matters on allowances, bonuses, amenities", "Policy changes, manpower budget"]}
|
| 7 |
+
{"section": "Annexure A", "title": "Accounts", "clause": 7, "items": ["Acceptance of annual/semiannual P&L", "Declaration of dividend"]}
|
| 8 |
+
{"section": "Annexure A", "title": "Power to Invest", "clause": 8, "description": "Investment of surplus funds > ₹25 crore beyond DPE guidelines"}
|
| 9 |
+
{"section": "Annexure A", "title": "Power to Borrow", "clause": 9, "description": "Borrowing for non-working capital purposes"}
|
| 10 |
+
{"section": "Annexure A", "title": "Write-Off", "clause": 10, "items": ["Store/equipment losses > ₹25 lakh", "Cash shortage > ₹50,000", "Port charges/demurrage > ₹50 lakh/year/project", "Demolition of temp buildings > ₹2.5 crore/project"]}
|
| 11 |
+
{"section": "Annexure A", "title": "General", "clause": 11, "items": ["Compensation (non-employees) > ₹25 lakh", "Sale/mortgage/alienation of company immovable property", "Donations/ex-gratia payments > ₹50,000 not covered by rules", "Settlement of unlisted claims > ₹10 lakh", "Land allotment policy to outside parties", "Any expenditure beyond objectives of the Corporation", "Disposal of the whole or substantial part of the undertaking"]}
|
| 12 |
+
{"section": "Financial Concurrence", "title": "Procedural Aspects", "clause": 1, "description": "Financial concurrence must precede approval by the final approving authority and be granted by a delegated officer in the F&A wing.\n", "remarks": ["Proposals for CMD/Board approval require prior concurrence by Project/Corporate Finance Head and Director (Finance). In absence of Director (Finance), ED (Finance) may concur.", "If the approving authority overrules concurring authority, reasons must be recorded and shared with next higher authority (not below CGM).", "Approvals without financial concurrence or reporting overruling are invalid, and approving authority is personally liable.", "Chairman can designate additional items requiring financial concurrence.", "Director (Finance) may allow sub-delegation of concurrence powers under HOF to subordinate officers for flexibility."]}
|
| 13 |
+
{"section": "Financial Concurrence", "title": "Matters Requiring Financial Concurrence", "clause": 2, "subclauses": [{"id": 2.1, "title": "Budget", "items": ["Capital & Revenue Budget", "Re-appropriation of Capital & Revenue Budget"]}, {"id": 2.2, "title": "Capital Investment", "items": ["New capital investment proposals", "Revised cost for approved capital schemes"]}, {"id": 2.3, "title": "Works, Purchases & Sales", "items": ["Works > ₹2 lakh and Purchases > ₹1 lakh", "Tender evaluation and acceptance", "Commercial negotiations with tenderers", "Contract term variations", "Scope, rate, and condition changes in concluded contracts", "Advance payments to contractors/suppliers (with/without security)", "Contract termination"]}, {"id": 2.4, "title": "Claims, Write-offs & Waivals", "items": ["Arbitration or court referrals", "Out-of-court settlements", "Compensation (non-statutory)", "Write-offs (losses, debts, advances)"]}, {"id": 2.5, "title": "Personnel", "items": ["Wage/emolument/benefit/service rule changes", "Employee advances beyond budget", "Ex-gratia and ad hoc payments outside rules"]}, {"id": 2.6, "title": "General", "items": ["Price fixation (products/services/discounts)", "Publicity scheme expenditure", "Contributions to external agencies", "Rent fixation and hiring arrangements", "Credit arrangements and advance payments to outsiders", "Disposal of surplus material", "Material procurement arrangements", "Imprest/cash handling approvals", "Changes in accounting system"]}]}
|
| 14 |
+
{"section": "Financial Concurrence", "title": "Matters Not Requiring Financial Concurrence", "clause": 3, "subclauses": [{"id": 3.1, "title": "Works and Purchases", "items": ["Works ≤ ₹2 lakh and purchases ≤ ₹1 lakh", "Vetted estimates based on Project SORs for WOs"]}, {"id": 3.2, "title": "Personnel", "items": ["Advances/benefits/payments covered under rules"]}, {"id": 3.3, "title": "General", "items": ["Legal/professional fees ≤ ₹50,000 per case", "Tender/public notice/recruitment publication expenses", "Advertisements ≤ ₹5 lakh", "Publicity expenses ≤ ₹1 lakh"]}]}
|
| 15 |
+
{"section": "Financial Concurrence", "title": "Financial Concurrence – Scope Limitations", "clause": 4, "description": "The following are excluded from the scope of financial concurrence and remain the responsibility of the initiating department:\n", "exclusions": ["Arithmetic accuracy of calculations", "Factual accuracy of technical assumptions", "Compliance with statutory and safety regulations"]}
|
| 16 |
+
{"section": "Financial Concurrence", "title": "Changes in Guidelines", "clause": 5, "description": "Director (Finance) may approve changes to these guidelines based on operational need, transaction nature, concurrence adequacy, or control sufficiency.\n"}
|
| 17 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 1, "description": "Delegation must align with Companies Acts (1956 & 2013), Articles of Association, Central Govt directives, internal policies, and approved budgets."}
|
| 18 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 2, "description": "Delegated powers can be exercised by higher-ranking officers. When used in absence of the designated officer, appropriate TOC/TEC levels must be followed."}
|
| 19 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 3, "description": "Tender Committees are required for financial matters above ₹10 Lakh, except in specific exempt cases. Prior concurrence is necessary when approver is part of committee."}
|
| 20 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 4, "description": "Delegated powers are subject to budget availability and project cost estimates as approved."}
|
| 21 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 5, "description": "Financial limits include the maximum amount and must cite financial concurrence and competent authority approval."}
|
| 22 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 6, "description": "Financial limits exclude taxes, duties, transit insurance, and transport costs."}
|
| 23 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 7, "description": "Financial concurrence must follow delegation hierarchy. Relaxation needs CMD approval."}
|
| 24 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 8, "description": "“Full powers” refer to CMD's authority and cannot exceed CMD’s delegated powers."}
|
| 25 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 9, "description": "In urgent cases, officers may exercise one level higher power (up to ED) with post-facto report within 7 days, only if senior officers are unreachable."}
|
| 26 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 10, "description": "Project proposals must obtain administrative approval from HOP before subordinate officers act under DOP."}
|
| 27 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 11, "description": "For Corporate Office, administrative approval for execution is given by Director (Technical) based on BOD-approved budget."}
|
| 28 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 12, "description": "Works outside approved DPR/FR need CMD approval after recommendation from Director (Technical)."}
|
| 29 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 13, "description": "Financial powers at project level require vetting by Finance Head not below Sr. Manager (F&A); otherwise, relaxation from Director (Finance) is needed."}
|
| 30 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 14, "description": "For matters under Section III, approval follows Section I procedures, exercised by rank-appropriate officers."}
|
| 31 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 15, "description": "DOP clarifications or interpretations must be referred to the Company Secretary."}
|
| 32 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 16, "description": "Imported items/services require prior admin approval for forex release and must follow RBI rules."}
|
| 33 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 17, "description": "Admin approval of both Director (Finance) & Director (Technical) required for forex ≥ USD 2500; only Director (Finance) for < USD 2500."}
|
| 34 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 18, "description": "Projects includes operational stations and under-construction/R&M/DPR/investigation sites."}
|
| 35 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 19, "description": "Contract packaging at Corporate Office to be finalized by a committee of HODs for CMD approval after Director (Technical) recommendation."}
|
| 36 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 20, "description": "Procurement must comply with MoF manuals; MoF manual prevails in case of conflict."}
|
| 37 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 21, "description": "Free-issue materials' cost to be included in project cost for bidder qualification and approval limits."}
|
| 38 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 22, "description": "Empaneled bidder contracts (via price discovery) are treated as open tender for approval powers."}
|
| 39 |
+
{"section": "Guidelines", "title": "Guidelines for Exercising the Delegation of Powers", "clause": 23, "description": "Corporate Office includes Shillong, Guwahati, New Delhi, and Kolkata establishments."}
|
| 40 |
+
{"section": "I", "title": "Technical sanction to detailed estimates", "clause": 1, "subclauses": [{"id": "a", "description": "Technical sanction to detailed estimates for works/Services/Supplies (for approved projects)", "delegation": {"D(T)": "Full power", "ED": "Full power", "CGM": "₹15 crore", "GM": "₹10 crore", "DGM": "₹5 crore", "Sr. M": "NIL"}}, {"id": "b", "description": "Technical sanction to detailed estimates for works/Services/Supplies (other than approved projects)", "delegation": {"D(T)": "Full power", "ED": "Full power", "CGM": "₹15 crore", "GM": "₹10 crore", "DGM": "₹5 crore", "Sr. M": "NIL"}}, {"id": "c", "description": "Technical sanction to detailed estimates for works/services/Supplies within approved budget in O&M plants and other offices excluding construction projects.", "delegation": {"D(T)": "Full power", "ED": "Full power", "CGM": "₹15 crore", "GM": "₹10 crore", "DGM": "₹5 crore", "Sr. M": "NIL"}}], "remarks": ["The delegation is for the components of a project or for sub packages constituting a component as provided in the approved project report (DPR)/ approved cost estimate/Budget/Annual Plan and as approved by the Board/Govt. of India.", "The tender specifications and Bill of Quantities shall be drawn by the Design Wing or any other group/groups considered essential by the Competent Authority.", "Quarterly report shall be submitted to D(T) indicating the package/sub-package where the variance between FR/DPR and the actual cost estimate of the package/sub-package is over 10% or ₹5 crore.", "Technical Sanction with Finance Concurrence to detailed estimates shall be treated as an approval of the estimates.", "For Administrative approval, refer Clause 9 - Guidelines for exercising the delegation of powers.", "The period of contract for service contracts shall not exceed 3 (Three) years. Extension in exceptional cases may be considered by the approving authority for a period of 6 (six) months or 50% of the contract period, whichever is less at the same rates, terms & conditions."]}
|
| 41 |
+
{"section": "I", "title": "Technical sanction to detailed estimates", "Clause": 2, "subclauses": [{"id": "a", "description": "Approval/ acceptance of lowest tender in respect of works including erection and composite works involving supply and erection/ installation/ commissioning and Non-consultancy services, etc. through open tender", "delegation": {"D(T)": "₹75 crore", "ED": "₹25 crore", "CGM": "₹12 crore", "GM": "₹9 crore", "DGM": "₹6 crore", "Sr. M": "NIL"}, "remarks": ["Tenders will be invited after approval of the work and technical sanction to detailed cost estimate is accorded.", "Enquiries are required to be issued for open & Limited tenders and published through various Government portals/ NEEPCO website only. In case of any special cases which may require release of short notices/ classifieds in Newspaper, the issuing authority may send the demand with justifications for obtaining approval of Competent authority.", "Acceptance of tender for award of work which is more than 20 % of the estimate shall be approved by the next higher authority.", "The Techno Commercial (TC) evaluation irrespective of nature of tendering shall be approved by the authority competent of approving the award. However, TC evaluation concerning tenders, award of which is within the power of BOD shall be approved by the CMD.", "In case the tender/ offer received is less than three, irrespective of nature of tendering, the tendering authority is to record the fact prior to opening of the tender/ offer. However, in case of e-tenders where the number of participants cannot be ascertained before opening the bids, the matter of number of bids received, if less than 3(three), shall be recorded immediately after opening of bids. Under such circumstances, approval of next higher authority is to be obtained for award of works. However, for TC evaluation, approval of next higher authority will not be necessary. Director (Tech) is the self-approving authority.", "EMD need not to be taken from IIMs/ IITs/ NITs/ IISc. / CBRI/ CPRI/ GSI/ CWPRS/ CWC and other Govt. Institutes/ agencies (excluding PSUs) irrespective of nature of tendering.", "In case of new projects where TEC is accorded, advance action for tendering wherever considered necessary shall be taken pending Investment Approval with the objective of coinciding the date of award with the zero date of the project. Such proposals including splitting of works into major packages for procurement shall require approval of the BOD with recommendation of CMD. However, letter of award (LoA) for tendered works shall be issued after obtaining Investment approval."]}, {"id": "b", "description": "Limited tender for works ( to be invited in case of urgency having limited source, in unavoidable circumstances with the approval of next higher authority. {Remarks under Clause 2(a) of Section-I shall be complied.}", "delegation": {"D(T)": "₹25 crore", "ED": "₹5 crore", "CGM": "₹2.5 crore", "GM": "₹1 crore", "DGM": "₹60 lakh", "Sr. M": "NIL"}, "remarks": ["Limited tender enquiries are those issued for requirements which do not fall under open tender category or which are required due to urgency or for specialized jobs and issued preferably to not less than five vendors based on past experience, or current offers from parties having credential for carrying out such nature of works and from the vendor lists maintained in the State Govt./ Central Govt./ PSUs.", "The number and names of parties selected for issue of limited tender enquiry shall be approved by the next higher authority. D(T) will be self approving authority."]}, {"id": "c", "description": "Award of work on single tender/ Nomination basis.", "delegation": {"D(T)": "₹10 crore", "ED": "₹2 crore", "CGM": "₹1.50 crore", "GM": "₹50 lakh", "DGM": "₹25 lakh", "Sr. M": "NIL"}, "remarks": "Urgency is required to be established and recorded and Finance Concurrence to be obtained. Quarterly reporting shall be made to the Audit Committee and the BOD."}, {"id": "d", "description": "Spot Work orders", "delegation": {"D(T)": "₹50 lakh", "ED": "₹30 lakh", "CGM": "₹10 lakh per annum", "GM": "₹40000 subject to a maximum ceiling of 3 lakh per annum", "DGM": "₹15000 subject to a maximum ceiling of 2 lakh per annum", "Sr. M": "NIL"}, "remarks": "The spot work orders are to be resorted to under extreme circumstances based on field requirement, essentially for works/services of short duration in nature. Deviations in spot work orders shall normally be avoided. However, in case of quantity deviations in a work order, the authority competent to award the work order inclusive of the above deviations (i.e. original value plus deviations) shall approve these deviations."}]}
|
| 42 |
+
{"section": "I", "title": "Technical sanction to detailed estimates", "clause": 3, "subclauses": [{"id": "a", "description": "Purchase of Materials/ equipment/ instruments/ T&P and accompanying spares etc. through (i) Open tender {Remarks under Clause 2(a) of Section-I shall be complied.}", "delegation": {"D(T)": "₹25 crore", "ED": "₹10 crore", "CGM": "₹1 crore", "GM": "₹60 lakh", "DGM": "₹20 lakh", "Sr. M": "₹10 lakh"}, "remarks": ["Tenders will be invited only after approval of the cost estimate.", "Tenders will be invited after approval of the work and technical sanction to detailed cost estimate is accorded.", "Enquiries are required to be issued for open & Limited tenders and published through various Government portals/ NEEPCO website only. In case of any special cases which may require release of short notices/ classifieds in Newspaper, the issuing authority may send the demand with justifications for obtaining approval of Competent authority.", "Acceptance of tender for award of work which is more than 20 % of the estimate shall be approved by the next higher authority.", "The Techno Commercial (TC) evaluation irrespective of nature of tendering shall be approved by the authority competent of approving the award. However, TC evaluation concerning tenders, award of which is within the power of BOD shall be approved by the CMD.", "In case the tender/ offer received is less than three, irrespective of nature of tendering, the tendering authority is to record the fact prior to opening of the tender/ offer. However, in case of e-tenders where the number of participants cannot be ascertained before opening the bids, the matter of number of bids received, if less than 3(three), shall be recorded immediately after opening of bids. Under such circumstances, approval of next higher authority is to be obtained for award of works. However, for TC evaluation, approval of next higher authority will not be necessary. Director (Tech) is the self-approving authority.", "EMD need not to be taken from IIMs/ IITs/ NITs/ IISc. / CBRI/ CPRI/ GSI/ CWPRS/ CWC and other Govt. Institutes/ agencies (excluding PSUs) irrespective of nature of tendering.", "In case of new projects where TEC is accorded, advance action for tendering wherever considered necessary shall be taken pending Investment Approval with the objective of coinciding the date of award with the zero date of the project. Such proposals including splitting of works into major packages for procurement shall require approval of the BOD with recommendation of CMD. However, letter of award (LoA) for tendered works shall be issued after obtaining Investment approval."]}, {"id": "b", "description": "Purchase of Materials/ equipment/ instruments/ T&P and accompanying spares etc. through (ii) limited tender {Remarks under Clause 2(b) of Section-I shall be complied.}", "delegation": {"D(T)": "₹15 crore", "ED": "₹1.5 crore", "CGM": "₹75 lakh", "GM": "₹40 lakh", "DGM": "₹15 lakh", "Sr. M": "NIL"}, "remarks": ["Tenders will be invited only after approval of the cost estimate.", "Limited tender enquiries are those issued for requirements which do not fall under open tender category or which are required due to urgency or for specialized jobs and issued preferably to not less than five vendors based on past experience, or current offers from parties having credential for carrying out such nature of works and from the vendor lists maintained in the State Govt./ Central Govt./ PSUs.", "The number and names of parties selected for issue of limited tender enquiry shall be approved by the next higher authority. D(T) will be self approving authority."]}, {"id": "c", "description": "Purchase of Materials/ equipment/ instruments/ T&P and accompanying spares etc. through (iii) Single tender / Nomination basis {Remarks under Clause 2(c) of Section-I shall be complied.}", "delegation": {"D(T)": "₹15 crore", "ED": "₹1.5 crore", "CGM": "₹75 lakh", "GM": "₹40 lakh", "DGM": "₹15 lakh", "Sr. M": "NIL"}, "remarks": ["Procurement to be made against Proprietary Article Certificate (PAC), for source standardization or in case of urgency. Proprietary Article Certificate or such other documents establishing proprietary nature of the article being supplied shall be approved by HOP.", "Source standardization or urgency should be established/ justified and recorded and Finance Concurrence to be obtained.", "The spot work orders are to be resorted to under extreme circumstances based on field requirement, essentially for works/services of short duration in nature. Deviations in spot work orders shall normally be avoided. However, in case of quantity deviations in a work order, the authority competent to award the work order inclusive of the above deviations (i.e. original value plus deviations) shall approve these deviations."]}]}
|
| 43 |
+
{"section": "I", "title": "Award of contract for supplies of maintenance spares, tools & plants, services, consumables such as chemicals, paints etc. for O&M of Plant", "clause": 4, "subclauses": [{"id": "a", "description": "From OEM/OES and/or authorized dealers of OEM/OES", "methods": [{"id": "i", "method": "Open tender", "delegation": {"D(T)": "₹50 crore", "ED": "₹10 crore", "CGM": "₹2 crore", "GM": "₹1.5 crore", "DGM": "₹75 lakh", "Sr. M": "₹50 lakh"}, "remarks_reference": "Remarks under Clause 2(a) of Section-I shall be complied."}, {"id": "ii", "method": "Through limited tender", "delegation": {"D(T)": "₹25 crore", "ED": "₹7.5 crore", "CGM": "₹1 crore", "GM": "₹75 lakh", "DGM": "₹50 lakh", "Sr. M": "₹25 lakh"}, "remarks_reference": "Remarks under Clause 2(b) of Section-I shall be complied."}, {"id": "iii", "method": "Single Tender/Nomination basis", "delegation": {"D(T)": "₹20 crore", "ED": "₹5 crore", "CGM": "₹75 lakh", "GM": "₹50 lakh", "DGM": "NIL", "Sr. M": "NIL"}, "remarks_reference": "Remarks under Clause 2(c) of Section-I shall be complied."}], "remarks": ["Before taking any procurement action, the O&M estimate is required to be approved by the Project Head (CGM/GM) at the beginning of the financial year and included in the annual procurement plan.", "Items to be procured should be earmarked even if on “broad head” in the O&M estimate.", "Quantity justification to be recorded.", "Procurement to be made against Proprietary Article Certificate (PAC), for source standardization or in case of urgency. Proprietary Article Certificate or such other documents establishing proprietary nature of the article being supplied shall be approved by HOP.", "Source standardization or urgency should be established/justified and recorded and Finance Concurrence to be obtained."]}, {"id": "b", "description": "From any other sources", "methods": [{"id": "i", "method": "Open tender", "delegation": {"D(T)": "₹40 crore", "ED": "₹6 crore", "CGM": "₹1 lakh", "GM": "₹50 lakh", "DGM": "₹25 lakh", "Sr. M": "₹10 lakh"}, "remarks_reference": "Remarks under Clause 2(a) of Section-I shall be compiled."}, {"id": "ii", "method": "Limited tender", "delegation": {"D(T)": "₹20 crore", "ED": "₹3 crore", "CGM": "₹50 lakh", "GM": "₹30 lakh", "DGM": "₹15 lakh", "Sr. M": "NIL"}, "remarks_reference": "Remarks under Clause 2(b) of Section-II shall be compiled."}, {"id": "iii", "method": "Single Tender/Nomiation basis", "delegation": {"D(T)": "₹15 crore", "ED": "₹1 crore", "CGM": "₹25 lakh", "GM": "₹15 lakh", "DGM": "NIL", "Sr. M": "NIL"}, "remarks_reference": "Remarks under Clause 2(c) of Section-II shall be compiled."}], "remarks": ["Before taking any procurement action, the O&M estimate is required to be approved by the Project Head (CGM/GM) at the beginning of the financial year and included in the annual procurement plan.", "Items to be procured should be earmarked even if on \"broad head\" in the O&M estimate.", "Quantity justification to be recorded."]}]}
|
| 44 |
+
{"section": "I", "title": "Award of contract for purchase of spares for Equipment / Instruments / T&P etc. (locations other than O&M project)", "clause": 5, "subclauses": [{"id": "a", "title": "On open tender", "description": "From manufacturer of original equipment or their authorized dealers", "delegation": {"D(T)": "₹5 Crore", "ED": "₹1 Crore", "CGM": "₹50 Lakh", "GM": "₹30 Lakh", "DGM": "₹20 Lakh", "Sr. M": "₹10 Lakh"}, "remarks": ["Remarks under Clause 2(a) of Section-I shall be complied.", "Tenders will be invited by the respective Contracts Wing of the Corporation only after approval of the cost estimate.", "Proprietary Article Certificate (PAC) shall be approved by HOP not below the rank of GM", "Source standardization or urgency should be established/justified and recorded. Finance Concurrence is to be obtained.", "In cases other than procurement through open tender, ground of urgency is to be recorded."]}, {"id": "b", "title": "Limited tender", "delegation": {"D(T)": "₹2 Crore", "ED": "₹50 Lakh", "CGM": "₹25 Lakh", "GM": "₹20 Lakh", "DGM": "₹10 Lakh", "Sr. M": "₹5 Lakh"}, "remarks": ["Remarks under Clause 2(b) of Section-I shall be complied.", "Tenders will be invited by the respective Contracts Wing of the Corporation only after approval of the cost estimate.", "Proprietary Article Certificate (PAC) shall be approved by HOP not below the rank of GM", "Source standardization or urgency should be established/justified and recorded. Finance Concurrence is to be obtained.", "In cases other than procurement through open tender, ground of urgency is to be recorded."]}, {"id": "c", "title": "Single tender / Nomination basis including PAC and Source Standardization", "delegation": {"D(T)": "₹1 Crore", "ED": "₹50 Lakh", "CGM": "₹25 Lakh", "GM": "₹10 Lakh", "DGM": "₹5 Lakh", "Sr. M": null}, "remarks": ["Remarks under Clause 2(c) of Section-I shall be complied.", "Tenders will be invited by the respective Contracts Wing of the Corporation only after approval of the cost estimate.", "Proprietary Article Certificate (PAC) shall be approved by HOP not below the rank of GM", "Source standardization or urgency should be established/justified and recorded. Finance Concurrence is to be obtained.", "In cases other than procurement through open tender, ground of urgency is to be recorded."]}, {"id": "d", "title": "Single tender / Nomination basis on purchases from Govt. Department / Undertakings", "delegation": {"D(T)": "₹1 Crore", "ED": "₹50 Lakh", "CGM": "₹25 Lakh", "GM": "₹10 Lakh", "DGM": "₹5 Lakh", "Sr. M": null}, "remarks": ["Powers are to be exercised after consideration of all factors like urgency, specialized jobs, budget availability, rate reasonableness, and after ascertaining that the same rates are being charged by suppliers/manufacturers etc. from other Government Departments."]}, {"id": "e", "title": "Local / spot purchases of materials on grounds of urgency", "delegation": {"D(T)": "₹40 Lakh", "ED": "₹30 Lakh", "CGM": "₹10 Lakh per annum", "GM": "₹40,000 subject to a maximum ceiling of ₹3 Lakh per annum", "DGM": "₹15,000 subject to a maximum ceiling of ₹2 Lakh per annum", "Sr. M": null}, "remarks": ["Where dedicated stores do not exist, proper stock register for receipts and issues against such purchases shall be maintained.", "Spot purchase should not form a part of a regular purchase and the same shall be adopted only for immediate requirement / consumption.", "The list of items to be bought, with estimated price shall be approved by the competent authority, as per delegation alongside.", "Purchase will be made after a market survey and determination of price reasonableness, which shall be recorded accordingly.", "Purchases beyond Rs.2 Lac shall be made by a committee comprising one member each from the indenting department, Proc. Deptt. and Finance. The Committee officials shall comprise of at least one officer at E-6 level and rest not below level of E-1."]}]}
|
| 45 |
+
{"section": "I", "title": "Procurement of HSD /Petrol/Lubricants from PSU oil companies/their Authorized fuel pump including rate contracts.", "clause": 6, "subclauses": [{"id": "a", "description": "Procurement of HSD /Petrol/Lubricants from PSU oil companies/their Authorized fuel pump including rate contracts.", "delegation": {"D(T)": "₹5 crore", "ED": "₹2 crore", "CGM": "₹75 lakh", "GM": "NIL", "DGM": "NIL", "Sr. M": "NIL"}, "reference": "Delegation shall be limited to procurement per project /plant/ Corporate Office /Other locations during a year."}]}
|
| 46 |
+
{"section": "I", "title": "Purchase of cement/steel", "clause": 7, "subclauses": [{"id": "a", "title": "Open Tender", "description": "Remarks under Clause 2(a) of Section-I shall be complied.", "delegation": {"D(T)": "₹25 crore", "ED": "₹10 crore", "CGM": "₹3 crore", "GM": "₹2 crore", "DGM": "₹1 crore", "Sr. M": "NIL"}}, {"id": "b", "title": "Limited Tender", "description": "Remarks under Clause 2(b) of Section-I shall be complied.", "delegation": {"D(T)": "₹15 crore", "ED": "₹5 crore", "CGM": "₹50 lakh", "GM": "₹35 lakh", "DGM": "₹25 lakh", "Sr. M": "NIL"}}, {"id": "c", "title": "Single Tender / Nomination Basis", "description": "Remarks under Clause 2(c) of Section-I shall be complied.", "delegation": {"D(T)": "₹5 crore", "ED": "₹1 crore", "CGM": "₹25 lakh", "GM": "₹15 lakh", "DGM": "₹10 lakh", "Sr. M": "NIL"}}, {"id": "d", "title": "Procurement of Steel in case of MOU with PSU Steel Companies", "delegation": {"D(T)": "₹50 crore", "ED": "₹25 crore", "CGM": "₹10 crore", "GM": null, "DGM": null, "Sr. M": null}}], "remarks_cement": ["CEMENT", "Cement will be procured by MM Wing through open tenders to be invited from reputed manufacturers having BIS registration and fulfilling production and other standard quality, commercial and financial requirements. Accordingly, project wise requirement for 6 (six) months with monthly breakup shall be submitted by respective projects.", "On finalization of tender, procurement shall be done from the lowest bidder in phased manner depending on project requirement.", "The qualified bidders may be empaneled by the MM Wing with the approval of Director (Tech) for a maximum period of 2 (two) years for the purpose of procurement.", "In the event of failure on the part of L1 bidder to fulfill the supply obligation, cement may be procured from empaneled bidders at L1 rate or at lowest rate arrived through fresh price offers invited from empaneled bidders. Approval on award shall be treated in terms of open tender delegations.", "Cement may also be procured at project level in case of emergency or crisis of cement at Project site or when the requirement is small (maximum 100 MT in each case) from empaneled bidders or their authorized dealers at L1 rate arrived through fresh price offers. If not available at site, procurement from other locally available BIS-conforming sources is permitted with proper justification and codal formalities."], "remarks_steel": ["STEEL", "Steel will be procured by MM Wing from manufacturers empaneled for maximum period of 2 (two) years through open tenders from reputed manufacturers having BIS registration and fulfilling standard requirements. List of empaneled vendors approved by Director (Tech).", "Project-wise requirement for 6 (six) months with monthly breakup shall be submitted by projects.", "Procurement as per project needs at L1 price invited from empaneled vendors. Approval shall be treated under open tender limits.", "Steel items not manufactured by empaneled vendors (e.g. angles, flats, etc.) may be procured through open/limited tenders conforming to standards.", "MOU shall be signed with CMD’s approval. Post-MOU, material procurement will be as per above delegation."]}
|
| 47 |
+
{"section": "I", "title": "Purchase of explosives", "clause": 8, "subclauses": [{"id": "a", "description": "Open tender {Remarks under Clause 2(a) of Section-I shall be complied}", "delegation": {"D(T)": "₹2 crore", "ED": "₹50 lakh", "CGM": "₹25 lakh", "GM": "₹15 lakh", "DGM": "₹10 lakh", "Sr. M": "NIL"}}, {"id": "b", "description": "Limited tender {Remarks under Clause 2(b) of Section-I shall be complied}", "delegation": {"D(T)": "₹60 lakh", "ED": "₹40 lakh", "CGM": "₹20 lakh", "GM": "₹15 lakh", "DGM": "₹7 lakh", "Sr. M": "NIL"}}, {"id": "c", "description": "Single Tender/Nomination basis {Remarks under Clause 2(c) of Section-I shall be complied}", "delegation": {"D(T)": "₹40 lakh", "ED": "₹25 lakh", "CGM": "₹10 lakh", "GM": "₹7 lakh", "DGM": "₹5 lakh", "Sr. M": "NIL"}}], "remarks": ["Explosives will be procured by MM Wing through open tenders to be invited from reputed manufacturers/authorized dealers fulfilling production and other standard quality, commercial and financial requirements. Accordingly, project-wise yearly requirement with monthly breakup shall be submitted by respective projects.", "On finalization of tender, procurement shall be done from the lowest bidder in phased manner depending on project requirement.", "For limited tender, reasons are to be recorded before approval of the next higher authority. Dir (Tech) shall be the self-approving authority.", "During urgency, explosives may be procured on offer basis for limited quantity from reputed manufacturers/dealers."]}
|
| 48 |
+
{"section": "I", "title": "Handling & transportation of materials including clearances.", "clause": 9, "subclauses": [{"id": "a", "description": "Open Tender {Remarks under Clause 2(a) of Section-I shall be complied.}", "delegation": {"D(T)": "Full Power", "ED": "₹3 Crore", "CGM": "₹70 Lakh", "GM": "₹15 Lakh", "DGM": "₹3 Lakh", "Sr. M": "---"}}, {"id": "b", "description": "Limited Tender {Remarks under Clause 2(b) of Section-I shall be complied.}", "delegation": {"D(T)": "Full Power", "ED": "₹60 Lakh", "CGM": "₹20 Lakh", "GM": "₹2 Lakh", "DGM": "₹1 Lakh", "Sr. M": "--"}}], "remarks": ["Empanelment of transporters may be made through open tenders for a maximum period of 2 (two) years.", "Price offers shall be invited from the empaneled transporters to fix up the rates of transportation of different materials, for different destinations.", "Engagement of numbers of transporters may be decided based on the quantity of materials and permissible time for the same.", "Transportation contracts shall be made as per project requirements at L1 price arrived at through invitation of price offers from the empaneled transporters. Approval on award shall be treated in terms of delegation of this clause."]}
|
| 49 |
+
{"section": "I", "title": "Canalised imports through Public Sector Units", "clause": 10, "subclauses": [{"id": "a", "description": "Canalised imports through Public Sector Units", "delegation": {"D(T)": "₹5 crore", "ED": "₹3 crore", "CGM": "₹1 crore", "GM": "₹75 lakh", "DGM": "₹50 lakh", "Sr. M": "---"}, "remarks": ["Estimate is to be approved.", "Formal requisition from the project authority is required."]}]}
|
| 50 |
+
{"section": "I", "title": "Grant of extension of time for works/supplies/services/consultancies with or without levy of penalty", "clause": 11, "subclauses": [{"id": "a", "description": "Grant of extension of time for works/supplies/services/consultancies with or without levy of penalty", "delegation": {"D(T)": "Full power", "ED": "Up to 50% of original time or 18 months, whichever is less, for contracts/orders awarded by ED and full power for contracts/orders approved by lower authority", "CGM": "Up to 50% of original time or 18 months, whichever is less, for contracts/orders awarded by CGM and full power for contracts/orders approved by lower authority", "GM": "---", "DGM": "---", "Sr. M": "---"}, "remarks": ["In case of non-applicability of Force Majeure, extension may be granted subject to the following conditions", "That the works/supplies/services/consultancies are still required by the project within the extended time.", "That the tender for the works/supplies/services/consultancies has not been accepted for higher value on account of earlier execution via re-tender.", "Market economics suggest the benefit in time extension.", "These powers shall be exercised with concurrence of Finance."]}, {"id": "b", "description": "Grant of extension of time for works/supplies/services/consultancies with reduction/waiver of penalty", "delegation": {"D(T)": "Full power", "ED": "Full power for order issued by authority below ED", "CGM": "---", "GM": "---", "DGM": "---", "Sr. M": "---"}, "remarks": ["In case of non-applicability of Force Majeure, extension may be granted subject to the following conditions", "That the works/supplies/services/consultancies are still required by the project within the extended time.", "That the tender for the works/supplies/services/consultancies has not been accepted for higher value on account of earlier execution via re-tender.", "Market economics suggest the benefit in time extension.", "These powers shall be exercised with concurrence of Finance."]}, {"id": "c", "description": "Provisional extension of time", "delegation": "Provisional extension will be granted by HOP/HOD with intimation to concerned ED and contract awarding authority", "remarks": ["The reasons for delay in completion of works/supplies/services may be diverse and may require time for final admissibility.", "Provisional extension of time with or without liquidated damages shall be considered where delay reasons exist, to protect the rights of the corporation.", "If LD is applicable, the corporation's intent to recover LD should be indicated while granting provisional extension."]}]}
|
| 51 |
+
{"section": "I", "title": "Repeat orders", "clause": 12, "subclauses": [{"id": "a", "description": "Repeat orders may be placed on the same party on the same rates, terms and conditions as stipulated in the original order with finance concurrence against previous orders placed on open or limited tender basis, or single tender involving proprietary Article certificate or source standardization.", "delegation": {"D(T)": "Up to 50% of the original order value approved by him or his lower authority", "ED": "Up to 50% of the original order value approved by him or his lower authority", "CGM": "Up to 50% of the original order value approved by him or his lower authority", "GM": "Up to 50% of the original order value approved by him or his lower authority", "DGM": "Up to 50% of the original order value approved by him or his lower authority", "Sr. M": "--"}, "remarks": ["Full justification to be recorded.", "Repeat orders may be placed on the same party on the same rates, terms and conditions as stipulated in the original order with finance concurrence against previous orders placed on open or limited tender basis, or single tender involving proprietary Article certificate or source standardization subject to the following", "i) The normal processing of the case is likely to delay the procurement and adversely affect the work.", "ii) The date of repeat order will not be more than three months after completion of the earlier order.", "iii) A reasonable assessment and certification by the purchasing authority that there has been no downward trend in prices.", "iv) The prices against earlier order were not escalated to compensate for earlier deliveries.", "v) In the event the repeat order envisages different location for delivery/work, suitable adjustment in price shall be considered to cover this aspect. Suitable enhancement on account of price variation over the base price of the original order may also be considered in case the delivery in repeat order is later than the delivery in the original order.", "vi) The award value of repeat order shall not exceed ₹1 crore.", "vii) This item of delegation does not apply, to cases where repeat order option has been provided for in the original order. In such cases, the authority empowered to approve the repeat order option shall be the same as competent to approve the original award.", "viii) If the original order is for single unit (which is indivisible), the repeat order can be for one single unit."]}]}
|
| 52 |
+
{"section": "I", "title": "Award of work (Deposit work) to Govt. Deptt. / Autonomous bodies of the Govt./Govt. Agencies/ Public Sector Undertakings", "clause": 13, "subclauses": [{"id": "a", "description": "Award of work (Deposit work) to Govt. Deptt. / Autonomous bodies of the Govt./Govt. Agencies/ Public Sector Undertakings", "delegation": {"D(T)": "₹20 Crore", "ED": "₹10 Crore", "CGM": "₹2 Crore", "GM": "₹1.5 Crore", "DGM": "---", "Sr. M": "---"}, "remarks": ["Reasons for resorting to Deposit Work should be recorded.", "Powers are to be exercised by the ED/HOP/HOD not below the rank of E-8 after considering all factors like urgency, specialized jobs, availability of budget, reasonableness of rates and after ascertaining that the same rates are being charged from other Government departments."]}]}
|
| 53 |
+
{"section": "II", "title": "Interview List Preparation", "clause": 1, "subclauses": [{"id": "a", "description": "List of candidates to be called for interview on induction/recruitment."}], "remarks": [{"Extent of Power": "Full Powers"}, {"Applies to": "All Executives, Non-Executives"}, {"Officials Authorized": "D (P); HOD (HR) not below the grade of E-8 in consultation with D (P)"}]}
|
| 54 |
+
{"section": "II", "title": "Medical Board Constitution", "clause": 2, "subclauses": [{"id": "a", "description": "Constitution of Medical Board for examining the fitness for service of new appointees."}], "remarks": [{"Extent of Power": "Full Powers"}, {"Officials Authorized": "CMO"}]}
|
| 55 |
+
{"section": "II", "title": "Sanction of Recruitment & Promotion Expenditure", "clause": 3, "subclauses": [{"id": "a", "description": "Sanction of expenditure on Recruitment & Promotion (DPC Expenses) including venue and other expenditure related matters."}], "remarks": [{"Extent of Power": "Full Powers (₹2,00,000/- per event)"}, {"Officials Authorized": "D (P); HOD (HR) not below the grade of E-8"}]}
|
| 56 |
+
{"section": "II", "title": "Extension of Joining Time", "clause": 4, "subclauses": [{"id": "a", "description": "Extension of time for joining the post on initial appointment."}], "remarks": [{"Extent of Power": "Full Powers"}, {"Applies to": "All Executives, Non-Executives"}, {"Officials Authorized": "D (P); HOD (HR) not below the grade of E-8"}]}
|
| 57 |
+
{"section": "II", "title": "Grant of TA to Interview Candidates", "clause": 5, "subclauses": [{"id": "a", "description": "Grant of TA to candidates called for interview."}], "remarks": [{"Extent of Power": "Full Powers in accordance with TA Rules"}, {"Officials Authorized": "HOD (HR) not below the grade of E-8"}]}
|
| 58 |
+
{"section": "II", "title": "Probation Completion and Extension", "clause": 6, "subclauses": [{"id": "i", "description": "Approval of satisfactory completion of period of probation on Promotion and Recruitment (wherever applicable)."}, {"id": "ii", "description": "Extension of Probation on the basis of the Report."}], "remarks": [{"Subclause (i)": [{"E-8 to E-9": "Full Powers - CMD"}, {"E-5 to E-7": "Full Powers - Director"}, {"E-1 to E-4 & Non-Executives": "Full Powers - Concerned HOP/HOD not below the grade of E-8"}]}, {"Subclause (ii)": ["Same authorities as Subclause (i)"]}, {"Note": "Orders to be issued by the HR"}]}
|
| 59 |
+
{"section": "II", "title": "Termination of service on account of unsatisfactory performance during probation", "clause": 7, "extent_of_power": "Full Powers", "authority": "D(P) in consultation with FD", "remarks": "Orders to be issued by the HR"}
|
| 60 |
+
{"section": "II", "title": "Forwarding of applications of the employees for outside Employment", "clause": 8, "extent_of_power": [{"Executives (E-1 to E-9)": "Full Powers"}, {"Non-Executives": "Full Powers"}], "authority": [{"Executives": "D(P) in consultation with FD"}, {"Non-Executives": "HOD (HR) not below E-8 in consultation with D(P)"}], "remarks": "With recommendation of concerned HOD/HOP"}
|
| 61 |
+
{"section": "II", "title": "Acceptance of Resignation of employees including waiver of notice period", "clause": 9, "extent_of_power": [{"Executives up to E-8": "Full Powers"}, {"Non-Executives": "Full Powers"}], "authority": [{"Executives": "D(P) on recommendation of FD"}, {"Non-Executives": "D(P)"}], "remarks": "Orders to be issued by HR"}
|
| 62 |
+
{"section": "II", "title": "Termination of the Services of Employee", "clause": 10, "extent_of_power": "Full Powers up to E-8", "authority": "D(P) on recommendation of FD", "remarks": "Orders to be issued by HR"}
|
| 63 |
+
{"section": "II", "title": "Transfer of Bond in case of Trainees", "clause": 11, "extent_of_power": "Full Powers", "authority": "D(P)"}
|
| 64 |
+
{"section": "II", "title": "Constitution of Departmental Promotion Committee", "clause": 12, "extent_of_power": [{"Executives": "Full Powers"}, {"Non-Executives including Supervisors": "Full Powers"}], "authority": [{"Executives": "D(P) in consultation with FD"}, {"Non-Executives": "HOD (HR) not below E-8 in consultation with D(P)"}]}
|
| 65 |
+
{"section": "II", "title": "Approval for change of Home Town (Allowed only once in entire service period)", "clause": 13, "extent_of_power": [{"Corporate Office (Shillong)": "Full Powers"}, {"Other locations": "Full Powers"}], "authority": [{"Shillong": "HOD (HR) not below the grade of E-8"}, {"Other locations": "Concerned HOP/HOD not below E-8"}], "remarks": "Orders to be issued by the Project HR"}
|
| 66 |
+
{"section": "II", "title": "Permission for employees to undertake courses/examinations/classes outside office hours for up to 3 years", "clause": 14, "extent_of_power": "All Employees", "authority": "D(P)", "remarks": "Permission shall not confer any right to the employee in any manner"}
|
| 67 |
+
{"section": "II", "title": "Nomination of employees to attend seminars/conferences/workshops/training in India (short term, max 2 weeks)", "clause": 15, "extent_of_power": [{"Executives E-7 to E-9": "Full Powers"}, {"Executives E-1 to E-6 and Non-Executives": "Full Powers"}], "authority": [{"E-7 to E-9": "D(P) in consultation with FD"}, {"E-1 to E-6 & Non-Executives": "HOD (HR) not below E-8 with recommendation of concerned HOP/HOD"}]}
|
| 68 |
+
{"section": "II", "title": "Permission for delivering lectures/functioning as Faculty/Committee Member in outside orgs and accepting fees/honoraria", "clause": 16, "extent_of_power": [{"Executives E-1 to E-9": "Full Powers"}, {"All Non-Executives & Supervisors": "Full Powers"}], "authority": [{"Executives": "Director"}, {"Non-Executives": "HOD (HR) not below E-8"}]}
|
| 69 |
+
{"section": "II", "title": "Insurance", "clause": 17, "sub_clauses": {"a": {"title": "Insurance of personnel as per approved policy and guidelines", "extent_of_power": "Full Powers", "authority": "D(P)"}, "b": {"title": "Directors and Officers Liability Insurance", "extent_of_power": "Full Powers", "authority": "D(P)"}, "c": {"title": "Public Liability Insurance", "extent_of_power": "Full Powers", "authority": "D(P)"}}}
|
| 70 |
+
{"section": "II", "title": "Transfer of Employees", "clause": 18, "extent_of_power": [{"E-8/E-9/HOP/HOD": "CMD"}, {"Executives E-1 to E-7": "Full Power"}, {"All Non-Executives and Supervisors": "Full Power"}], "authority": [{"Executives E-1 to E-7": "D(P) on recommendation of FD"}, {"Non-Executives and Supervisors": "D(P) on recommendation of FD"}], "remarks": "Quarterly report to be submitted to CMD for his information"}
|
| 71 |
+
{"section": "II", "title": "Panel approving authority for recruitment", "clause": 19, "extent_of_power": "E-7 and below", "authority": "D(P)"}
|
| 72 |
+
{"section": "III", "title": "Land Accquisition Powers", "clause": 1, "subclauses": [{"id": "a", "description": "Powers to acquire land and file requisition with Land Acquiring Authorities", "Extent of Power": "Full Powers", "Officials Authorised": "Director (P) for Corporate Office (Guwahati/Shillong/New Delhi/Kolkata) ED in charge of Project/HOP not below the rank of E-8", "remarks": ["Subject to provision in the Capital budget.", "Subject to the same being- - As per requirements of the project. - Within the approved project estimates, and within the award, if any, for payment of compensation.", "Wherever purchase/acquisition from private entities becomes necessary, the process shall be routed through concerned Government authorities.", "Land acquisition shall be processed by the HOD/HOP of the respective site/location in association/consultation with the Corporate Land Section."]}]}
|
| 73 |
+
{"section": "III", "title": "Hiring of Accommodation and allowing the use of Company building etc. on rent", "clause": 2, "subclauses": [{"id": "a", "description": "Hiring of Accommodation (Office/ Field Hostel/ Transit Camp/ Guest House/ Storage Space)", "Extent of Power": [{"Corporate Office (Guwahati/Shillong/Kolkata/New Delhi/Tezpur)": "Full Powers"}, {"Power Stations / Projects / S&I": [{"D(P) in consultation with D(F)": "Full Powers"}, {"Concerned ED": "Up to a cost of monthly hiring of ₹1.00 Lakh for each case"}]}], "Officials Authorised": ["D(P) in consultation with D(F)", "Concerned ED (for up to ₹1.00 Lakh per month per case)"], "remarks": ["Full powers in respect of Corporate Office locations.", "For Power Stations / Projects / S&I locations, full powers rest with D(P) in consultation with D(F).", "Concerned ED has powers up to a cost limit of ₹1.00 Lakh per month for each case."]}, {"id": "b", "description": "To allow the use of Company building etc. on rent", "Extent of Power": "Full Powers", "Officials Authorised": ["HOP not below the grade of E-8 for projects/plants", "Respective HOD i/c (Estate Service) not below the rank of E-8 for CO (Guwahati/Shillong/New Delhi/Kolkata)"], "remarks": ["All legal formalities required to lease etc. must be strictly adhered to."]}]}
|
| 74 |
+
{"section": "III", "title": "Repair and Maintenance of Buildings / Hired Accommodation (Office/ Field Hostel/ Transit Camp/ Guest House/ Storage Space)", "clause": 3, "subclauses": [{"id": "a", "description": "Corporate Office (Guwahati/Shillong/Kolkata/New Delhi)", "Extent of Power": "Full Powers", "Officials Authorised": ["ED"], "remarks": ["HOD i/c (Estate Service) not below the grade of E-8 for respective locations."]}, {"id": "b", "description": "Projects/Power Stations/ S&I", "Extent of Power": [{"ED": "Full Powers"}, {"HOP not below the grade of E-8": "₹50 Lakh p.a."}], "Officials Authorised": ["ED", "HOP not below the grade of E-8 (for limit of ₹50 Lakh p.a.)"]}]}
|
| 75 |
+
{"section": "III", "title": "Purchase of furniture, equipment, furnishing, fixtures, appliances, crockeries, DTH Entertainment facility including recharges for offices and other establishments including Guest House/ Transit Camp / Canteen", "clause": 4, "subclauses": [{"id": "a", "description": "Purchase for all locations", "Extent of Power": [{"D(P)/D(T)": "Full Powers"}, {"ED": "₹25 Lakhs per annum"}, {"CGM/HOP/HOD not below the grade of E-8": "₹20 Lakhs per annum"}], "Officials Authorised": ["D(P)/D(T)", "ED", "CGM/HOP/HOD not below the grade of E-8"]}]}
|
| 76 |
+
{"section": "III", "title": "Purchase and upgradation, expansion of IT and Communication Infrastructure including Hardware, Software, peripherals, consumables etc.", "clause": 5, "subclauses": [{"id": "a", "description": "Purchase and upgradation of IT and Communication Infrastructure", "Extent of Power": [{"D(T)": "Full Powers"}, {"ED (IT)": "₹50 Lakh"}, {"HOD in the grade of E-8 for Guwahati, Shillong, Kolkata, New Delhi / HOP in the grade of E-8 for projects/stations": "₹25 Lakh p.a."}], "Officials Authorised": ["D(T)", "ED (IT)", "HOD in the grade of E-8 (for respective locations)", "HOP in the grade of E-8 (for projects/stations)"], "remarks": ["This power shall be exercised in consultation with ED (IT).", "Procurement of computer hardware and software shall be reported to the HOD (IT) at C.O. periodically for record purpose."]}]}
|
| 77 |
+
{"section": "III", "title": "Repair, Maintenance and Upkeep Activities", "clause": 6, "subclauses": [{"id": "a", "description": "Repair, Maintenance and upkeep of furniture and fixtures etc. at Projects/Stations/Offices/Site", "Extent of Power": [{"HOP/HOD not below the grade of E-8": "Full Powers"}, {"Coordinator not below the grade of E-7 / DGM (HR) Admn at Shillong": "₹5 lakh p.a."}], "Officials Authorised": ["HOP / HOD not below the grade of E-8", "Coordinator not below the grade of E-7 / DGM (HR) Admn at Shillong"]}, {"id": "b", "description": "Repair, Maintenance and upkeep of Office equipment etc.", "Extent of Power": "Full Powers", "Officials Authorised": ["HOP / HOD not below the grade of E-8"]}, {"id": "c", "description": "Repair, Maintenance and upkeep of I.T./other peripheral devices/Communication/Network systems etc.", "Extent of Power": "Full Powers", "Officials Authorised": ["HOD (ITS) (not below the rank of E-8) in C.O (Guwahati/Shillong)", "HOP for Projects/Plants (not below the rank of E-8)"]}]}
|
| 78 |
+
{"section": "III", "title": "Hiring of Office Equipment, Furniture & Fixtures, Appliances (including fans, water coolers etc.)", "clause": 7, "subclauses": [{"id": "a", "description": "Hiring of office equipment, furniture, fixtures, and appliances including fans and water coolers", "Extent of Power": ["Full powers", "₹70,000 p.a."], "Officials Authorised": ["HOP/HOD (CA/RA) not below E-8 for projects and offices", "CGM (HR) for Corporate Office", "Coordinator not below the rank of E-7"]}]}
|
| 79 |
+
{"section": "III", "title": "Hiring of Office Equipment, Furniture & Fixtures, Appliances (including fans, water coolers etc.)", "clause": 7, "subclauses": [{"id": "a", "description": "Hiring of office equipment, furniture, fixtures, and appliances including fans and water coolers", "Extent of Power": ["Full powers", "₹70,000 p.a."], "Officials Authorised": ["HOP/HOD (CA/RA) not below E-8 for projects and offices", "CGM (HR) for Corporate Office", "Coordinator not below the rank of E-7"]}]}
|
| 80 |
+
{"section": "III", "title": "Hiring of Passenger and Escort Vehicles", "clause": 8, "subclauses": [{"id": "a", "description": "Hiring of car/jeep/bus/ambulance/escort vehicles for security/other passenger vehicles on annual, monthly, daily, or periodical basis.", "Extent of Power": ["Full Powers", "Up to ₹30.00 Lakh p.a.", "Up to ₹20.00 Lakh p.a."], "Officials Authorised": ["Director", "ED", "HOD (CA)", "HOD (RA)", "HOD (HR) not below the grade of E-8"]}]}
|
| 81 |
+
{"section": "III", "title": "Long Term Spares Agreement", "clause": 9, "subclauses": [{"id": "a", "description": "Long Term Spares Agreement for supply of spares from OEM/Authorized service provider for O&M Plant", "Extent of Power": "Full Power", "Officials Authorised": ["Director (T)"], "remarks": ["Valid up to 5 years."]}]}
|
| 82 |
+
{"section": "III", "title": "Purchase of Newspapers, Magazines, Journals, Books, and Technical Publications", "clause": 10, "subclauses": [{"id": "i", "description": "Purchase of Newspapers / Magazines / Journals etc. for Office, Guesthouse, or Field Hostels", "Extent of Power": "Full Power", "Officials Authorised": ["HOP", "HOD", "HOD (CC) not below the grade of E-8"]}, {"id": "ii", "description": "Purchase of books, technical journals, periodicals, standards etc., including in electronic form", "sub-subclauses": [{"id": "a", "description": "Corporate Central Library", "Extent of Power": "₹15,000/- p.a.", "Officials Authorised": ["HOD (CC)", "HOD (HR) not below the grade of E-8"]}, {"id": "b", "description": "Project Libraries", "Extent of Power": "Full powers", "Officials Authorised": ["HOP", "Head of Project HR not below the grade of E-7"]}, {"id": "c", "description": "Departmental Libraries in C.O. (Guwahati / Shillong / Kolkata / New Delhi) and other Offices", "Extent of Power": "Full powers", "Officials Authorised": ["HOD not below the grade of E-7", "DGM (HR) Admn at Shillong"]}]}]}
|
| 83 |
+
{"section": "III", "title": "Sanction for prepayment for Franking Machine units", "clause": 12, "subclauses": [{"id": "a", "description": "Sanction for prepayment for Franking Machine units", "Extent of Power": "Full Powers", "Officials Authorised": ["HOP / HOD not below the rank of E-8"]}]}
|
| 84 |
+
{"section": "IV", "title": "Operation and closing of Bank account & Opening of Letter of Credit", "notes": ["All project/office proposals require prior vetting of HOF", "Power exercise is subject to Policy Guidelines of Financial Concurrence", "Specific relaxation/special powers may be granted by Director (Finance)"], "clause": 1, "delegated_to": [{"Director (Finance)": "Full Power"}, {"ED (Finance) / CGM (Finance)": ["Full Power in absence of D(F)", "Full Power for dropping officers from authorization matrix on transfer/separation"]}, {"Opening of Letter of Credit": "ED (Finance) / CGM (Finance) - Full Power"}]}
|
| 85 |
+
{"section": "IV", "title": "Passing and Payment of Bills", "notes": ["All project/office proposals require prior vetting of HOF", "Power exercise is subject to Policy Guidelines of Financial Concurrence", "Specific relaxation/special powers may be granted by Director (Finance)"], "clause": 2, "subclauses": [{"id": "a", "location": "Corporate Office", "limits": [{"ED(F)/CGM(F)/GM(F)/DGM(F)/Sr. Mgr(F)": "Full Power"}, {"Manager (F)": "₹50 Lakh"}, {"Deputy Manager (F)": "₹20 Lakh"}, {"AO/AM (F)": "₹10 Lakh"}, {"AAO": "₹2.5 Lakh"}], "note": "No limit for passing establishment bills"}, {"id": "b", "location": "Project / Other Offices", "description": "Power delegated to HOP for Contracts executed at project/HOD/Corporate Affairs/Coordinator (not below E-7)", "groups": [{"group": "Head of Finance not below Sr. Mgr (F)", "limit": "Full Power"}, {"group": "Sr. Mgr (F) not being Head of Finance - ₹100 Lakh"}, {"group": "Manager (F) - ₹50 Lakh"}, {"group": "Deputy Manager (F) - ₹20 Lakh"}, {"group": "AO/AM (F) - ₹10 Lakh"}, {"group": "AAO - ₹2.5 Lakh"}], "note": "No limit for establishment bills"}, {"id": "c", "location": "Head of Finance (lower levels)", "limits": [{"Manager (F)": "₹75 Lakh"}, {"Deputy Manager (F)": "₹40 Lakh"}]}]}
|
| 86 |
+
{"section": "IV", "title": "Financial Examination & Vetting of Proposals", "notes": ["All project/office proposals require prior vetting of HOF", "Power exercise is subject to Policy Guidelines of Financial Concurrence", "Specific relaxation/special powers may be granted by Director (Finance)"], "clause": 3, "subclauses": [{"id": "a", "location": "Corporate Office", "rules": [{"CMD/Board’s powers": "Director (Finance) (or HOD Finance in absence)"}, {"Functional Directors' powers": "In-charge of Finance Concurrence Cell (not below GM)"}, {"Approvals below Functional Directors": "Officer not below Sr. Manager (F)"}]}, {"id": "b", "location": "Project / Coordination Offices", "ranks": [{"Sr. Manager (F) & above": {"HOF": "Full Power", "Non-HOF": "₹100 Lakh"}}, {"Manager (F)": {"HOF": "₹75 Lakh", "Non-HOF": "₹50 Lakh"}}, {"Deputy Manager (F)": {"HOF": "₹35 Lakh", "Non-HOF": "₹20 Lakh"}}, {"AO/AM (F)": {"HOF": "₹20 Lakh", "Non-HOF": "₹10 Lakh"}}], "notes": ["All proposals for vetting must go through HOF, even if subordinate officers are delegated", "Full power is linked to the power of the concerned HOP/HOD/Coordinator not below E-7"]}]}
|
| 87 |
+
{"section": "IV", "title": "Fixation of Pay & Other Matters Relating to Pay & Allowances", "notes": ["All project/office proposals require prior vetting of HOF", "Power exercise is subject to Policy Guidelines of Financial Concurrence", "Specific relaxation/special powers may be granted by Director (Finance)"], "clause": 4, "subclauses": [{"id": "a", "location": "Corporate Office", "powers": [{"Sr. Manager (F)": "Full Power (routine matters)"}, {"Manager (F)": "up to E4"}, {"Dy. Manager (F)": "up to E2"}, {"AO/AM (F)": "up to E1"}, {"AAO (F)": "up to S3"}]}, {"id": "b", "location": "Project / Coordination Offices", "powers": [{"Sr. Manager (F)": "Full Power (routine matters)"}, {"Manager (F)": "up to E4"}, {"Dy. Manager (F)": "up to E3"}, {"AO/AM (F)": "up to E1"}, {"AAO (F)": "up to S3"}]}]}
|
| 88 |
+
{"section": "IV", "title": "Power to Invest Money (not Shares in Companies)", "notes": ["All project/office proposals require prior vetting of HOF", "Power exercise is subject to Policy Guidelines of Financial Concurrence", "Specific relaxation/special powers may be granted by Director (Finance)"], "clause": 5, "delegated_to": [{"i": "Committee of CMD and Director (Finance)"}, {"ii": "Committee of CMD, Director (Finance), and Director (Technical)/Director (Personnel)"}], "note": "As per powers delegated in the Short-Term Investment of Cash Surplus Policy approved by the Board"}
|
| 89 |
+
{"section": "Urgent Local Purchases", "title": "Committee for Purchases Below ₹3 Lakh", "clause": "LPC-1", "composition": [{"Chairman": "Deputy General Manager"}, {"Members": ["One member from Finance", "One member from Indenter side (not below the rank of Sr. Manager)"]}], "approving_authority": "ED / CGM / GM (HR) (HOD & HOP) – not below the rank of E-8", "remarks": ["The Committee shall survey the market and assess stock availability.", "At least 3 vendor quotations must be obtained in sealed/pasted covers.", "Codal formalities must be fulfilled.", "A comparative statement and reasonability of rates should be prepared.", "The proposal shall be submitted to the approving authority.", "After approval, the Chairman of the Committee will place the order."]}
|
| 90 |
+
{"section": "Urgent Local Purchases", "title": "Committee for Purchases Below ₹50,000", "clause": "LPC-2", "composition": [{"Chairman": "Senior Manager"}, {"Members": ["One member from Finance", "One member from Indenter side (not below the rank of Deputy Manager)"]}], "approving_authority": "ED / CGM / GM (HR) (HOD & HOP) – not below the rank of E-8", "remarks": ["Same procedure as LPC-1"]}
|
create_granular_chunks.py
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import re
|
| 3 |
+
from typing import List, Dict, Any
|
| 4 |
+
|
| 5 |
+
# Define the input and output filenames
|
| 6 |
+
INPUT_FILE = "combined_context.jsonl" # Or your Kaggle path
|
| 7 |
+
OUTPUT_FILE = "granular_chunks.jsonl"
|
| 8 |
+
|
| 9 |
+
# Global counter to ensure all generated IDs are unique
|
| 10 |
+
chunk_counter = 0
|
| 11 |
+
|
| 12 |
+
def get_unique_id():
|
| 13 |
+
"""Returns a unique, incrementing ID."""
|
| 14 |
+
global chunk_counter
|
| 15 |
+
chunk_counter += 1
|
| 16 |
+
return chunk_counter
|
| 17 |
+
|
| 18 |
+
def parse_value_to_int(value_str: str) -> int:
|
| 19 |
+
"""Converts a financial string like '₹5 crore' or '₹50 lakh' to an integer."""
|
| 20 |
+
if not isinstance(value_str, str):
|
| 21 |
+
return 0
|
| 22 |
+
value_str = value_str.lower().replace('₹', '').strip()
|
| 23 |
+
if value_str in ["nil", "---", ""]:
|
| 24 |
+
return 0
|
| 25 |
+
try:
|
| 26 |
+
num_part = re.findall(r'[\d\.]+', value_str)
|
| 27 |
+
if not num_part:
|
| 28 |
+
return 0
|
| 29 |
+
num = float(num_part[0])
|
| 30 |
+
if 'crore' in value_str:
|
| 31 |
+
return int(num * 1_00_00_000)
|
| 32 |
+
if 'lakh' in value_str:
|
| 33 |
+
return int(num * 1_00_000)
|
| 34 |
+
return int(num)
|
| 35 |
+
except (ValueError, IndexError):
|
| 36 |
+
return 0
|
| 37 |
+
|
| 38 |
+
def create_chunk(context: Dict, text_override: str = None, id_override: str = None) -> Dict:
|
| 39 |
+
"""Helper function to create a standardized chunk."""
|
| 40 |
+
chunk_id = id_override if id_override else f"chunk-{get_unique_id()}"
|
| 41 |
+
text = text_override if text_override else context.get("description", context.get("title", str(context)))
|
| 42 |
+
|
| 43 |
+
metadata = {
|
| 44 |
+
"section": context.get("section"),
|
| 45 |
+
"clause": context.get("clause"),
|
| 46 |
+
"title": context.get("title"),
|
| 47 |
+
"description": context.get("description"),
|
| 48 |
+
"authority": context.get("authority"),
|
| 49 |
+
"limit_text": context.get("limit_text"),
|
| 50 |
+
"limit_inr": parse_value_to_int(str(context.get("limit_text", ""))),
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
return {
|
| 54 |
+
"id": chunk_id,
|
| 55 |
+
"text": text,
|
| 56 |
+
"metadata": {k: v for k, v in metadata.items() if v is not None}
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
def process_chunk(data: Dict, context: Dict) -> List[Dict]:
|
| 60 |
+
"""
|
| 61 |
+
Processes a dictionary from the source file and deconstructs it if possible.
|
| 62 |
+
"""
|
| 63 |
+
new_chunks = []
|
| 64 |
+
|
| 65 |
+
# Update context with current data
|
| 66 |
+
current_context = context.copy()
|
| 67 |
+
current_context.update(data)
|
| 68 |
+
|
| 69 |
+
# Case 1: Handle "delegation" structure
|
| 70 |
+
if "delegation" in data and isinstance(data["delegation"], dict):
|
| 71 |
+
for authority, limit_text in data["delegation"].items():
|
| 72 |
+
text = f"Regarding '{current_context.get('description', current_context.get('title'))}', the power for {authority} is {limit_text}."
|
| 73 |
+
chunk_context = current_context.copy()
|
| 74 |
+
chunk_context["authority"] = authority
|
| 75 |
+
chunk_context["limit_text"] = limit_text
|
| 76 |
+
new_chunks.append(create_chunk(chunk_context, text_override=text))
|
| 77 |
+
return new_chunks
|
| 78 |
+
|
| 79 |
+
# Case 2: Handle "authority" and "extent_of_power" structure (often in Section II)
|
| 80 |
+
if "authority" in data and "extent_of_power" in data:
|
| 81 |
+
# This structure is complex, we will create a single, descriptive chunk
|
| 82 |
+
text = f"Regarding '{current_context.get('title')}', the authority and extent of power are as follows: {json.dumps(data)}."
|
| 83 |
+
new_chunks.append(create_chunk(current_context, text_override=text))
|
| 84 |
+
return new_chunks
|
| 85 |
+
|
| 86 |
+
# Recursive step: process nested lists
|
| 87 |
+
has_nested_chunks = False
|
| 88 |
+
for key, value in data.items():
|
| 89 |
+
if isinstance(value, list):
|
| 90 |
+
for item in value:
|
| 91 |
+
if isinstance(item, dict):
|
| 92 |
+
# Recurse and add the results
|
| 93 |
+
nested_results = process_chunk(item, current_context)
|
| 94 |
+
if nested_results:
|
| 95 |
+
new_chunks.extend(nested_results)
|
| 96 |
+
has_nested_chunks = True
|
| 97 |
+
|
| 98 |
+
# If we processed children, we don't need to keep the parent chunk
|
| 99 |
+
if has_nested_chunks:
|
| 100 |
+
return new_chunks
|
| 101 |
+
|
| 102 |
+
# Base case: If no specific rules were deconstructed, create a single chunk for the item
|
| 103 |
+
new_chunks.append(create_chunk(current_context))
|
| 104 |
+
return new_chunks
|
| 105 |
+
|
| 106 |
+
def main():
|
| 107 |
+
"""Main function to read, process, and write."""
|
| 108 |
+
print(f"Starting to process '{INPUT_FILE}'...")
|
| 109 |
+
final_chunks = []
|
| 110 |
+
|
| 111 |
+
try:
|
| 112 |
+
with open(INPUT_FILE, 'r', encoding='utf-8') as f:
|
| 113 |
+
for i, line in enumerate(f):
|
| 114 |
+
try:
|
| 115 |
+
data = json.loads(line)
|
| 116 |
+
processed = process_chunk(data, {})
|
| 117 |
+
final_chunks.extend(processed)
|
| 118 |
+
except json.JSONDecodeError:
|
| 119 |
+
print(f"Warning: Skipping malformed JSON on line {i+1}")
|
| 120 |
+
continue
|
| 121 |
+
except FileNotFoundError:
|
| 122 |
+
print(f"Error: Input file '{INPUT_FILE}' not found.")
|
| 123 |
+
return
|
| 124 |
+
|
| 125 |
+
print(f"Deconstructed into {len(final_chunks)} granular chunks.")
|
| 126 |
+
|
| 127 |
+
with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
|
| 128 |
+
for chunk in final_chunks:
|
| 129 |
+
f.write(json.dumps(chunk) + '\n')
|
| 130 |
+
|
| 131 |
+
print(f"Successfully created granular chunks file: '{OUTPUT_FILE}'")
|
| 132 |
+
|
| 133 |
+
if __name__ == "__main__":
|
| 134 |
+
main()
|
processed_chunks.json
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|