Просмотр исходного кода

finishe to implement de generate cpr

gdias 2 недель назад
Родитель
Сommit
89ba1a7547

+ 32 - 0
controllers/HarvestListController.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace Controllers;
+
+use Libs\ResponseLib;
+use Models\HarvestModel;
+use Psr\Http\Message\ServerRequestInterface;
+
+class HarvestListController
+{
+    private HarvestModel $harvestModel;
+
+    public function __construct()
+    {
+        $this->harvestModel = new HarvestModel();
+    }
+
+    public function __invoke(ServerRequestInterface $request)
+    {
+        try {
+            $harvests = $this->harvestModel->getAll();
+        } catch (\Throwable $e) {
+            return ResponseLib::sendFail('Falha ao listar safra: ' . $e->getMessage(), [], 'E_DATABASE')->withStatus(500);
+        }
+
+        if (!$harvests) {
+            return ResponseLib::sendFail('Nenhuma safra encontrada', [], 'E_NOT_FOUND')->withStatus(204);
+        }
+
+        return ResponseLib::sendOk($harvests, 'S_HARVEST_LIST');
+    }
+}

+ 231 - 0
migrations/harvest_inserts.sql

@@ -0,0 +1,231 @@
+BEGIN;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('22401', 'ALFACE') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18828', 'ATUM INTEIRO') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19000', 'CANA DE AÇÚCAR') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18829', 'CORVINA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('6466', 'NAO SE APLICA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19036', 'PINUS - PADRAO BASICO SERRARIA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19971', 'PINUS - +25 CM DIAMETRO - MADEIRA GROSSA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19037', 'PINUS - +25 CM DIAMETRO MADEIRA GROSSA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19038', 'PINUS - 8 A 17 CM DIAMETRO MADEIRA FINA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19039', 'PINUS -17 A 25 CM DIAMETRO-MADEIRA MEDIA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18826', 'QUILOGRAMA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19941', 'SAFRA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18831', 'SEMENTES FORRAGEIRAS') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18827', 'TILAPIA VIVA') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18830', 'TRIGO BENEFICIADO') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('17154', '0999/0999') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('163', '2010/2011') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19939', '2010/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('335', '2011/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5022', '2012/2016') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5023', '2012/2017') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('333', '2012/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5128', '2013/2016') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5129', '2013/2017') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5130', '2013/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5127', '2013/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('340', '2013/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5055', '2014/2016') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5054', '2014/2017') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5053', '2014/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5052', '2014/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5051', '2014/2020') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('6961', '2014/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('6962', '2014/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('176', '2015/2016') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('7964', '2015/2017') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('7965', '2015/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('7966', '2015/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('7963', '2015/2020') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('9207', '2015/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('8827', '2015/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('177', '2016/2016') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('178', '2016/2017') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('8106', '2016/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('8107', '2016/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('8108', '2016/2020') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('8109', '2016/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('9829', '2016/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('10356', '2016/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('179', '2017/2017') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('180', '2017/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('10835', '2017/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('10834', '2017/2020') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('10833', '2017/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('8546', '2017/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('10635', '2017/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12527', '2017/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('181', '2018/2018') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5161', '2018/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('11824', '2018/2020') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('11825', '2018/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('11823', '2018/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12145', '2018/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('11362', '2018/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('182', '2019/2019') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('5162', '2019/2020') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12469', '2019/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12470', '2019/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12471', '2019/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12472', '2019/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12468', '2019/2025') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('13950', '2019/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('14290', '2019/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('14523', '2019/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('183', '2020/2020') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('6963', '2020/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12474', '2020/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12475', '2020/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12476', '2020/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12477', '2020/2025') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('14964', '2020/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15520', '2020/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15521', '2020/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15522', '2020/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15523', '2020/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('184', '2021/2021') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('8807', '2021/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12478', '2021/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12479', '2021/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12480', '2021/2025') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15524', '2021/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15525', '2021/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15526', '2021/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15527', '2021/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15528', '2021/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15529', '2021/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19028', '2021/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19029', '2021/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('17219', '2021/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19030', '2021/2037') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19961', '2021/2038') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19962', '2021/2039') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19963', '2021/2040') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19964', '2021/2041') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19965', '2021/2042') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('185', '2022/2022') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('10272', '2022/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12481', '2022/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12482', '2022/2025') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('17942', '2022/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('17943', '2022/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18081', '2022/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18082', '2022/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18083', '2022/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18084', '2022/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18085', '2022/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19031', '2022/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19032', '2022/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19033', '2022/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19034', '2022/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19035', '2022/2037') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19966', '2022/2038') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19967', '2022/2039') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19968', '2022/2040') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19969', '2022/2041') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19970', '2022/2042') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('186', '2023/2023') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12483', '2023/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12484', '2023/2025') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18683', '2023/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18060', '2023/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20200', '2023/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20620', '2023/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20621', '2023/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20622', '2023/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20623', '2023/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20601', '2023/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20624', '2023/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20625', '2023/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('21280', '2023/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('21281', '2023/2037') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('21282', '2023/2038') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('21400', '2023/2039') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('21283', '2023/2040') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('187', '2024/2024') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('12473', '2024/2025') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('18412', '2024/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19005', '2024/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19006', '2024/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19007', '2024/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19001', '2024/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23900', '2024/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23920', '2024/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23901', '2024/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23940', '2024/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23921', '2024/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('24860', '2024/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('24861', '2024/2037') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('24862', '2024/2038') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('24863', '2024/2039') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('24864', '2024/2040') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('188', '2025/2025') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15798', '2025/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19008', '2025/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19009', '2025/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19010', '2025/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('24680', '2025/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('25663', '2025/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26064', '2025/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26065', '2025/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26066', '2025/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26067', '2025/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26121', '2025/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26122', '2025/2037') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26123', '2025/2038') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26124', '2025/2039') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26125', '2025/2040') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27781', '2025/2045') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27921', '2025/2055') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27782', '2025/2065') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('189', '2026/2026') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15799', '2026/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19011', '2026/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19012', '2026/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19013', '2026/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('25400', '2026/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27101', '2026/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27102', '2026/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27103', '2026/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27104', '2026/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27105', '2026/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('27541', '2026/2040') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('190', '2027/2027') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('15800', '2027/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19014', '2027/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19015', '2027/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('28021', '2027/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26983', '2027/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('191', '2028/2028') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('17497', '2028/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20086', '2029/2029') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('17498', '2029/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23000', '2030/2030') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('17499', '2030/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23001', '2031/2031') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('21520', '2031/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19026', '2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23002', '2032/2032') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23003', '2032/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('19027', '2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23004', '2033/2033') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23005', '2033/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23006', '2034/2034') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23020', '2034/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23021', '2035/2035') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23022', '2035/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23023', '2036/2036') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23024', '2036/2037') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23025', '2037/2037') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23026', '2037/2038') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('23027', '2038/2038') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26002', '21/21,21/22,22/22,22/23/23/23,24/24') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('26003', '21/21') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20100', '22/23') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20105', '22/23') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20101', '23/24') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20102', '24/25') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20103', '25/26') ON CONFLICT (harvest_code) DO NOTHING;
+INSERT INTO harvest (harvest_code, harvest_name) VALUES ('20104', '26/27') ON CONFLICT (harvest_code) DO NOTHING;
+COMMIT;

+ 5 - 0
migrations/safra_migration.sql

@@ -0,0 +1,5 @@
+CREATE TABLE harvest ( 
+    harvest_id SERIAL PRIMARY KEY, 
+    harvest_code TEXT NOT NULL UNIQUE, 
+    harvest_name TEXT NOT NULL 
+    );

+ 23 - 0
models/HarvestModel.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace Models;
+
+class HarvestModel
+{
+    private \PDO $pdo;
+
+    public function __construct()
+    {
+        if (!isset($GLOBALS['pdo']) || !$GLOBALS['pdo'] instanceof \PDO) {
+            throw new \RuntimeException('Global PDO connection not initialized');
+        }
+
+        $this->pdo = $GLOBALS['pdo'];
+    }
+
+    public function getAll(): array
+    {
+        $stmt = $this->pdo->query('SELECT harvest_code, harvest_name FROM "harvest" ORDER BY harvest_name');
+        return $stmt->fetchAll(\PDO::FETCH_ASSOC) ?: [];
+    }
+}

+ 1 - 0
public/index.php

@@ -74,6 +74,7 @@ $app->post('/token/orderbook', $authJwt, \Controllers\TokenOrderbookController::
 $app->post('/orderbook/filter', $authJwt, \Controllers\OrderbookFilterController::class);
 $app->post('/orderbook/payment', $authJwt, \Controllers\OrderbookPaymentController::class);
 $app->post('/orderbook/transfer', $authJwt, \Controllers\OrderbookTransferController::class);
+$app->post('/harvest/list', $authJwt, \Controllers\HarvestListController::class);
 
 $app->post('/b3/token', \Controllers\B3TokenController::class);
 $app->post('/b3/cpr/register', $authJwt, \Controllers\B3CprRegisterController::class);

+ 6 - 0
services/B3CprService.php

@@ -196,6 +196,12 @@ class B3CprService
                 'finalityCode' => $cpr['cpr_finality_code'] ?? null,
                 'contractCode' => $cpr['cpr_contract_code'] ?? null,
             ],
+            'deposit' => [
+                'otcFavoredAccountCode' => '64359.00-3',
+                'selfNumber' => $cpr['cpr_contract_code'] ?? null,
+                'settlementModalityTypeCode' => '0',
+                'depositQuantity' => '1',
+            ],
             'creditor' => [
                 'creditorName' => $cpr['cpr_creditor_name'] ?? null,
                 'documentNumber' => $cpr['cpr_creditor_document_number'] ?? null,