Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
sterlite_custom_reports
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
suryakant
sterlite_custom_reports
Commits
f0aa3dde
Commit
f0aa3dde
authored
Oct 11, 2023
by
suryakant
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Sterlite Custom Report Updates
parent
fb0f8019
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
129 additions
and
334 deletions
+129
-334
scripts/core/db/postgres/custom_report_query.py
scripts/core/db/postgres/custom_report_query.py
+120
-331
scripts/template/sterlite_report_template.py
scripts/template/sterlite_report_template.py
+9
-3
No files found.
scripts/core/db/postgres/custom_report_query.py
View file @
f0aa3dde
...
@@ -337,161 +337,10 @@ class SterliteRefineryQuery:
...
@@ -337,161 +337,10 @@ class SterliteRefineryQuery:
GROUP BY 1,2,3
GROUP BY 1,2,3
"""
"""
class
GridPowerAvailability
:
""" POWER AVAILABILITY """
QUERY_1
=
"""
SELECT
first_tbl.power_availability,
first_tbl.uom,
first_tbl.norms,
first_tbl.on_date,
second_tbl.mtd,
third_tbl.ytd
FROM
(select
'Grid Power Availability' as power_availability,
'
%
' as UOM,
avg(grid_plan) as norms,
avg(grid_actual) as on_date
from(
select dd_1.date_dt as date,
plan.grid_plan,
case when actual.grid_actual is null then 100 else actual.grid_actual
end as grid_actual
from(
select date(date) as posting_date,
area_ics_head_value::double precision as grid_plan
from semantic_prod.area_ics_head_refinery_norms
where lower(trim(area_ics_head_select)) = 'grid power availability'
and date_part('day',date) = 1
group by 1,2
)plan
left join(SELECT dim_date.date_dt,
dim_date.month_of_yr_num AS mnth,
dim_date.yr_name AS yr
FROM semantic_prod.dim_date) dd_1 ON dd_1.mnth = date_part('month',
plan.posting_date)
and dd_1.yr = date_part('year',plan.posting_date)
left join(
select date(date) as posting_date,
max(case when lower(trim(loss_or_gain_shutdown_rectifier)) = 'both'
then ((24 - coalesce(loss_or_gain_shutdown_duration::double precision,
0)) / 24) * 100
else null end) as grid_actual
from semantic_prod.shutdown_details
group by 1
)actual on dd_1.date_dt = actual.posting_date
)grid_data
where date between '{day_start_date}' AND '{day_end_date}'
group by 1,2) as first_tbl
JOIN
(
select
'Grid Power Availability' as power_availability,
'
%
' as UOM,
avg(grid_actual) as mtd
from(
select dd_1.date_dt as date,
plan.grid_plan,
case when actual.grid_actual is null then 100 else actual.grid_actual
end as grid_actual
from(
select date(date) as posting_date,
area_ics_head_value::double precision as grid_plan
from semantic_prod.area_ics_head_refinery_norms
where lower(trim(area_ics_head_select)) = 'grid power availability'
and date_part('day',date) = 1
group by 1,2
)plan
left join(SELECT dim_date.date_dt,
dim_date.month_of_yr_num AS mnth,
dim_date.yr_name AS yr
FROM semantic_prod.dim_date) dd_1 ON dd_1.mnth = date_part('month',
plan.posting_date)
and dd_1.yr = date_part('year',plan.posting_date)
left join(
select date(date) as posting_date,
max(case when lower(trim(loss_or_gain_shutdown_rectifier)) = 'both'
then ((24 - coalesce(loss_or_gain_shutdown_duration::double precision,
0)) / 24) * 100
else null end) as grid_actual
from semantic_prod.shutdown_details
group by 1
)actual on dd_1.date_dt = actual.posting_date
)grid_data
where date between '{month_start_date}' AND '{month_end_date}'
group by 1,2
) as second_tbl
ON first_tbl.power_availability=second_tbl.power_availability
JOIN
(
select
'Grid Power Availability' as power_availability,
'
%
' as UOM,
avg(grid_actual) as ytd
from(
select dd_1.date_dt as date,
plan.grid_plan,
case when actual.grid_actual is null then 100 else actual.grid_actual
end as grid_actual
from(
select date(date) as posting_date,
area_ics_head_value::double precision as grid_plan
from semantic_prod.area_ics_head_refinery_norms
where lower(trim(area_ics_head_select)) = 'grid power availability'
and date_part('day',date) = 1
group by 1,2
)plan
left join(SELECT dim_date.date_dt,
dim_date.month_of_yr_num AS mnth,
dim_date.yr_name AS yr
FROM semantic_prod.dim_date) dd_1 ON dd_1.mnth = date_part('month',
plan.posting_date)
and dd_1.yr = date_part('year',plan.posting_date)
left join(
select date(date) as posting_date,
max(case when lower(trim(loss_or_gain_shutdown_rectifier)) = 'both'
then ((24 - coalesce(loss_or_gain_shutdown_duration::double precision,
0)) / 24) * 100
else null end) as grid_actual
from semantic_prod.shutdown_details
group by 1
)actual on dd_1.date_dt = actual.posting_date
)grid_data
where date between '{year_start_date}' AND '{year_end_date}'
group by 1,2
) as third_tbl
ON second_tbl.power_availability=third_tbl.power_availability
"""
class
Cir140KARectifierAvgCurrent
:
class
Cir140KARectifierAvgCurrent
:
""" POWER AVAILABILITY """
""" POWER AVAILABILITY """
QUERY_1
=
"""
QUERY_1
=
"""
SELECT
SELECT
first_tbl.power_availability,
first_tbl.uom,
first_tbl.norms,
ROUND(first_tbl.on_date :: NUMERIC, 2) on_date,
ROUND(second_tbl.mtd :: NUMERIC, 2) mtd,
ROUND(third_tbl.ytd :: NUMERIC, 2) ytd
FROM
(SELECT
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
AVG(PLAN_METRIC_VALUE) AS norms,
AVG(PLAN_METRIC_VALUE) AS norms,
...
@@ -502,12 +351,11 @@ class SterliteRefineryQuery:
...
@@ -502,12 +351,11 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
AND date between '{day_start_date}' AND '{day_end_date}'
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
group by 1,2) as first_tbl
GROUP BY 1,2
"""
JOIN
QUERY_2
=
"""
SELECT
(SELECT
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
...
@@ -517,14 +365,11 @@ class SterliteRefineryQuery:
...
@@ -517,14 +365,11 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
AND date between '{month_start_date}' AND '{month_end_date}'
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
group by 1,2) as second_tbl
GROUP BY 1,2
"""
ON first_tbl.power_availability=second_tbl.power_availability
QUERY_3
=
"""
SELECT
JOIN
(SELECT
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
...
@@ -534,27 +379,14 @@ class SterliteRefineryQuery:
...
@@ -534,27 +379,14 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
AND date between '{year_start_date}' AND '{year_end_date}'
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
group by 1,2) as third_tbl
GROUP BY 1,2
ON second_tbl.power_availability=third_tbl.power_availability
"""
"""
class
Cir235KARectifierAvgCurrent
:
class
Cir235KARectifierAvgCurrent
:
""" POWER AVAILABILITY """
""" POWER AVAILABILITY """
QUERY_1
=
"""
QUERY_1
=
"""
SELECT
SELECT
first_tbl.power_availability,
first_tbl.uom,
first_tbl.norms,
ROUND(first_tbl.on_date :: NUMERIC, 2) on_date,
ROUND(second_tbl.mtd :: NUMERIC, 2) mtd,
ROUND(third_tbl.ytd :: NUMERIC, 2) ytd
FROM
(SELECT
'Cir-2 35 KA Rectifier Avg. Current' AS power_availability,
'Cir-2 35 KA Rectifier Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
AVG(PLAN_METRIC_VALUE) AS norms,
AVG(PLAN_METRIC_VALUE) AS norms,
...
@@ -567,11 +399,10 @@ class SterliteRefineryQuery:
...
@@ -567,11 +399,10 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '35ka_rectifier_current'
WHERE LOWER(TRIM(KPI)) = '35ka_rectifier_current'
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
GROUP BY 1,2) as first_tbl
GROUP BY 1,2
"""
JOIN
QUERY_2
=
"""
SELECT
(SELECT
'Cir-2 35 KA Rectifier Avg. Current' AS power_availability,
'Cir-2 35 KA Rectifier Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
...
@@ -583,13 +414,10 @@ class SterliteRefineryQuery:
...
@@ -583,13 +414,10 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '35ka_rectifier_current'
WHERE LOWER(TRIM(KPI)) = '35ka_rectifier_current'
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
GROUP BY 1,2) as second_tbl
GROUP BY 1,2
"""
ON first_tbl.power_availability=second_tbl.power_availability
QUERY_3
=
"""
SELECT
JOIN
(SELECT
'Cir-2 35 KA Rectifier Avg. Current' AS power_availability,
'Cir-2 35 KA Rectifier Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
...
@@ -601,27 +429,13 @@ class SterliteRefineryQuery:
...
@@ -601,27 +429,13 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '35ka_rectifier_current'
WHERE LOWER(TRIM(KPI)) = '35ka_rectifier_current'
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
GROUP BY 1,2) as third_tbl
GROUP BY 1,2
ON second_tbl.power_availability=third_tbl.power_availability
"""
"""
class
TotalAvgCurrent
:
class
TotalAvgCurrent
:
""" POWER AVAILABILITY """
""" POWER AVAILABILITY """
QUERY_1
=
"""
QUERY_1
=
"""
SELECT
SELECT
first_tbl.power_availability,
first_tbl.uom,
first_tbl.norms,
ROUND(first_tbl.on_date :: NUMERIC, 2) on_date,
ROUND(second_tbl.mtd :: NUMERIC, 2) mtd,
ROUND(third_tbl.ytd :: NUMERIC, 2) ytd
FROM
(SELECT
'Total Avg. Current' AS power_availability,
'Total Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
AVG(PLAN_METRIC_VALUE) AS norms,
AVG(PLAN_METRIC_VALUE) AS norms,
...
@@ -632,12 +446,12 @@ class SterliteRefineryQuery:
...
@@ -632,12 +446,12 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) in
WHERE LOWER(TRIM(KPI)) in
('40ka_rectifier_current', '35ka_rectifier_current')
('40ka_rectifier_current', '35ka_rectifier_current')
AND date between '{day_start_date}' AND '{day_end_date}'
group by 1,2) as first_tbl
JOIN
(SELECT
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
GROUP BY 1,2
"""
QUERY_2
=
"""
SELECT
'Total Avg. Current' AS power_availability,
'Total Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
...
@@ -647,14 +461,12 @@ class SterliteRefineryQuery:
...
@@ -647,14 +461,12 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) in
WHERE LOWER(TRIM(KPI)) in
('40ka_rectifier_current', '35ka_rectifier_current')
('40ka_rectifier_current', '35ka_rectifier_current')
AND date between '{month_start_date}' AND '{month_end_date}'
group by 1,2) as second_tbl
ON first_tbl.power_availability=second_tbl.power_availability
JOIN
(SELECT
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
GROUP BY 1,2
"""
QUERY_3
=
"""
SELECT
'Total Avg. Current' AS power_availability,
'Total Avg. Current' AS power_availability,
'KAmp' AS uom,
'KAmp' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
...
@@ -664,27 +476,15 @@ class SterliteRefineryQuery:
...
@@ -664,27 +476,15 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) in
WHERE LOWER(TRIM(KPI)) in
('40ka_rectifier_current', '35ka_rectifier_current')
('40ka_rectifier_current', '35ka_rectifier_current')
AND date between '{year_start_date}' AND '{year_end_date}'
group by 1,2) as third_tbl
ON second_tbl.power_availability=third_tbl.power_availability
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
GROUP BY 1,2
"""
"""
class
CurrentDensity
:
class
CurrentDensity
:
""" POWER AVAILABILITY """
""" POWER AVAILABILITY """
QUERY_1
=
"""
QUERY_1
=
"""
SELECT
SELECT
first_tbl.power_availability,
first_tbl.uom,
first_tbl.norms,
ROUND(first_tbl.on_date :: NUMERIC, 2) on_date,
ROUND(second_tbl.mtd :: NUMERIC, 2) mtd,
ROUND(third_tbl.ytd :: NUMERIC, 2) ytd
FROM
(SELECT
'Current Density' AS power_availability,
'Current Density' AS power_availability,
'Amp / m2' AS uom,
'Amp / m2' AS uom,
AVG(NUMO_PLAN) AS norms,
AVG(NUMO_PLAN) AS norms,
...
@@ -693,40 +493,29 @@ class SterliteRefineryQuery:
...
@@ -693,40 +493,29 @@ class SterliteRefineryQuery:
FROM SEMANTIC_PROD.CE_CD_TE_DETAILED_VIEW CCTDV2
FROM SEMANTIC_PROD.CE_CD_TE_DETAILED_VIEW CCTDV2
WHERE
WHERE
LOWER(TRIM(CATEGORY)) = 'cd'
LOWER(TRIM(CATEGORY)) = 'cd'
AND date between '{day_start_date}' AND '{day_end_date}'
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
) as first_tbl
"""
QUERY_2
=
"""
JOIN
SELECT
(SELECT
'Current Density' AS power_availability,
'Current Density' AS power_availability,
'Amp / m2' AS uom,
'Amp / m2' AS uom,
AVG(NUMO_PLAN) AS norms,
AVG(NUMO_ACTUAL) AS mtd
AVG(NUMO_ACTUAL) AS mtd
FROM SEMANTIC_PROD.CE_CD_TE_DETAILED_VIEW CCTDV2
FROM SEMANTIC_PROD.CE_CD_TE_DETAILED_VIEW CCTDV2
WHERE
WHERE
LOWER(TRIM(CATEGORY)) = 'cd'
LOWER(TRIM(CATEGORY)) = 'cd'
AND date between '{month_start_date}' AND '{month_end_date}'
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
) as second_tbl
"""
QUERY_3
=
"""
ON first_tbl.power_availability=second_tbl.power_availability
SELECT
JOIN
(SELECT
'Current Density' AS power_availability,
'Current Density' AS power_availability,
'Amp / m2' AS uom,
'Amp / m2' AS uom,
AVG(NUMO_PLAN) AS norms,
AVG(NUMO_ACTUAL) AS ytd
AVG(NUMO_ACTUAL) AS ytd
FROM SEMANTIC_PROD.CE_CD_TE_DETAILED_VIEW CCTDV2
FROM SEMANTIC_PROD.CE_CD_TE_DETAILED_VIEW CCTDV2
WHERE
WHERE
LOWER(TRIM(CATEGORY)) = 'cd'
LOWER(TRIM(CATEGORY)) = 'cd'
AND date between '{year_start_date}' AND '{year_end_date}'
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
) as third_tbl
ON second_tbl.power_availability=third_tbl.power_availability
"""
"""
class
EdgeStripConsumption
:
class
EdgeStripConsumption
:
...
...
scripts/template/sterlite_report_template.py
View file @
f0aa3dde
...
@@ -79,9 +79,7 @@ class SterliteRefineryTemplate:
...
@@ -79,9 +79,7 @@ class SterliteRefineryTemplate:
"YTD"
,
"YTD"
,
],
],
"query"
:
{
"query"
:
{
"Grid Power Availability"
:
[
"Grid Power Availability"
:
[],
SterliteRefineryQuery
.
GridPowerAvailability
.
QUERY_1
,
],
"Cir 1 Avg. Rectifier Running Hrs."
:
[],
"Cir 1 Avg. Rectifier Running Hrs."
:
[],
"Cir 2 Avg. Rectifier Running Hrs."
:
[],
"Cir 2 Avg. Rectifier Running Hrs."
:
[],
"Power Availability to Cir-1"
:
[],
"Power Availability to Cir-1"
:
[],
...
@@ -89,15 +87,23 @@ class SterliteRefineryTemplate:
...
@@ -89,15 +87,23 @@ class SterliteRefineryTemplate:
"Power Availability to Cell House"
:
[],
"Power Availability to Cell House"
:
[],
"Cir-1 40 KA Rectifier Avg. Current"
:
[
"Cir-1 40 KA Rectifier Avg. Current"
:
[
SterliteRefineryQuery
.
Cir140KARectifierAvgCurrent
.
QUERY_1
,
SterliteRefineryQuery
.
Cir140KARectifierAvgCurrent
.
QUERY_1
,
SterliteRefineryQuery
.
Cir140KARectifierAvgCurrent
.
QUERY_2
,
SterliteRefineryQuery
.
Cir140KARectifierAvgCurrent
.
QUERY_3
,
],
],
"Cir-2 35 KA Rectifier Avg. Current"
:
[
"Cir-2 35 KA Rectifier Avg. Current"
:
[
SterliteRefineryQuery
.
Cir235KARectifierAvgCurrent
.
QUERY_1
,
SterliteRefineryQuery
.
Cir235KARectifierAvgCurrent
.
QUERY_1
,
SterliteRefineryQuery
.
Cir235KARectifierAvgCurrent
.
QUERY_2
,
SterliteRefineryQuery
.
Cir235KARectifierAvgCurrent
.
QUERY_3
,
],
],
"Total Avg. Current"
:
[
"Total Avg. Current"
:
[
SterliteRefineryQuery
.
TotalAvgCurrent
.
QUERY_1
,
SterliteRefineryQuery
.
TotalAvgCurrent
.
QUERY_1
,
SterliteRefineryQuery
.
TotalAvgCurrent
.
QUERY_2
,
SterliteRefineryQuery
.
TotalAvgCurrent
.
QUERY_3
,
],
],
"Current Density"
:
[
"Current Density"
:
[
SterliteRefineryQuery
.
CurrentDensity
.
QUERY_1
,
SterliteRefineryQuery
.
CurrentDensity
.
QUERY_1
,
SterliteRefineryQuery
.
CurrentDensity
.
QUERY_2
,
SterliteRefineryQuery
.
CurrentDensity
.
QUERY_3
,
]
]
},
},
"data"
:
[],
"data"
:
[],
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment